MySql事务及隔离级别
时间:2022-03-14 02:31
在数据库中,所谓事务是指作为单个逻辑工作单元执行的一系列操作。
事务的操作: 先定义开始一个事务,然后对数据作修改操作, 这时如果提交(COMMIT),这些修改就永久地保存下来 如果回退(ROLLBACK),数据库管理系统将放弃您所作的所有修改而回到开始事务时的状态。 在JDBC中,事务默认是自动提交的,每次执行一个 SQL 语句时,如果执行成功,就会向数据库自动提交,而不能回滚 为了让多个 SQL 语句作为一个事务执行: •调用 Connection 对象的 setAutoCommit(false); 以取消自动提交事务 •在所有的 SQL 语句都成功执行后,调用 commit(); 方法提交事务 •在出现异常时,调用 rollback(); 方法回滚事务
命令行实现事务处理
1 查看提交模式 select @@autocommit 2、用begin,rollback,commit来实现 begin //开始一个事务 rollback //事务回滚 commit //提交事务 3、 直接用set来改变mysql的自动提交模式 MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行
set autocommit
=0 禁止自动提交
set autocommit
=1 开启自动提交, 来实现事务的处理。
*
当你用 set
autocommit
=0 的时候,你以后所有的SQL都将做为事务处理,直到你用commit确认或rollback结束。
* 注意:当你结束这个事务的同时也开启了个新的事务
事务隔离级别(transaction isolation levels):隔离级别就是对事务并发控制的四个等级。分为
1 串行化(SERIALIZABLE)
2 可重复读(REPEATABLE READ)
3 读已提交(READ COMMITED)
4 读未提交(READ UNCOMMITED)
1、mysql默认的隔离级别为Repeatable_Read
2、sqlserver 默认的隔离级别为Read Commited
3、oracle数据库支持READ COMMITTED和SERIALIZABLE两种事务隔离性级别,不支持READ UNCOMMITTED和REPEATABLE READ这两种隔离性级别,Oracle数据库默认使用的事务隔离性级别却是READ COMMITTED.
设置当前mysql.exe的隔离级别
隔离级需要使用SET 命令来设定其语法如下:
SET TRANSACTION ISOLATION LEVEL 隔离级别
隔离级别
分为四种:
READ UNCOMMITTED
| READ COMMITTED
| REPEATABLE READ
| SERIALIZABLE
select @@tx_isolation
设置数据库系统的全局的隔离级别 隔离级需要使用SET 命令来设定其语法如下:
SET global TRANSACTION
ISOLATION LEVEL 隔离级别
对于同时运行的多个事务,当这些事务访问数据库相同的数据时,如果没有采取必要的隔离机制,就会产生并发问题.
脏读:一个事务读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的。
不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同。换句话说就是,后续读取可以读到另一事务已提交的更新数据。
可重复读:在同一事务中多次读取数据时,能够保证所读数据一样,也就是,后续读取不能读到另一事务已提交的更新数据。
幻读:一个事务读取了几行记录后,另一个事务插入一些记录,幻读就发生了。再后来的查询中,第一个事务就会发现有些原来没有的记录。