MySQL 自动增量是否有可能意外偏移
MySQL is there a chance of accidental offset of automatic 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();
如果 'John' 运行 这与 'Bob' 同时进行,是否有可能为约翰的 Name
提供自动递增 ID 1 和他的 Location
被赋予 2,因为 Bob 的 Location
被赋予了 1,尽管他的 Name
被赋予了 2.
有点难以解释。
- 我想知道是否有 1000 人(如果不是数百万人)运行
它会发生吗?
- 有什么原因 MySQL 会阻止它吗
发生了什么?
- 如果不是什么can/can可以采取什么措施来防止它?
在您的场景中,鉴于您发布的代码,您担心的事情是可能的,并且随着您获得越来越多的用户肯定会发生。
使用我的sql我的 insert_id 将为您解决这个问题。正是出于这个原因,最后一次成功插入查询的自动增量 ID 存储在这里。将您的第二个 sql 查询更改为此。
$sql = "INSERT INTO Location (user_id, addressline1, addressline1, postcode)
VALUES ({$conn->insert_id}, '123 street', 'anytown, country', '123456')";
这不再是问题。
如果同时插入到两个 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();
如果 'John' 运行 这与 'Bob' 同时进行,是否有可能为约翰的 Name
提供自动递增 ID 1 和他的 Location
被赋予 2,因为 Bob 的 Location
被赋予了 1,尽管他的 Name
被赋予了 2.
有点难以解释。
- 我想知道是否有 1000 人(如果不是数百万人)运行 它会发生吗?
- 有什么原因 MySQL 会阻止它吗 发生了什么?
- 如果不是什么can/can可以采取什么措施来防止它?
在您的场景中,鉴于您发布的代码,您担心的事情是可能的,并且随着您获得越来越多的用户肯定会发生。
使用我的sql我的 insert_id 将为您解决这个问题。正是出于这个原因,最后一次成功插入查询的自动增量 ID 存储在这里。将您的第二个 sql 查询更改为此。
$sql = "INSERT INTO Location (user_id, addressline1, addressline1, postcode)
VALUES ({$conn->insert_id}, '123 street', 'anytown, country', '123456')";
这不再是问题。