我只是想知道是否有可能同时在数据库中插入两个表,如
$query = sprintf("INSERT INTO table ('tableid')values('somevaleu'),INSET INTO table1 ('table1id')values('somevalue')");
或者我需要单独进行,例如,
$query1 = sprintf("INSERT INTO table ('tableid')values('somevaleu')");
$query2 = sprintf("INSET INTO table1 ('table1id')values('somevalue')");
有什么建议吗?
答案 0 :(得分:1)
如果您使用旧的mysql扩展程序(mysql_*
函数),则无法在一个语句中发出多个查询。
来自手册 1 :
mysql_query()发送一个唯一的查询(多个查询不是 支持)到服务器上当前活动的数据库 与指定的link_identifier相关联。
如果您使用mysqli或pdo mysql,则可以在一个查询中执行多次插入。
也可以使用扩展插入在一个查询中将多行插入相同的表,但不能在两个不同的表中插入。
答案 1 :(得分:1)
你为什么要这样做?如果它只是懒惰,请花费额外的30秒并使用两个单独的声明。如果,OTOH,你想这样做是因为你需要同时进行两次插入以保持数据库的一致性(例如同时更新“订单”表和“计费”表),你想要查看的交易强>
基本上,一个事务(以 BEGIN 开头)是一堆捆绑在一起的查询,当你完成后,你可以 COMMIT 并制作它们坚持或 ROLLBACK 将它们扔掉(例如,如果出现错误并且您想要中止该过程)。它们不是完全同时执行,但是在COMMIT上,它们要么全部成功,要么都不会通过。
答案 2 :(得分:0)
您可以使用begin
括起多个SQL语句:
$query = "BEGIN ";
$query .= "INSERT INTO table ('tableid')values('somevalue') INSERT INTO table1 ('table1id')values('somevalue') ";
$query .= "COMMIT";
然后运行$query
。
答案 3 :(得分:0)
这取决于您的数据库的查询方式。我使用的很多第三方数据库抽象库每次执行只允许一个SQL语句。但是,正如你所提议的,MySQL 可以接受由分号分隔的多个查询。