数据库之事务

数据库之事务

事务的特点:

ACID

原子性

一致性:数据库的完整性约束,不能被破坏

隔离性

持久性:数据一旦提交,事务的效果将会被永久的保留在数据库中。而且不会被回滚

主从复制

高可用

备份

权限控制

脏读:另外一个事务能够看到另一个事务未提交的修改结果

事务隔离级别的作用范围:

1、全局级:对所有的会话有效

2、会话级:只对当前的会话有效

show global variables like %isolation;:查询全局事务的隔离级别

select @@global.txisolation;:查询全局事务的隔离级别

show session variables like %isolation;:查询会话事务的隔离级别

select @@session.txisolation;:查询会话事务的隔离级别

设置全局事务的隔离级别:

set global transation isolation level read uncommitted;

临时修改全局事务的隔离级别,重启服务即失效:

set @@global.tx_isolation=read uncommitted;

设置会话的隔离级别:

set session transation isolation level read uncommitted;

设置临时会话的隔离级别:

set @@session.tx_isolation=read uncommitted;

不可重复读:一个事务内,多次读同一数据

前一个事务还没有结束,另一个事务也访问该数据

在一个事务之内,两次查询到结果不一致,读不到相同的数据内容

幻读:一个事务对一个表中的数据进行了修改,可能会涉及到表中的全部数据。

另一个事务也修改了表中的数据。

例如插入了一行新的数据,前一个事务会发现表中还有数据没有修改,类似于幻觉

丢失更新:两个事务同时修改一条记录,A先记录,B也修改了记录,B一旦提交会覆盖A的结果

面试题:

以上这些情况如何避免:

1、权限控制

2、根据情况来使用隔离级别

生产环境----最好是提交读

测试环境----无所谓

3、生产环境只能允许一个人对一个事务进行操作。其他人不允许操作

总结:在事务管理中,原子性是基础,隔离性是手段,一致性是目的 持久性是最终的结果

事务的控制语句:

BEGIN:显示的开启事务

START transaction:显示的开启事务

commit:提交事务

commit work:提交事务

rollback:回滚(撤销正在进行的所有未提交的修改)

rollback work:回滚(撤销正在进行的所有未提交的修改)

savepoint s1;:创建回滚点,一个事务可以有多个回滚点

rollback to s1;:回滚到还原点

注意:

1、多点还原,s1和s2

如果说还原到s1

mysql提交事务是默认提交

可以用set来设置mysql的提交方式:

show variables like autocommit;

set autocommit=0;

默写:

1、AICD:分别是什么

A:原子性

C:一致性

I:隔离性

D:持久性

2、mysql支持的隔离级别分别是什么?

未提交读

可重复读

提交读

串行读

3、脏读,幻读,不可重复读和丢失更新怎么预防?

权限控制

设置合理的隔离级别

生产中主要还是串行读

你可能感兴趣的:(数据库,服务器)