我正在做一个项目,该项目将在网站上收集许多流量,因此当用户创建帖子时,插入的帖子的ID应该可以立即插入到另一个表中。
我的问题是,当网站上有太多流量时,插入一个新的帖子冲突的方式是,如果用户 1 首先插入帖子并且在慢速网络上,几乎同时但在用户 1 之后,用户 2 插入帖子并在更快的网络上?发生这种情况后,user2 的帖子将是最后一个插入的帖子,user1 可以将用户 2 的帖子 ID 作为上次插入的帖子 ID 进行查询。
我不知道最好的解释方式,但我希望有人能理解并帮助我。
<?php
$sql = $db_connect->prepare("insert into post(userid,postnum,posttext)values(?,?,?)");
$sql->bind_param("sss",$id,$postnum,$post);
$sql->execute();
$post_id = $sql->insert_id;
?>
使用自动增量字段作为您的 Id,而不是自己生成。无论并发请求的数量如何,Db 都会注意使其唯一。
我认为它是按照到达服务器的完整请求的顺序。然后MySQL将相应地对请求进行排队。
如果请求的时间完全相同(巧合),则在这种情况下无法保证插入顺序。
您可以在表格中使用自动加密 ID。插入后,您可以获取最后一个mysql_inserted_id以供参考。
<?php
$sql = $db_connect->prepare("insert into post(userid,postnum,posttext)values(?,?,?)");
$sql->bind_param("sss",$id,$postnum,$post);
$sql->execute();
$post_id = $db_connect->lastInsertId();
?>
您可能想查看与 MySQL 的并发插入和 https://dev.mysql.com/doc/refman/5.7/en/concurrent-inserts.html