mysql - 插入子表时触发将值插入父表

标签 mysql triggers mysql-error-1452

我有两个表,结构如下。当我尝试添加到 books 表时出现错误,我无法添加或更新我期望的子行。我希望在添加到 books 表之前,可以创建一个触发器来将出版商名称添加到 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 ;

最佳答案

books.publisher_name 替换为 NEW.publisher_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 - 插入子表时触发将值插入父表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47462656/

相关文章:

mysql - Azure Database for MySQL 的客户端证书和 key

php - MySQL PDO 如何为 IN() 绑定(bind)参数

mysql - 从我的 PhpMyadmin SQL 选项卡运行以下查询

MySQL 工作台错误 1452

mysql - 错误 1452 MySQL Load Infile(但正确的数据)

mysql - 我疯狂地试图解决错误,但我做不到。用mysql。执行 INSERT INTO 时出现外键错误。

mysql - 在 created_at 列的日期范围内跟踪外键的唯一性

mysql - MySQL 和其他数据库中的动态 ORM?

sqlite - 在sqlite不同数据库中触发

mysql - 在 MYSQL 的 INSERT 期间创建触发器显示错误