《SQL基础》09. 事务
阿里云国际版折扣https://www.yundadi.com |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
SQL - 事务
事务
简介
事务是一组操作的集合它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求即这些操作要么同时成功要么同时失败。
默认MySQL的事务是自动提交的也就是说当执行完一条DML语句时MySQL会立即隐式的提交事务。
操作
方式一
查看事务提交方式
SELECT @@autocommit;
设置事务提交方式
SET @@autocommit = 0;
提交事务
COMMIT;
** 回滚事务**
ROLLBACK;
注
上述的这种方式是修改了事务的自动提交行为把默认的自动提交修改为了手动提交此时执行的DML语句都不会提交需要手动的执行commit进行提交。
方式二
开启事务
START TRANSACTION;
或
BEGIN;
提交事务
COMMIT;
回滚事务
ROLLBACK;
示例
DROP TABLE IF EXISTS account;
CREATE TABLE account(
id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID',
name VARCHAR(10) COMMENT '姓名',
money DOUBLE(10, 2) COMMENT '余额'
)COMMENT '账户表';
INSERT INTO account(name, money) VALUES ('张三', 2000), ('李四', 2000);
/*
转账案例
*/
# 开启事务
START TRANSACTION;
# 1. 查询张三余额
SELECT * FROM account WHERE name = '张三';
# 2. 张三的余额减少1000
UPDATE account SET money = money - 1000 WHERE name = '张三';
# 3. 李四的余额增加1000
UPDATE account SET money = money + 1000 WHERE name = '李四';
# 如果正常执行完毕, 则提交事务
COMMIT;
# 如果执行过程中报错, 则回滚事务
ROLLBACK;
四大特性ACID
- 原子性Atomicity事务是不可分割的最小操作单元要么全部成功要么全部失败。
- 一致性Consistency事务完成时必须使所有的数据都保持一致状态。
- 隔离性Isolation数据库系统提供的隔离机制保证事务在不受外部并发操作影响的独立环境下运行。
- 持久性Durability事务一旦提交或回滚它对数据库中的数据的改变就是永久的。
并发事务问题
- 赃读一个事务读到另外一个事务还没有提交的数据。
- 不可重复读一个事务先后读取同一条记录但两次读取的数据不同称之为不可重复读。
- 幻读一个事务按照条件查询数据时没有对应的数据行但是在插入数据时又发现这行数据已经存在好像出现了 “幻影”。
事务隔离级别
为了解决并发事务所引发的问题在数据库中引入了事务隔离级别。主要有以下几种
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
READ UNCOMMITTED | 有 | 有 | 有 |
READ COMMITTED | 无 | 有 | 有 |
REPEATABLE READ | 无 | 无 | 有 |
SERIALIZABLE | 无 | 无 | 无 |
查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;
设置全局事务隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL 隔离级别;
设置当前操作事务隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL 隔离级别;
事务隔离级别越高数据越安全但是性能越低。