Déclencher réellement. Mais comment puis-je faire cela dans mysql-workbench. Donc, quand j'ai de nouveaux enregistrements dans table1
, il crée un nouvel enregistrement référençant table1.id
à table2.parentid
?MySQL - Comment créer un enregistrement enfant sous table2 chaque fois que table1 a un nouvel enregistrement avec MySQL workbench?
--- [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
Suivi:
1) établi Mysql ne proposent pas
2) Cliquez sur le tableau 1> cliquez sur le déclencheurs bas onglet> écrire
-- 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
Pourquoi dans mon déclencheur j'ai toujours 'NEW.id' == 0? table2.parentid montrant toujours 0. – YumYumYum
La raison est très simple que votre déclencheur se déclenche avant l'insertion dans la table parente afin qu'il ne trouve aucun identifiant puisque les données n'ont pas été insérées. Changez votre déclencheur pour AFTER INSERT ON –