我正在尝试编写一个将行插入两个表tableA和tableB的查询。 tableA是可以发送到使用的电子邮件列表,而tableB包含我们支持的各种语言的所述电子邮件的实际文本。 tableA中的自动增量ID存储在tableB中,用于将电子邮件名称与文本连接。
从插入tableA的新行中获取id然后在插入tableB的查询中使用的最佳方法是什么?我试过这个,但mySQL不喜欢它(错误1064):
INSERT INTO tableA (eID, name, otherStuff) VALUES (NULL, 'emailName', 'otherValues');
INSERT INTO tableB (id, emailId, body, name, langId) VALUES (NULL, select max(tableA.eID) from tableA, 'email text', 'Default', '1');
INSERT INTO tableB (id, emailId, body, name, langId) VALUES (NULL, select max(tableA.eID) from tableA, 'other language text', 'Default', '2');
有关如何使这项工作的任何想法?
感谢
答案 0 :(得分:3)
使用LAST_INSERT_ID()
。它返回给予新行的最后一个ID
(在当前连接处)。
http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id
答案 1 :(得分:1)
mysql函数LAST_INSERT_ID()将返回最后插入行的id。
所以你可以试试
INSERT INTO tableA (eID, name, otherStuff) VALUES (NULL, 'emailName', 'otherValues');
SET @tableA_id = LAST_INSERT_ID();
INSERT INTO tableB (id, emailId, body, name, langId) VALUES (NULL, @tableA_id, 'email text', 'Default', '1');
INSERT INTO tableB (id, emailId, body, name, langId) VALUES (NULL, @tableA_id, 'other language text', 'Default', '2');
答案 2 :(得分:0)
也许LAST_INSERT_ID()可行吗?
尝试以下形式:
insert INTO tableB(...)
SELECT LAST_INSERT_ID(), 'literals' from TableA