事务

事务是一组操作,这组操作可能有多步,要么全部执行成功要么,全部不成功。在操作开始前需要开启事务,事务结束后需要提交事务,如果事务执行中间抛出异常,则进行事务回滚。(就是全部回到未执行事务操作之前)

事务操作

方式一
mysql的事务提交方式是自动的
SELECT @@autocommit

查看当前事务的提交方式

java让sql事务提交 sqlyog如何提交事务_java


1----------------自动提交

0-----------------手动提交

set @@autocommit =0 手动设置使得自动提交变成手动提交

java让sql事务提交 sqlyog如何提交事务_数据_02


注意每次使用完sql语句后因为设置的是手动提交,所以你执行完sql语句不执行commit会出现,视图未发生变化的情况

commit

提交事务

事务中间出错可以不提交,直接执行回滚,再重新执行sql语句

执行回滚:

rollback

方式二
执行start就是需要你手动提交事务和回滚的
start transaction 开启事务
。。。。。执行事务操作
提交事务
回滚事务

事务的四大特性(ACID)

1.原子性:
事务是一组不可分割的最小操作单元
2.一致性
事务完成时,必须使所有的数据保持一致状态。
(转账操作中,俩人的总的钱数目是一定的,并不会因为我给你转了钱,银行少钱了。。。)
3.隔离性
若干个并发事务,A事务不影响B事务的操作
4.持久性
事务一旦提交或回滚,他对数据库的改变是持久的。(你事务操作后改变的数据将写入磁盘,永久保存)

并发事务问题

1.脏读

一个事务读取到另一个事务还没有提交的数据

java让sql事务提交 sqlyog如何提交事务_java_03

2.不可重复读

一个事务先后读取同一条记录,但两次读取的数据不同。

java让sql事务提交 sqlyog如何提交事务_学习_04


3.幻影读

一个事务按条件查询时,没有对应的数据行,但是插入数据的时候,又发现这行数据好像已经存在,再去查发现有没查到。(第二次没查到是因为不可重复读导致的)

java让sql事务提交 sqlyog如何提交事务_数据库_05

事务的隔离级别

java让sql事务提交 sqlyog如何提交事务_数据库_06


查看事务的隔离级别:

SELECT @@transaction_isolation

java让sql事务提交 sqlyog如何提交事务_学习_07


设置事务的隔离级别

set session transaction isolation level read uncommitted