- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这可能不是现实世界的问题,而更像是一个学习主题。
使用 PHP、MySQL 和 PDO,我对 auto_increment 和 lastInsertId() 了如指掌。考虑到主键没有 auto_incerment 属性,我们必须使用类似 SELECT MAX(id) FROM table
的东西来检索最后一个 id,手动递增它,然后 INSERT INTO table (id ) 值 (:lastIdPlusOne)
。将整个代码包装在 beginTransaction
和 commit
中。
这种方法安全吗?如果用户 A 和 B 同时加载这个脚本最后会发生什么?两个交易都会失败?或者两者都会成功(例如,如果最后一个 ID 是 10,则 A 将插入 11,而 B 将插入 12)?
请注意,由于我是一名 PHP 和 MySQL 开发人员,因此我对这种情况下的 MySQL 行为更感兴趣。
最佳答案
如果两者都得到相同的最大值,那么先插入的那个会成功,其他的会失败。
为了在不使用 auto_increment 字段的情况下解决这个问题,您可以在插入之前使用触发器来完成工作(new.id=max),即相同的逻辑,但在触发器中,因此数据库服务器是控制它的人.
不确定在服务器发生故障的情况下这在主-主复制环境中是否 100% 安全。
关于mysql - 手动自增主键-交易和竞速条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17458834/
1、修改数据 复制代码代码如下: DataRow dr =
数据库操纵基本流程为: 1、连接数据库服务器 2、选择数据库 3、执行SQL语句 4、处理结果集 5、打印操作信息 其中用到的相关函数有 •resource m
CRUD是Create(创建)、Read(读取)、Update(更新)和Delete(删除)的缩写,它是普通应用程序的缩影。如果您掌握了某框架的CRUD编写,那么意味可以使用该框架创建普通应用程序了
项目结构: 添加页面: &
本文实例讲述了android操作sqlite数据库(增、删、改、查、分页等)及listview显示数据的方法。分享给大家供大家参考,具体如下: 由于刚接触android开发,故此想把学到的基础知识
我是一名优秀的程序员,十分优秀!