我尝试在insert同一查询中搜索多种表中信息的方式,但发现这是不可能的吗?所以我想要insert通过简单地使用多个查询即
insert
INSERT INTO users (username, password) VALUES('test', 'test') INSERT INTO profiles (userid, bio, homepage) VALUES('[id of the user here?]','Hello world!', 'http://www.stackoverflow.com')
但是,如何为表赋予id从users到“手动” 的自动增量?userid``profile
id
users
userid``profile
不,您不能在一个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;
看一下LAST_INSERT_ID()重用自动增量值。
LAST_INSERT_ID()
var放入所有MySQL命令中?_ ”
让我详细说明一下:这里有3种可能的方式:
不幸的是,当第二条语句本身在具有自动增量列的表中插入行时,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()php变量(或您选择的任何可以连接到数据库的语言)存储:
mysql_insert_id()
INSERT [use your php variable here]
无论选择哪种解决方案,都必须决定 在查询之间执行被中断 (例如,数据库服务器崩溃)时应该发生什么。如果您可以忍受“有些已经完成,有些还没有完成”,请不要继续阅读。
但是,如果您决定“要么所有查询都完成,要么都没有完成- 我不希望某些表中的行,但又不希望某些表中的行匹配,我总是希望我的数据库表是一致的”,则需要将所有语句包装在事务中。这就是为什么我在BEGIN和COMMIT那里使用。
BEGIN
COMMIT
如果您需要更多信息,请再次评论:)