Mysql数据库中什么是ACID - 面试宝典

举报
皮牙子抓饭 发表于 2023/07/29 14:54:54 2023/07/29
786 1 1
【摘要】 ​Mysql数据库中的"ACID"是指数据库事务的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。这些特性确保了在并发环境下,数据库操作的正确性和可靠性。 示例代码如下: 首先,创建一个测试表​​accounts​​:sqlCopy codeCREATE TABLE `accounts` ( `id` ...

Mysql数据库中的"ACID"是指数据库事务的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。这些特性确保了在并发环境下,数据库操作的正确性和可靠性。 示例代码如下: 首先,创建一个测试表​​accounts​​:

sqlCopy codeCREATE TABLE `accounts` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `balance` decimal(10,2) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

然后,向测试表中插入一些数据:

sqlCopy codeINSERT INTO `accounts` (`name`, `balance`) VALUES
('Tom', 1000.00),
('Jerry', 2000.00);

接下来,我们进行一个转账操作的事务:

sqlCopy codeSTART TRANSACTION;
-- 查询Tom的余额
SELECT `balance` INTO @balance FROM `accounts` WHERE `name` = 'Tom';
-- 查询Jerry的余额
SELECT `balance` INTO @balance_jerry FROM `accounts` WHERE `name` = 'Jerry';
-- Tom转账给Jerry
UPDATE `accounts` SET `balance` = @balance - 500 WHERE `name` = 'Tom';
UPDATE `accounts` SET `balance` = @balance_jerry + 500 WHERE `name` = 'Jerry';
COMMIT;

在这个事务中,我们首先查询Tom和Jerry的余额,然后将Tom的余额减去500,将Jerry的余额加上500,完成转账操作。事务的ACID特性保证了这个转账操作的正确性和可靠性,即使在并发环境下,也能够保证数据的一致性。 ACID特性的具体含义如下:

  • 原子性(Atomicity):事务是一个原子操作,要么全部执行成功,要么全部不执行。在示例代码中,事务要么将Tom的余额减去500并将Jerry的余额加上500,要么不执行任何操作。
  • 一致性(Consistency):事务执行前后,数据库的状态保持一致。在示例代码中,转账前后,Tom和Jerry的余额总和不变。
  • 隔离性(Isolation):并发执行的事务之间互不影响,每个事务都感觉不到其他事务的存在。在示例代码中,即使有其他事务同时进行转账操作,也不会影响到当前事务的执行。
  • 持久性(Durability):事务一旦提交,对数据库的修改是永久性的,即使发生系统故障也不会丢失。在示例代码中,一旦事务提交,Tom和Jerry的余额的变化将永久保存在数据库中。 通过保证ACID特性,Mysql数据库能够提供可靠的数据存储和操作,确保数据的一致性和完整性。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(1

抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。