2012-02-27 3 views
0

Trigger фактически. Но как это сделать в mysql-workbench. Так что в любое время у меня есть новые записи в table1, он создает новую запись, ссылающуюся на table1.id на table2.parentid?MySQL. Как создать дочернюю запись в таблице2, когда таблица1 имеет новую запись с использованием Workbench MySQL?

enter image description here

--- [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 

ответ

3

Это потому что у вас есть другой тип данных столбца id в вашей дочерней таблице, чтобы изменить его на BIGINT (20)

+0

Почему в моем триггере у меня всегда 'NEW.id' == 0? table2.parentid всегда показывает 0. – YumYumYum

+1

Причина очень проста, ваш триггер срабатывает перед вставкой в ​​родительскую таблицу, поэтому он не сможет найти какой-либо идентификатор, так как данные не были вставлены. Измените триггер, чтобы ПОСЛЕ ВСТАВКИ ВКЛ. –

 Смежные вопросы

  • Нет связанных вопросов^_^