2012-02-27 3 views
0

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?

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 

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 

Répondre

3

Cela s parce que vous avez un type de données différent de la colonne id dans votre table enfant changez-le en BIGINT (20)

+0

Pourquoi dans mon déclencheur j'ai toujours 'NEW.id' == 0? table2.parentid montrant toujours 0. – YumYumYum

+1

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 –

Questions connexes