事务就是要保证一组数据库操作,要么全部成功,要么全部失败。
在MySQL中,事 务支持是在引擎层实现的。你现在知道,MySQL是一个支持多引擎的系统,但并不是所有的引 擎都支持事务。比如MySQL原生的MyISAM引擎就不支持事务,这也是MyISAM被InnoDB取代 的重要原因之一
启动事务:begin或者start transaction
提交:commit
回滚:rollback
有些客户端连接框架会默认连接成功后先执行一个set autocommit=0的命令。这就导致接下来的 查询都在事务中。
set autocommit=0
,这个命令会将这个线程的自动提交关掉。意味着如果你只执行一个 select语句,这个事务就启动了,而且并不会自动提交。这个事务持续存在直到你主动执行 commit 或 rollback 语句,或者断开连接
因此,我会建议你总是使用set autocommit=1
, 通过显式语句的方式来启动事务
查看事务提交方式(1:表示自动提交,0:表示手动提交)
select @@AUTOCOMMIT;
修改事务的提交方式
select @@AUTOCOMMIT = 数字;
数据库查询隔离级别
select @@tx_isolation;
设置数据库隔离级别(需要重新连接才可以查看修改之后的数据)
set global transaction isolation level 级别字符串;
set session transaction isolation level 级别字符串;(改变当前会话)
序号 | 隔离级别 | 名称 | 脏读 | 不可重复读 | 幻读 | 数据库默认隔离级别 |
---|---|---|---|---|---|---|
1 | READ UNCOMMITTED | 读未提交 | YES | YES | YES | |
2 | READ COMMITTED | 读已提交 | NO | YES | YES | Oracle 数据库默认级别 |
3 | REPEATABLE READ | 可重复读 | NO | NO | YES | MySQL 数据库默认级别 |
4 | SERIALIZABLE | 串行化 | NO | NO | NO |
create database test;
use test;
create table user(age int) engine=InnoDB;
insert into user(age) values(1);
修改隔离级别:
set global transaction isolation level read uncommitted;
查看隔离级别:(这里需要断开连接后,重新连接生效)
mysql> select @@tx_isolation;
+------------------+
| @@tx_isolation |
+------------------+
| READ-UNCOMMITTED |
+------------------+
读未提交是指,一个事务还没提交时,它做的变更就能被别的事务看到
修改隔离级别:
set global transaction isolation level read committed;
读已提交是指,一个事务提交之后,它做的变更才会被其他事务看到
修改隔离级别
set global transaction isolation level repeatable read;
可重复读是指,一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一 致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。
修改隔离级别
set global transaction isolation level serializable;
串行化,顾名思义是对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突 的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_43296313/article/details/123380115
内容来源于网络,如有侵权,请联系作者删除!