mysql一次插入2个具有主键和外键的表

标签 mysql sql foreign-keys sql-insert

我有两张 table

图书表

  • ID(PK)
  • 标题
  • 作者
  • 类型
  • 国际标准书号
  • 价格
  • 出版商
  • 年份

图书奖项表

  • ID (FK) -- 引用 Books.ID
  • 奖项名称
  • 年份

bookAwards 的 ID 是 books 表中 ID 的外键。

如何将 books 表同时插入到 bookAwards 表中?

当我尝试插入书籍表时,出现外键导致的错误?

我想将值插入到 books 表中,然后将带有年份的奖项名称插入到 bookAwards 中?

任何帮助将不胜感激。

最佳答案

您可以对此使用STORED PROCEDURE,这样您只需从应用程序级别调用一次。例如,

DELIMITER $$
CREATE PROCEDURE InsertBook
(
    IN _Title INT,
    IN _AwardName VARCHAR(35),
    IN _Year INT
)
BEGIN
    INSERT INTO Books (Title)
    VALUES(_Title);

    -- since the ID is set as AUTO_INCREMENT
    -- there are two ways to do how you can get the ID 
    -- from the Books Table and insert it 
    -- on BookAwards

    -- FIRST WAY
    -- by using LAST_INSERT_ID()
    SET @last_ID = LAST_INSERT_ID();

    -- SECOND WAY
    -- by using MAX()
    -- SET @last_ID = (SELECT MAX(ID) FROM Books);


    INSERT INTO BookAwards(ID, AwardName, Year)
    VALUES (@last_ID, _AwardName, _Year);
END $$
DELIMITER ;

并且在应用程序级别或您想要调用此过程的任何源上,

CALL InsertBook('Lost Art', 'Best in Churva', 2013);

出于安全目的,您仍然可以参数化过程,例如

CALL InsertBook(?, ?, ?);

关于mysql一次插入2个具有主键和外键的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15725630/

相关文章:

mysql - 使用expressjs验证器和mysql检查用户名和电子邮件是否已经存在

MYSQL - WHERE 子句 - 在 IN 子句中连接列

mysql - 通常来说,公司 "A"使用 MySQL 作为数据库。它是指 MySQL 免费版还是 MySQL 企业版?

mysql - SQL附加其他表的行

php - 多个计数和求和 MySQL 函数在 MySQL 结果中使用多个联接返回错误值

sql - PostgreSQL、外键、插入速度和 Django

php - 图片上传/接收API

php - 组合来自不同表、具有不同字段名称的 2 个查询

python - Model.Form.save 后未获取外键值

sql-server - 事件源和 SQL Server 多个关系表