- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我如何为我的数据库实现 ACID 属性 -A-原子性,C-一致性,I-隔离性,D-持久性。正在使用的数据库系统 - MySql。
最佳答案
ACID 不是您可以实现的模型,而是数据库服务器必须遵守的一组规则,以便能够以安全的方式处理事务。
MySQL 在设计上不是一个符合 ACID 的数据库服务器,但是如果你为你的表使用 InnoDB 存储引擎(或者通过设置 default- 作为你的数据库服务器默认存储引擎更好)
选项(参见 default-storage-engine option )),您将能够对数据库执行事务安全操作。InnoDB
的存储引擎
我建议您将 InnoDB 设置为默认存储引擎,因为重要的是您不要在单个事务中混合对具有不同存储引擎的表的操作(例如 InnoDB 和 MyISAM 表)。否则,您可能会损坏数据,因为如果回滚事务,您将无法回滚所有操作。
也就是说,您如何确保您的操作符合 ACID 标准?好吧,只需在事务中对操作进行分组,即可从数据的一种一致状态变为另一种,如果一切顺利,则在最后提交,如果出现问题,则回滚。为此,您需要通过发出 START TRANSACTION
语句来告诉数据库服务器您的事务何时开始,以及您的事务何时以 COMMIT
或 ROLLBACK
声明。
在脚本开始时使用
SET AUTOCOMMIT=0
命令禁用自动提交模式通常是一个好习惯,尽管这不是强制性的,因为 START TRANSACTION
命令实际上禁用了自动提交模式。
另请记住,某些语句会发出隐式
COMMIT
命令(基本上是所有 DDL 语句,还有一些其他语句,请参阅 Statements That Cause an Implicit Commit)。
您可能还对阅读有关 MySQL 中事务处理与标准 SQL 的差异感兴趣 Transactions and Atomic Operations .
关于mysql - 如何为数据库实现 ACID 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4264849/
我是一名优秀的程序员,十分优秀!