做网站用asp和html,培训网站有哪些,提供网站技术支持,百度北京分公司官网一.事务概念
事务是一种机制、一个操作序列#xff0c;包含了一组数据库操作命令#xff0c;并且把所有的命令作为一个整体一起向系统提交或撤销操作请求#xff0c;即这一组数据库命令要么都执行#xff0c;要么都不执行事务是一个不可分割的工作逻辑单元#xff0c;在数…一.事务概念
事务是一种机制、一个操作序列包含了一组数据库操作命令并且把所有的命令作为一个整体一起向系统提交或撤销操作请求即这一组数据库命令要么都执行要么都不执行事务是一个不可分割的工作逻辑单元在数据库系统上执行并发操作时事务是最小的控制单元事务适用于多用户同时操作的数据库系统的场景如银行、保险公司及证券交易系统等等事务通过事务的整体性以保证数据的一致性事务能够提高在向表中更新和插入信息期间的可靠性
总结事务就是一组数据库操作序列包含一个或多个SQL操作命令事务会把所有操作看作是一个不可分割的整体向数据库系统提交或撤销操作所有操作要么都执行要么都不执行。
二、事务的ACID特点
原子性 事务管理的基础。 把事务中的所有操作看作是一个不可分割的工作单元要么都执行要么都不执行。一致性 事务管理的目的。 保证事务开始前和事务结束后数据的完整和一致隔离性 事务管理的手段。 使多个事务并发操作同一个表数据时每个事务都有各自独立的数据空间事务的执行不会受到其它事务的干扰。可通过设置隔离级别来解决不同的一致性问题。持久性 事务管理的结果。 当事务被提交以后事务中的命令操作修改的结果会被持久化保存且不会吧被回滚。
三、典型的不一致性问题
当多个客户端并发地访问同一个表时可能出现下面的一致性问题
第一种脏读
脏读就是多个事务都在运行中其中事务a修改完数据以后并没有结束事务事务b能看到事务a的修改结果这就是脏读。 第二种不可重复读
不可重复读就是多个事务在运行中其中事务a修改了数据并提交以后事务b能看到事务a的修改这就是不可重复读 第三种幻读
幻读就是多个事务在运行过程中事务a修改了表数据的所有行此时事务b也插入了一条数据并且事务b提交事务此时事务a能看到事务b的数据这就是幻读 第四种丢失更新
丢失更新的时候多个事务在进行中此时事务b对某字段进行了修改并提交此时事务a并不知情同时对该字段进行了修改覆盖了事务b的修改这就是丢失更新。 四、隔离级别
指在并发环境中当不同的事务同时操纵相同的数据时每个事务都有各自的完整数据空间 对数据进行修改的所有并发事务是彼此隔离的表明事务必须是独立的它不应以任何方式依赖于或影响其他事务修改数据的事务可在另一个使用相同数据的事务开始之前访问这些数据或者在另一个使用相同数据的事务结束之后访问这些数据也就是说并发访问数据库时一个用户的事务不被其他事务所干扰各并发事务之间数据库是独立的
隔离级别分为四种用以控制事务所做的修改并将修改通告至其它并发的事务
1未提交读(Read UncommittedRU)
允许脏读即允许一个事务可以看到其他事务未提交的修改。
2提交读(Read CommittedRC)这是oracle 和 SQL server的默认隔离级别
允许一个事务只能看到其他事务已经提交的修改未提交的修改是不可见的。防止脏读。
3可重复读(Repeatable ReadRR)——mysql默认的隔离级别
确保如果在一个事务中执行两次相同的语句都能得到相同的结果不管其他事务是否提交这些修改。可以防止脏读和不可重复读。有条件的不允许幻读InnoDB存储引擎可以不允许
4串行读(Serializable)——相当于锁表
完全串行化的读将一个事务与其他事务完全地隔离。每次读都需要获得表级共享锁读写相互都会阻塞。可以防止脏读不可重复读取和幻读(事务串行化)会降低数据库的效率。
五、隔离级别设置
设置
设置隔离级别
全局级别的设置
set global transaction isolation level 隔离级别名称;
#可在所有会话有效需要重新登录才可生效会话级别的设置
set session transaction isolation level 隔离级别名称;
#在当前会话中立即生效设置全局事务隔离级别
set global transaction isolation level read committed; ##永久生效
set global.tx_isolationread-committed; #重启服务后失效设置会话事务隔离级别
set session transaction isolation level repeatable read;
set session.tx_isolationrepeatable-read; #重启服务后失效 查询
查询全局事务隔离级别
show global variables like %isolation%;
SELECT global.tx_isolation;查询会话事务隔离级别
show session variables like %isolation%;
SELECT session.tx_isolation;
SELECT tx_isolation;
like表示模糊查询 百分号相当于通配符*的作用
隔离级别在MySQL中是一个变量
show variables; #表示查看MySQL的变量 六、事务管理操作命令
begin; #开启一个事务
.... create database/table insert into update XXX set delete from #事务性操作
savepoint XX; #在事务中创建回滚点
rollback to XX; #在事务中回滚操作到指定的回滚点位置
commit; 或 rollback; #提交或回滚结束事务 set 设置控制事务
set [global/session] autocommit 0/1; #0关闭自动提交1开启自动提交。Mysql默认为1
show [global/session] variables like autocommit; #查看Mysql中的AUTOCOMMIT值
我们登录MySQL的时候 每一条命令都能直接生效保存并没有commit和rollback是因为有自动提交事务变量每一条增删改命令看做一条事务然后自动提交。
如果设置为0就是关闭自动提交那么会将登录后的所有的操作命令看做一个事务最终需要commit提交一下否则不生效
如果没有开启自动提交当前会话连接的mysql的所有操作都会当成一个事务直到你输入rollback|commit;当前事务才算结束。当前事务结束前新的mysql连接时无法读取到任何当前会话的操作结果 如果开起了自动提交mysql会把每个sql语句当成一个事务然后自动的commit