MYSQL-事务知识点
程序员文章站
2022-07-15 10:02:54
...
事务是什么
事务是一个完整的业务逻辑单元,不可再分。
例如:银行转账,A–>B转账10000,需要执行两条update语句。
UPDATE t_act SET balance = balance - 10000 WHERE actno = 'act-001'
UPDATE t_act SET balance = balance + 10000 WHERE actno = 'act-002'
以上的DML语句必须同时成功,或者同时失败,不允许单条成功或者单条失败。
为了保证以上语句同时成功或者同时失败,就需要使用数据库的事务机制。
与事务相关的只有DML语句(insert delete update)
这三个语句都会直接操作数据库表中的“数据”.
事务的存在是未了保证数据的完整性、安全性。
如果单条DML可以完成业务,不需要事务机制。
但是显示业务中,通常有多步操作完成,所以需要事务。
事务的特性
A:原子性:事务是最小的工作单元,不可再分。
C:一致性:事务必须保证多条DML语句同时成功或者同时失败。
I:隔离性:事务A与事务B之间具有隔离。
D:持久性:最终数据必须持久化到硬盘文件中,事务才算成功。
关于事务之间的隔离性
事务隔离性存在隔离级别:4层
- 读未提交(read uncommitted)
对方事务还没有提交,我们当前事务可以读取到对方未提交的数据。
读未提交存在脏读(Dirty Read)现象:表示读到了脏的数据。 - 读已提交数据(read committed)
对方事务提交之后的数据我方可以读取到。
读以提交存在的问题是:不可重复读。 - 可重复读(repeatable read)
这种隔离级别解决了:不可重复读问题。
这种隔离级别存在的问题是:读取到的数据是幻象 - 序列化读/串行化读
解决了所有问题。
效率低需要事务排队。
演示事务
Mysql事务默认情况下是自动提交。
只要执行任意一条DML语句则提交一次。
关闭自动提交start transaction;
DROP TABLE IF EXISTS t_user;
CREATE TABLE t_user(
id int PRIMARY KEY auto_increment,
username VARCHAR(255)
);
INSERT INTO t_user(username) values ("zhangsan");
-- 事务开始
start transaction;
-- 回滚 (回滚到事务开始前)
rollback;
-- 提交 (该事务完成)
commit;
演示
-- 查看事务隔离级别
mysql> SELECT @@global.tx_isolation;
+-----------------------+
| @@global.tx_isolation |
+-----------------------+
| REPEATABLE-READ |
+-----------------------+
1 row in set (0.00 sec)
-- 设置成read uncommitted
set global transaction isolation level read uncommitted;
上一篇: C语言涉猎笔记(一)
下一篇: C语言笔记----指针(一)