网站没有域名,网站建设提供资料表,大连高新园区在哪,wordpress评论框添加表情评论文章目录事务四大特征多事务并发存在的问题事务隔离级别查询数据库的隔离级别设置数据库隔离级别1.事务里面的语句出错时并不会主动回滚#xff0c;需要用户主动执行回滚指令 2.事务开始后#xff0c;如果没有主动执行回滚或者提交指令#xff0c;事务始终在执行中 3.事务执…
文章目录事务四大特征多事务并发存在的问题事务隔离级别查询数据库的隔离级别设置数据库隔离级别1.事务里面的语句出错时并不会主动回滚需要用户主动执行回滚指令 2.事务开始后如果没有主动执行回滚或者提交指令事务始终在执行中 3.事务执行中涉及到的表被锁定其它会话可以查询但是不能修改 4.执行回滚指令事务中的执行计划被舍弃事务结束 5.执行提交指令事务中的执行计划被切实执行而且这个切实执行还不可能报错事务结束
事务四大特征
1.原子性事务是不可分割的最小操作单位要么同时成功要么同时失败
2.持久性一个事务一旦被提交了那么对数据库中的数据的改变就是永久性的即便是在数据库系统遇到故障的情况下也不会丢失提交事务的数据
3.隔离性隔离性是当多个用户并发访问数据库时比如操作同一张表时数据库为每一个用户开启的事务不能被其他事务的操作所干扰多个并发事务之间要相互隔离。
4.一致性事务执行前后的数据完整性保持一致。拿转账来说假设用户A和用户B两者的钱加起来一共是5000那么不管A和B之间如何转账转几次账事务结束后两个用户的钱相加起来应该还得是5000这就是事务的一致性。
多事务并发存在的问题
1.脏读一个事务读取到另一个事务中没有提交的数据
2.不可重复读(虚读) 在同一个事务中两次读取到的数据不一样
3.幻读
示例1 事务 T 查询某记录是否存在查询结果是不存在于是插入这条记录但执行插入语句时发现此记录已存在其它事务插入了数据无法插入此时就发生了幻读。
示例2 事务 T1 将表中所有行的字段 A 的值从 1 修改为 2这时事务 T2 又对这个表插入了一行数据而且这行数据的字段 A 的值就是 1 并且提交给数据库。如果事务 T1 再查看刚刚修改的数据会发现还有一行没有修改其实这行数据事务 T2 添加进去的就好像产生幻觉一样这就是发生了幻读。
事务隔离级别
1.Read Uncommitted表示读取未提交的效率最高但是安全级别最低会产生脏读、不可重复读、幻读三种问题
2.Read Committed读取已提交的效率其次安全级别稍好不会产生脏读问题但是会产生不可重复读和幻读两种问题。Oracle 默认此级别
3.Repeatable Read可重复读效率还行安全级别不错不会产生脏读和不可重复读的问题但是会产生幻读问题。MySQL 默认此级别
4.Serializable串行化效率比较低安全级别最高不会产生任何问题。原因某个事务对某个表的数据进行了修改会加表级排他锁如果查询某个表的数据则会加表级共享锁
查询数据库的隔离级别
mysql select tx_isolation;
-----------------
| tx_isolation |
-----------------
| REPEATABLE-READ |
-----------------
1 row in set, 1 warning (0.00 sec)如果是 macOS事务隔离级别的系统变量是
mysql select transaction_isolation;
-------------------------
| transaction_isolation |
-------------------------
| SERIALIZABLE |
-------------------------
1 row in set (0.00 sec)设置数据库隔离级别
# 设置全局级别的
set global transaction isolation level repeatable-read
# 设置会话级别的
set session transaction isolation level repeatable-read