如何实现数据库的ACID属性- A-原子性,C-一致性,I-隔离性,D-持久性。正在使用的数据库系统- MySql。
发布于 2010-11-24 17:35:52
好吧,ACID不是您可以实现的模型,而是数据库服务器必须遵守的一组规则,以便能够以安全的方式处理事务。
MySQL在设计上不是符合ACID的数据库服务器,但是如果您对表使用InnoDB存储引擎(或者更好地将default-storage-engine选项设置为InnoDB作为数据库服务器的默认存储引擎(请参见default-storage-engine option)),您将能够在数据库上执行事务安全操作。
我建议您将InnoDB设置为默认存储引擎,因为不要在单个事务(例如InnoDB和MyISAM表)中混合对具有不同存储引擎的表的操作,这一点很重要。否则,您可能会损坏数据,因为如果回滚事务,您将无法回滚所有操作。
也就是说,如何确保您的操作是符合ACID的?只需在transactions中执行分组操作,即可从数据的一个一致状态转到另一个,如果一切顺利,则在结束时提交;如果出现问题,则进行回滚。要实现这一点,您需要通过发出START TRANSACTION语句来告知数据库服务器您的事务何时开始,以及您的事务何时以COMMIT或ROLLBACK语句结束。
通常,最好在脚本开始时使用SET AUTOCOMMIT=0命令禁用自动提交模式,尽管这不是强制性的,因为START TRANSACTION命令实际上禁用了自动提交模式。
还要记住,一些语句发出一个隐式的COMMIT命令(基本上所有的DDL语句,以及其他一些语句,请参阅Statements That Cause an Implicit Commit)。
您可能还有兴趣了解与标准Transactions and Atomic Operations在处理MySQL Transactions and Atomic Operations事务方面的不同之处。
发布于 2010-11-24 16:49:57
在MySQL中使用innoDB-engine,创建包含外键的适当数据库模式,使用事务进行相关查询,使用服务器级硬件并让数据库完成其工作。
http://en.wikipedia.org/wiki/ACID
发布于 2010-11-24 16:51:29
如果我没理解错的话,这不是你的任务。这是甲骨文开发人员( MySql )的任务。如果数据库服务器支持ACID,则可以通过选择正确隔离级别并使用事务(影响或显式)来使用它。
https://stackoverflow.com/questions/4264849
复制相似问题