0

我只是想知道是否有可能一次将两个表插入数据库,例如,

$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')");

有什么建议么?

4

4 回答 4

1

如果您使用的是旧的mysql扩展(mysql_*函数),那么您不能在一个语句中发出多个查询。

从手册1

mysql_query() 向与指定链接标识符关联的服务器上当前活动的数据库发送一个唯一查询(不支持多个查询)。

如果您使用的是mysqlipdo mysql,那么您可以在一个查询中进行多次插入。

也可以使用扩展插入在一个查询中将多行插入到同一个表中,但不能使用两个不同的表。

于 2012-06-18T20:18:20.983 回答
1

你为什么要这样做?如果只是懒惰,请多花三十秒,并使用两个单独的语句。如果,OTOH,您想要这样做是因为您需要同时进行两次插入以保持数据库一致(例如同时更新“订单”表和“计费”表),您想要查看交易

基本上,一个事务(以BEGIN开头)是一堆捆绑在一起的查询,当你完成后,你可以COMMIT并使其粘住或ROLLBACK将它们丢弃(例如,如果有错误并且你想要中止进程)。它们并没有完全同时执行,但是在 COMMIT 上,它们要么全部成功,要么都不执行。

于 2012-06-18T20:27:21.680 回答
0

您可以使用begin来包含多个 SQL 语句:

$query = "BEGIN ";
$query .= "INSERT INTO table ('tableid')values('somevalue') INSERT INTO table1 ('table1id')values('somevalue') ";
$query .= "COMMIT";

然后运行$query

于 2012-06-18T20:13:41.280 回答
0

这取决于您的数据库是如何被查询的。我使用的许多第三方数据库抽象库每次执行只允许一个 SQL 语句。但是,正如您所建议的,MySQL可以接受由分号分隔的多个查询。

于 2012-06-18T20:14:22.860 回答