Во-первых, вам нужно будет указать значение по умолчанию для facerecord.colorslibrary_ID
, так как вы не будете «знать», что это такое, когда вставляете в таблицу carslibrary
.Тем не менее, вы можете изменить свой DDL для таблицы facerecord
следующим образом:
CREATE TABLE `facerecord` (
`carslibrary_ID` int(10) unsigned NOT NULL,
`colorslibrary_ID` int(10) unsigned NOT NULL DEFAULT '0',
KEY `carslibrary_ID` (`carslibrary_ID`),
KEY `colorslibrary_ID` (`colorslibrary_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Я также изменил тип данных столбца colorslibrary_ID
, чтобы он соответствовал типу данных столбца colorslibrary.ColorID
на случай, если выкогда-нибудь хочется установить внешний ключ между facerecord.colorslibrary_ID
и colorslibrary.ColorID
;).Для полноты вы должны вставить строку в таблицу colorslibrary
с ColorID = 0. Следовательно:
insert into `colorslibrary` (ColorName) values ('unknown color');
update `colorslibrary` set ColorID = 0 where ColorName = 'unknown color';
Затем вы можете продолжить и определить свой триггер для вставки в таблицу facerecord
:
delimiter $$
CREATE TRIGGER carslibrary_trigger
AFTER insert ON carslibrary
FOR EACH ROW
BEGIN
insert into facerecord (carslibrary_ID) values (new.CarID);
END$$
delimiter;
Все новые строки, вставленные в таблицу facerecord
, будут вставлены с colorslibrary_ID
, относящимся к «неизвестному цвету» colorslibrary.ColorName
. Затем вы можете вручную обновить facerecord.colorslibrary_ID
как и когда вы это знаете.
Удачи!
PS Если вам нужно удалить любые существующие триггеры AFTER insert
из таблицы carslibrary, вы можете сделать это, сначала найдя существующие триггеры:
select trigger_name
from information_schema.triggers
where event_object_table = 'carslibrary'
and action_timing = 'AFTER'
and event_manipulation= 'INSERT';
Затем возьмите имя триггера, возвращенного вышеприведенным оператором (скажем, возвращена строка 'carslibrary_trigger'), и выполните:
drop trigger carslibrary_trigger;
Затем повторно запустите CREATE TRIGGER
script.
Как только триггер настроен, он автоматически выполнит действие, которое вы указали, когда произойдет указанное вами действие триггера.В этом случае мы говорим базе данных «после того, как вставка происходит в таблицу carslibrary, автоматически вставьте строку в таблицу facerecord
, используя CarID
новой строки carslibrary
для заполнения столбца facerecord.carslibrary_ID
».Как и в большинстве случаев, лучший способ это попробовать!После того, как вы создали триггер, вручную вставьте новую строку в таблицу 'carslibrary table. Now look at the data in the
facerecord` - вы должны увидеть новую строку, которая была вставлена при срабатывании триггера.
Похоже, вы выиграете отузнав о триггерах.Я рекомендую документы на сайте MySQL , потому что этот ответ на путь длиннее, чем я предполагал!