У меня есть такая таблица:

CREATE TABLE Car
    (
     CarID          INT NOT NULL AUTO_INCREMENT ,
     CarBrand        VARCHAR(20) NOT NULL ,
     InsuranceNumber INT NOT NULL ,

    PRIMARY KEY (CarID))AUTO_INCREMENT=1;

Я хочу, чтобы InsuranceNumber увеличивался автоматически, как CarID, но Я знаю, что не может быть двух автоматически увеличиваемых столбцов одновременно, но я провел небольшое исследование и обнаружил, что могу сделать это, создав trigger. Я пробовал свои собственные, но у меня не получалось делать то, что я хочу.

Я пробовал что-то вроде этого:

CREATE TRIGGER car_trigger AFTER INSERT ON Car
FOR EACH ROW UPDATE Car SET Car.CarID = Car.InsuranceNumber 

Но я получаю синтаксическую ошибку. Что мне делать ?

2
Yagimutsu 3 Май 2018 в 14:41

1 ответ

Лучший ответ

Проблема, о которой вы спрашивали, - это синтаксическая ошибка в коде триггера.

Решение состоит в том, чтобы использовать специальное ключевое слово NEW вместо имени таблицы.

CREATE TRIGGER car_trigger AFTER INSERT ON Car
FOR EACH ROW UPDATE Car SET NEW.CarID = NEW.InsuranceNumber 

Но вы должны знать, что это не сработает, если вы пытаетесь скопировать один столбец с автоинкрементом в другой, потому что вы не можете изменить значения столбцов NEW.* в триггере AFTER. Строка уже вставлена, и менять значения уже поздно.

Но в триггере BEFORE значение автоинкремента еще не сгенерировано, и столбец автоинкремента по-прежнему будет иметь значение NULL.

Единственный способ сделать что-то эквивалентное «двум столбцам с автоматическим приращением» - это сгенерировать автоматическое значение не с помощью AUTO_INCREMENT, а с помощью какого-либо другого механизма, чтобы вы могли передать значение в строку при выполнении оператора SQL.

0
Bill Karwin 4 Май 2018 в 17:07