MySQL - Как создать дочернюю запись под таблицей 2 всякий раз, когда в таблице1 появляется новая запись с использованием MySQL Workbench? - PullRequest
0 голосов
/ 27 февраля 2012

Триггер на самом деле. Но как мне сделать это в MySQL Workbench. Так что в любое время, когда у меня появляются новые записи в table1, он создает новую запись со ссылкой table1.id на table2.parentid?

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) Щелкните по таблице1> щелкните по вкладке триггеров внизу> написать

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

1 Ответ

3 голосов
/ 27 февраля 2012

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

...