从 MySQL 开始:
http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id
生成的 ID 保存在服务器上的
每个连接的基础。这意味着返回的值
给定客户端的函数是生成的第一个 AUTO_INCREMENT 值
对于影响 AUTO_INCREMENT 列的最新语句
客户。此值不会受到其他客户端的影响,即使它们
生成自己的 AUTO_INCREMENT 值。这种行为确保
每个客户端都可以检索自己的 ID 而无需担心
其他客户端的活动,并且不需要锁或
交易。
让我们进行一些测试:
<?php
header('Content-Type: text/plain');
$con1 = new mysqli('localhost', 'root', '1', 'new_schema');
$con2 = new mysqli('localhost', 'root', '1', 'new_schema');
$sql = 'DROP TABLE IF EXISTS `x`';
$con1->query($sql);
$sql = <<<SQL
CREATE TABLE `x`(
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`value` VARCHAR(20)
)ENGINE=InnoDB;
SQL;
$con1->query($sql);
$sql = <<<SQL
INSERT INTO `x` (`id`, `value`)
VALUES (NULL, NULL);
SQL;
$con1->query($sql);
$con2->query($sql);
echo 'con1 == con2 is ', $con1 == $con2 ? 'true' : 'false', PHP_EOL;
echo 'con1 === con2 is ', $con1 === $con2 ? 'true' : 'false', PHP_EOL;
echo '1: ', $con1->insert_id, PHP_EOL;
echo '2: ', $con2->insert_id, PHP_EOL;
$con1->close();
$con2->close();
?>
演出:
con1 == con2 is true
con1 === con2 is false
1: 1
2: 2
测试科目:
PHP 5.4.5, MySQL 5.6.10.