MySQL有可能意外地抵消自动增量

时间:2015-05-05 23:39:52

标签: php mysql auto-increment

如果同时插入两个mysql表,是否有可能同时插入另一个用户使表偏移?

例如假设:(在php中)

$conn = new mysqli($servername, $username, $password, $dbname);

$sql = "INSERT INTO Name (user_id, name, email)
VALUES (DEFAULT, 'User name', 'john@example.com')";

if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}
$sql = "INSERT INTO Location (user_id, addressline1, addressline1, postcode)
VALUES (DEFAULT, '123 street', 'anytown, country', '123456')";

if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();

如果&#39; John&#39;和Bob&#39; Bob&#39;同时进行此操作。约翰的Name是否有可能被赋予自动增量ID为1而他的Location被赋予2,因为鲍勃的Location被赋予了1即使他的Name被给予了2。

有点难以解释。

  • 我想知道,如果不是数千人,千万人是否正在使用此功能 会发生吗?
  • 是否有一些原因可以阻止MySQL 发生了什么?
  • 如果没有,可以采取什么措施来阻止它呢?

1 个答案:

答案 0 :(得分:2)

在你的场景中,考虑到你发布的代码,你担心的事情是可能的,并且肯定会在你获得越来越多的用户时发生。

使用mysqli的insert_id将为您解决此问题。出于这个原因,上次成功插入查询中的自动增量id存储在此处。将您的第二个SQL查询更改为此。

$sql = "INSERT INTO Location (user_id, addressline1, addressline1, postcode)
VALUES ({$conn->insert_id}, '123 street', 'anytown, country', '123456')";

它不再是问题。