0

似乎有两种方法,第一种是这样的:

$result = mysql_query("SHOW TABLE STATUS LIKE 'table_name'");
$row = mysql_fetch_array($result);
$nextId = $row['Auto_increment'];
mysql_free_result($result);

$sql = mysql_query("INSERT the information you want in the main table")

然后,您可以在所有相关表中插入 $nextid 作为外键。

另一种方法使用最后插入 id:

START TRANSACTION;
INSERT INTO files (file_id, url) VALUES (NULL, 'text.doc');
INSERT INTO grades (file_id, grade) VALUES (LAST_INSERT_ID(), 'some-grade');
COMMIT;

这两个线程都是安全的吗?IE,如果我有两个 php 脚本同时运行两个 mysql 线程,并且它们同时插入到主表中,相关联的表会收到正确的主 id 外键还是会发生混淆或冲突?

谢谢。

4

3 回答 3

1

使用第二个(或mysql_insert_id()),因为它是多用户安全的。仅出于一致性原因需要事务,而不是LAST_INSERT_ID(). 此外,您应该使用mysqli_*()而不是mysql_*()因为它是改进的数据库访问库。

于 2011-10-15T20:51:50.137 回答
0

最后一个更好,使用 INSERTED_ID!另一个选项也可以,但是如果您有更多人使用同一页面,则可能会出错。

虽然这不太可能。

于 2011-10-15T20:48:10.773 回答
0

我认为带有 last_insert_ID() 的触发器以确保在插入操作后立即触发代码是最好的方法,假设您希望在每次插入后发生这种情况。

于 2011-10-15T20:54:29.680 回答