MySQL-当table1使用MySQL workbench有新记录时,如何在table2下创建子记录?

MySQL-当table1使用MySQL workbench有新记录时,如何在table2下创建子记录?,mysql,sql,triggers,foreign-keys,mysql-workbench,Mysql,Sql,Triggers,Foreign Keys,Mysql Workbench,实际上是触发。但如何在mysql工作台中实现这一点呢。因此,每当我在table1中有任何新记录时,它都会创建一个引用table1.id到table2.parentid的新记录 --- [OK] --- This is created CREATE TABLE IF NOT EXISTS `test`.`table1` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT , `name` VARCHAR(45) NULL , PRIMARY KEY (

实际上是触发。但如何在mysql工作台中实现这一点呢。因此,每当我在
table1
中有任何新记录时,它都会创建一个引用
table1.id
table2.parentid
的新记录

--- [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 workbench不提供这种功能

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

这是因为您的子表中id列的数据类型不同,请将其更改为BIGINT(20)

为什么在我的触发器中我总是
NEW.id
==0?table2.parentid始终显示为0。原因很简单,在插入父表之前触发触发器,因此它找不到任何id,因为数据尚未插入。将触发器更改为“插入后打开”