事务实操

事物实操

1、事物-sql(初体验事务)

#事务

概念:数据库区分于其他文件系统的一种特征

好处:

希望执行一些操作时,要么同时执行,要么同时不执行,最终达到数据的一致性

特性:【★】

ACID

分类:

1、隐式事务

比如:insert、update、delete本身就是一个事务

2、显式事务

特征:具有明显的开启和结束的标记

set autocommit=0;取消隐式事务自动提交的功能

start transaction;开启事务

....增删改查sql语句

commit;提交事务

rollback;回滚事务

并发事务容易出现的问题:

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

不可重复读:在一个事务执行期间,两次查询读到的结果不一致

幻读:一个事务进行插入操作,没有提交。另一个事务读到了没有提交的数据

如何解决?

read uncommitted: 脏读、不可重复、幻读

read committed:不可重复读、幻读

repeatable read:幻读(mysql5.5版本之前会出现幻读,但5.5之后不会出现)

serializable:串行化(性能极低)

mysql默认的是repeatable read

如何查看隔离级别?

select @@tx_isolation;

如何设置隔离级别?

set @@tx_isolation='read-uncommitted';

set [global] transaction isolation level read uncommitted;

SHOW VARIABLES LIKE 'autocommit';

#开启事务

set autocommit=0;#取消自动提交

start transaction;#开启新事务,可选

insert into beauty values(null,'付明明2','女',now(),'112',null,null);

rollback;#回滚事务

commit;#提交事务

SELECT * FROM beauty;

#演示delete和truncate在事务中的区别

# delete可以回滚, truncate不能回滚

SELECT * FROM admin;

SET autocommit=0;

DELETE FROM admin;

ROLLBACK;

SET autocommit=0;

TRUNCATE TABLE admin;

ROLLBACK;

2、并发事物 dos 演示(演示事务的隔离级别)

SELECT * FROM `admin`

INSERT INTO admin VALUES(1,'xiaoming','000000')

set global transaction isolation level repeatable read;

dos1

C:\> mysql -uroot -proot

mysql> use girls;

Database changed

mysql> select @@tx_isolation;

+-----------------+

| @@tx_isolation  |

+-----------------+

| REPEATABLE-READ |

+-----------------+

mysql> set autocommit = 0;

mysql> insert into account values(11,’john’,’000’)

mysql>commit

//最小的隔离级别 ,需要重启dos,因为没有效果

mysql> set global transaction isolation level read uncommitted;

Query OK, 0 rows affected (0.00 sec)

mysql> select @@tx_isolation;

+-----------------+

| @@tx_isolation  |

+-----------------+

| REPEATABLE-READ |

+-----------------+

mysql> select @@tx_isolation;

+------------------+

| @@tx_isolation   |

+------------------+

| READ-UNCOMMITTED |

+------------------+

mysql> set autocommit = 0;

mysql> insert into admin(username,password) values('tr12','erw3');

mysql> rollback;

Query OK, 0 rows affected (0.01 sec)

dos2

C:\> mysql -uroot -proot

mysql> use girls;

Database changed

mysql> select @@tx_isolation;

+-----------------+

| @@tx_isolation  |

+-----------------+

| REPEATABLE-READ |

+-----------------+

mysql > select * from admin;

mysql > select * from admin; 

重启  重启  重启  重启

mysql> select @@tx_isolation;

+------------------+

| @@tx_isolation   |

+------------------+

| READ-UNCOMMITTED |

+------------------+

mysql > select * from admin;

mysql > select * from admin;

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。