在 sp 中多次插入
Posted
技术标签:
【中文标题】在 sp 中多次插入【英文标题】:multiple Insert in sp 【发布时间】:2016-07-22 07:58:06 【问题描述】:我在 mysql 数据库中有这些表:
tBook (idBook,BookName)
tAuthor (idAuthor,AuthorName)
tBookAuthor (FK_Book,FK_Author)
我想在一个存储过程中插入一本新书。在相同的过程中,我想插入表 tBookAuthor。
INSERT INTO `tBook`
(`idBook`, `BookName`)
VALUES
(23, 'myBookName')
INSERT INTO `tBookAuthor`
(`FK_Book`, `FK_Author`)
VALUES
(LAST_INSERT_ID(), 526)
【问题讨论】:
您面临的具体问题是什么?您描述的 2 个插入语句应该在存储过程中工作。您可能不需要在idBook
字段中插入任何值,因为这可能是一个自动递增字段。
Using Mysql to do multiple INSERT on linked tables的可能重复
两个插入都应该工作。你面临什么问题?
我面临的问题是 php myadmin 不允许我执行此查询:DELIMITER // START TRANSACTION; INSERT INTO
tMedia` (Title
, Description
, ISBN
, InsertedIntoBibliothek
, CoverLink
,@,FK_Author
,FK_MediaType
)值(myDescription
,myISBN
,myInsertDate
,myAuthor
,myMediaType
)插入INTO tMediaAuthor
(FK_Media
, FK_Author
) 值 (LAST_INSERT_ID(), myAuthor
) 提交; //`
欢迎来到 Stack Overflow!我尽可能地编辑了你的问题。但是,添加代码和描述的解释,以便更多具有该主题知识的人看到它。请在您遇到的特定错误消息中进行编辑,以防有必要识别特定问题。祝你好运!
【参考方案1】:
问题是我试图修改一个已经存在的 storec 过程。 我是在 PHPmyAdmin 中完成的。
如果你想创建一个新的存储过程,你可以这样做:
DELIMITER //
CREATE PROCEDURE new_person(
first CHAR(35), last CHAR(35), email CHAR(255), tool_id INT)
BEGIN
START TRANSACTION;
INSERT INTO `tBook`
(`idBook`,
`BookName`)
VALUES
(23
'myBookName')
INSERT INTO `tBookAuthor`
(`FK_Book`,
`FK_Author`)
VALUES
(LAST_INSERT_ID(),
526)
COMMIT;
END//
DELIMITER;
如果你想在 phpmyadmin 中改变一个存储过程,你可以这样做:
BEGIN
START TRANSACTION;
INSERT INTO `tBook`
(`idBook`,
`BookName`)
VALUES
(23
'myBookName')
INSERT INTO `tBookAuthor`
(`FK_Book`,
`FK_Author`)
VALUES
(LAST_INSERT_ID(),
526)
COMMIT;
END
【讨论】:
【参考方案2】:不要使用存储过程,因为您使用的是 PHP,我建议进行 2 次插入,因为第二次插入是外键,您必须选择作者,获取书籍的最后插入 ID 并进行简单的插入那里。 麻烦少了很多。
我也很难理解你的 dB 结构,一本书可以由多个作者写吗?如果是这样,我的错,否则,省去助手表的麻烦,只需将作者 ID 放在书上。
【讨论】:
哦,神秘的选民,你能告诉我你不喜欢我的回答吗?我根据先前的知识和经验发布了这个答案,所以我想知道为什么这不是一个好主意。 是的,一本书可以由多个作者撰写。没错。 那么为什么不能/不想在 php 中进行 2 次插入呢?以上是关于在 sp 中多次插入的主要内容,如果未能解决你的问题,请参考以下文章