我正在尝试将信息插入到数据库中的多个表中,我已设法使用它来使其工作:
$query = "INSERT INTO users (grp, email, college_id, tutor, year, password, register_date) VALUES ('$g', '$e', '$ci', '$tu', '$y', PASSWORD('$p'), NOW() )";
$query2 = "INSERT INTO unit_26 (college_id) VALUES ('$ci')";
$result = mysql_query ($query); // Run the Query Now woooo.
$result2 = mysql_query ($query2); // Run the Query Now woooo.
if ($result) { // If it Ran OK.
虽然它有效并且信息被添加到两个表中,但我只是想知道是否有人有更好的方法这样做,或者这种方式是错误的?
答案 0 :(得分:1)
由于这两个插入是独立执行的,另一个并发运行的程序可能会看到数据库处于完成第一次插入但第二次插入不完成的状态。
这是否是一个问题取决于应用程序逻辑。在您的情况下,没有其他信息很难说。可能不是。涉及两个帐户的金融交易就是这个 出现问题的一个例子:您不希望所有帐户余额的总和在任何时候都是错误的。
如果您认为需要此操作,则可以以性能为代价使操作成为原子:另一个程序将在第一次插入之前或第二次插入之后查看数据库。它的工作原理如下:
$result = FALSE;
if (mysql_query('BEGIN')) {
if (mysql_query($query1) &&
mysql_query($query2))
$result = mysql_query('COMMIT'); // both queries looked OK, save
else
mysql_query('ROLLBACK'); // problems with queries, no changes
}
存储引擎必须支持事务,即它必须是InnoDB。否则这将无声无效。
答案 1 :(得分:0)
SQL插入仅适用于单个表。您无法使用单个INSERT查询同时将数据插入到两个或多个表中。您可以通过使用事务强制单独的插入是原子的,但您仍然必须为每个表执行INSERT。
如果你能像
这样的话,可能会很好INSERT INTO t1.id, t2.val, t3.other VALUES ($t1id, $t2val, $t3other);
但是唉...