Trigger фактически. Но как это сделать в mysql-workbench. Так что в любое время у меня есть новые записи в table1
, он создает новую запись, ссылающуюся на table1.id
на table2.parentid
?MySQL. Как создать дочернюю запись в таблице2, когда таблица1 имеет новую запись с использованием Workbench MySQL?
--- [OK] --- This is created
CREATE TABLE IF NOT EXISTS `test`.`table1` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT ,
`name` VARCHAR(45) NULL ,
PRIMARY KEY (`id`))
ENGINE = InnoDB
--- [FAIL] --- #1005 - Can't create table 'test.table2' (errno: 150)
CREATE TABLE IF NOT EXISTS `test`.`table2` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT ,
`parentid` VARCHAR(45) NULL ,
`table1_id` BIGINT(20) NOT NULL ,
PRIMARY KEY (`id`) ,
INDEX `fk_table2_table1` (`parentid` ASC) ,
CONSTRAINT `fk_table2_table1`
FOREIGN KEY (`parentid`)
REFERENCES `test`.`table1` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
Развейте:
1) Mysql верстак не предлагают, что
2) Нажмите table1> выберите вкладку Триггеры низ> написать
-- trigger module initiate
DELIMITER $$
CREATE TRIGGER triggertest1 BEFORE INSERT ON table1
FOR EACH ROW BEGIN
INSERT INTO table2 SET parentid = NEW.id;
END;
$$
DELIMITER ; --- return to normal
Почему в моем триггере у меня всегда 'NEW.id' == 0? table2.parentid всегда показывает 0. – YumYumYum
Причина очень проста, ваш триггер срабатывает перед вставкой в родительскую таблицу, поэтому он не сможет найти какой-либо идентификатор, так как данные не были вставлены. Измените триггер, чтобы ПОСЛЕ ВСТАВКИ ВКЛ. –