不,你不能在一个MySQL命令中插入多个表。但您可以使用事务。
BEGIN;
INSERT INTO users (username, password)
VALUES('test', 'test');
INSERT INTO profiles (userid, bio, homepage)
VALUES(LAST_INSERT_ID(),'Hello world!', 'http://www.stackoverflow.com');
COMMIT;
编辑:你说“所有这一次试图找出来,它仍然不工作。我不能简单地把刚生成的ID在一个$ var,把所有的MySQL命令$ var。
让我详细说明:这里有3种可能的方法:
>在上面的代码中。这个
这一切都在MySQL,和
LAST_INSERT_ID()在第二个
语句将自动为
autoincrement-column的值
插入在第一个
声明。
不幸的是,当第二个语句本身在具有自动增长列的表中插入行时,LAST_INSERT_ID()将被更新为表2,而不是表1.如果您之后还需要表1,以将其存储在变量中。这导致我们的方式2和3:
>将库存LAST_INSERT_ID()
一个MySQL变量:
INSERT ...
SELECT LAST_INSERT_ID() INTO @mysql_variable_here;
INSERT INTO table2 (@mysql_variable_here, ...);
INSERT INTO table3 (@mysql_variable_here, ...);
>将LAST_INSERT_ID()存储在a
php变量(或任何语言
可以连接到您的数据库
选择):
>插入…
>使用您的语言来检索LAST_INSERT_ID(),通过在MySQL中执行该文字语句,或使用例如php的mysql_insert_id()
> INSERT [use your php variable here]
警告
无论如何解决这个你选择,你必须决定应该发生什么,如果执行在查询之间中断(例如,你的数据库服务器崩溃)。如果你可以生活在“一些已经完成,其他人不”,不要阅读。
然而,如果你决定“或者所有的查询完成,或者没有完成 – 我不想在某些表中的行,但在其他的没有匹配的行,我总是希望我的数据库表是一致的”,你需要包装所有语句在事务中。这就是为什么我在这里使用BEGIN和COMMIT。
如果您需要更多信息,请再次注释:)