这可能不是现实世界的问题,但更像是一个学习主题。
使用 PHP、MySQL 和 PDO,我对 auto_increment 和 lastInsertId() 了如指掌。考虑到主键没有 auto_incerment 属性,我们必须使用类似SELECT MAX(id) FROM table
的东西来检索最后一个 id,手动递增它,然后INSERT INTO table (id) VALUES (:lastIdPlusOne)
. 将整个代码包装在beginTransaction
and中commit
。
这种方法安全吗?如果用户 A 和 B 同时加载这个脚本,最后会发生什么?两个交易都会失败?或者两者都会成功(例如,如果最后一个 id 是 10,A 将插入 11,B 将插入 12)?
请注意,由于我是一名 PHP 和 MySQL 开发人员,因此我对这种情况下的 MySQL 行为更感兴趣。