如何为数据库实现ACID模型

时间:2010-11-24 08:45:14

标签: mysql database

如何实现数据库的ACID属性 - 原子性 - 一致性 - 隔离,D-耐久性。 正在使用的数据库系统 - MySql。

3 个答案:

答案 0 :(得分:18)

ACID不是您可以实现的模型,而是数据库服务器必须符合的一组规则,以便能够以安全的方式处理事务。

MySQL不是符合ACID标准的数据库服务器,但是如果您使用 InnoDB 存储引擎作为您的表(或者更好地作为您的数据库服务器默认存储引擎,则设置default-storage-engine InnoDB选项(参见default-storage-engine option)),您将能够对数据库执行事务安全操作。

我建议您将InnoDB设置为默认存储引擎,因为不要在单个事务中对不同存储引擎的表混合操作(例如InnoDB和MyISAM表)非常重要。否则,您可能会损坏您的数据,因为如果您回滚事务,将无法回滚所有操作。

那就是说,您如何确保您的运营符合ACID标准?好吧,只需通过将事务内的操作分组,将从一个一致的数据状态转移到另一个,如果一切顺利,最后提交,或者如果出现问题则回滚。要实现此目的,您需要通过发出START TRANSACTION语句,以及当您的交易以COMMITROLLBACK语句结束时告诉数据库服务器您的交易开始。

通常使用SET AUTOCOMMIT=0命令在脚本开头禁用自动提交模式是一种很好的做法,尽管它不是必需的,因为START TRANSACTION命令实际上禁用了自动提交模式。

另请注意,某些语句会发出隐式COMMIT命令(基本上所有DDL语句,其他一些语句,请参阅Statements That Cause an Implicit Commit)。

您可能也有兴趣阅读有关MySQL Transactions and Atomic Operations中事务处理的标准SQL的差异。

答案 1 :(得分:3)

在MySQL中使用innoDB引擎,创建包含外键的正确数据库模式,使用事务进行相关查询,使用servergrade硬件并让数据库完成它的工作。

http://en.wikipedia.org/wiki/ACID

答案 2 :(得分:-1)

如果我理解你,那不是你的任务。这是MySql开发人员(Oracle)的任务。 如果数据库服务器支持ACID,您可以通过选择正确的隔离级别并使用事务(impicit或explicit)来使用它。