事务

来源:互联网 发布:json格式验证工具 编辑:程序博客网 时间:2024/05/21 22:53

事务

什么是事务?

事务是指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功,从而确保了数据的准确安全。

MYSQL中如何使用事务?

1.在MySQL中的每一条语句都是属于独立的事务,myaql中的事务是自动开启的,每一个数据厂商不一样,oracal中就不是

2.在mysql中手动开启事务,使用的是  start transaction   在此之后的语句都会处于同一个事务之中;

事务的特性:

原子性:原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生;

一致性:事务必须是数据从一个一致性状态变换到另外一个一致状态;

隔离性:事务的隔离性从一个一致性变换到另外一个一致性状态

持久性:持久性是指一个事务一旦被提交了,它对数据的改变就是永久的,接下来即使数据库发生了故障也不应该对其有任何影响;

总结事务的特性:原子性  隔离性 永久性  一致性


隔离性:如果没有隔离性,那么线程之间就会出现干扰


如果不考虑隔离级别,会出现以下的情况:-->下面的是错误的现象

脏读:一个线程中的事务读到了另外一个线程中未提交的数据

不可重复读:一个线程中的事务读到了另外一个线程中已经提交的update的数据(前后内容不一样)

虚读(幻读):一个线程中的事务读到了另外一个线程已经提交的insert的数据(前后条数不一样)


针对这三种情况  mysql提供了三种隔离级别:

Serialiable:可避免脏读,不可重复读,虚读情况的发生     最高

Repeatable read:可避免脏读,不可避免重复读情况的发生,但是不能避免的是虚读或者幻读情况的发生  第二

Read committed:可以避免脏读情况的发生;

Read unconnitted:级别最低,以上情况均无法保证    级别最低


设置MySQL的默认隔离级别是:REPEATABLE READ    这个是可重复读   他可以避免的是脏读和不可重复读;



查询当前使用的隔离级别:select @@tx_islation   select @@tx_islation   select @@tx_islation;

设置MySQL事务的格力级别:set session transaction isolation level xxx;(设置当前事务的,并不是永久改变的;)

注意的是:修改mysql事务的隔离级别,必须在开启事务之前,否则是无效的;




























































0 0
原创粉丝点击