赞
踩
什么是事务?
一个事务是一个完整得业务逻辑单元,不可再分。
比如:银行账户转账,从A账户向B账户转账10000.需要执行两条update语句
update t_act set balance = balance - 10000 where actno = ‘act001’
update t_act set balance = balance - 10000 where actno = ‘act001’
以上两条DML语句必须同时成功,或者同时失败,不允许出现一条成功,一条失败。
要保证以上两条DML语句得同时成功和失败,就需要使用数据库得事务机制。
和事务相关得语句只有:DML语句。(insert,delete,update)为什么?
因为他们这三个语句都是和数据库表当中得数据相关的。事物的存在是为了保证数据得完整性,安全性。
事务包括四大特性:ACID
事务隔离性隔离级别,理论上隔离级别包括4个:
Oracle数据库默认的隔离级别是读已提交
MySQL数据库默认的隔离级是可重复读
MySQL事务默认是自动提交的(自动提交就是执行任意一条DML语句则提交一次),关闭方法:start transaction;
创建一张表
create table t_user(id int primary key auto_increment,username varchar(255));
可以看出,向数据库插入一条数据,即使回滚,但是还是可以查到数据,这说明MySQL中的事务是支持自动提交的,只要执行一条sql就提交一次。
使用start transaction; 关闭自动提交机制,插入两条数据,然后回滚,再次查询没有刚才插入的数据,说明自动提交机制关闭成功。
可见,comit提交后,rollback没用,插入的数据还是能查出来。
设置读未提交的隔离级别
set global transaction isolation level read uncommitted;
查看当前隔离级别
select @@global.transaction_isolation,@@transaction_isolation;
MySQL8中隔离级别的变量跟之前的版本不一样,之前是tx_isolation,MySQL8改成了transaction_isolation。
设置读已提交的隔离级别
set global transaction isolation level read committed;
查看当前隔离级别
select @@global.transaction_isolation,@@transaction_isolation;
可以看出,插入但没有提交,是读不出来的,提交之后才能读出来。
设置可重复读的隔离级别
set global transaction isolation level repeatable read;
查看当前隔离级别
select @@global.transaction_isolation,@@transaction_isolation;
可见,无论是删除还是添加,commit后都是成功的,但是另一边却还是读出原来的数据,这就是可重复读,读取的是备份数据不是真正的数据。
set global transaction isolation level serializable;
查看当前隔离级别
select @@global.transaction_isolation,@@transaction_isolation;
温馨提示:每次设置好隔离级别后,可以退出再重新进。
最后谢谢大家的阅读,觉得学的不错的话可以点赞关注和收藏哦!你们的支持是我写作最大的动力~~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。