Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在插入子表时将值插入父表的触发器_Mysql_Triggers_Mysql Error 1452 - Fatal编程技术网

Mysql 在插入子表时将值插入父表的触发器

Mysql 在插入子表时将值插入父表的触发器,mysql,triggers,mysql-error-1452,Mysql,Triggers,Mysql Error 1452,我有两张结构如下的桌子。当我试图添加到books表时,我得到一个错误,我无法添加或更新我期望的子行。我希望可以创建一个触发器,在添加到books表之前将publisher名称添加到publisher表中 这是我第一次使用触发器,我不确定我做错了什么,也找不到一个例子 create table publishers (name varchar(25) not null, address varchar(55), phone varchar(12), PRIMAR

我有两张结构如下的桌子。当我试图添加到books表时,我得到一个错误,我无法添加或更新我期望的子行。我希望可以创建一个触发器,在添加到books表之前将publisher名称添加到publisher表中

这是我第一次使用触发器,我不确定我做错了什么,也找不到一个例子

create table publishers
    (name varchar(25) not null, 
    address varchar(55), 
    phone varchar(12),
    PRIMARY KEY(name)
    ) ENGINE = INNODB;

create table books
    (book_id int(4) not null auto_increment, 
    title varchar(40), 
    publisher_name varchar(25),
    primary key (book_id),
    foreign key (publisher_name) references publishers(name) ON UPDATE CASCADE ON DELETE CASCADE 
    ) ENGINE=INNODB;
我试图创造的触发器:

DELIMITER ///
CREATE TRIGGER add_publisher BEFORE insert ON books
    FOR EACH ROW
    BEGIN
    INSERT INTO publishers(name) values (books.pubisher_name);
END;
///

DELIMITER ;

替换新的.publisher\u name的图书.publisher\u name

    DELIMITER ///
    CREATE TRIGGER add_publisher BEFORE insert ON books
        FOR EACH ROW
        BEGIN
        INSERT INTO publishers(name) values (NEW.publisher_name);
    END;
    ///
DELIMITER ;

存储过程是一个更好的选择,我想…问题,你的mysql版本是什么?@Blag我相信我使用的是5.1。试试Jiri给你的,如果仍然失败,那么你可能是在5.7上修补了一个关于在触发器之前检查约束的bug(但此修补程序可能仅适用于
notnull
Constraint,我不知道是否适用于FK…)谢谢。我以为我已经尝试过了。我一定是拼写错了什么。