济南做网站的公司有哪些,wordpress 文章字体,丰台公司做网站,行业网站推广外包一.什么是事物 事物是一组操作的集合#xff0c;不可分割的工作单位#xff0c;事物会把所有的操作当作一个整体一起向系统提交或撤销操作请求#xff0c;就是这些操作要么一起成功要么一起失败。
二.事物操作 #xff08;这个就是一个理解#xff09; 1.事务特性 原子性…一.什么是事物 事物是一组操作的集合不可分割的工作单位事物会把所有的操作当作一个整体一起向系统提交或撤销操作请求就是这些操作要么一起成功要么一起失败。
二.事物操作 这个就是一个理解 1.事务特性 原子性Atomicity指事务是一个不可分割的工作单位事务中的操作要么都发生要么都不发生。
一致性Consistency事务必须使数据库从一个一致性状态变换到另外一个一致性状态。例如转账前和转账后的总金额不变。
隔离性Isolation事务的隔离性是多个用户并发访问数据库时数据库为每一个用户开启的事务执行时不能被其他事务的执行所干扰多个并发执行的事务之间要相互隔离。通过事务的隔离级别保证隔离性
持久性Durability指一个事务一旦被提交它对数据库中数据的改变就是永久性的接下来即使数据库发生故障也不应该对其有任何影响
2.事物的隔离级别会产生的问题
脏读读取其他事物未提交的数据
不可重复度读取其他事物已经提交修改
幻读读取其他事务插入的操作 下面有具体设置隔离级别的案例
扩展这个说的是原子性和隔离性没有关系
通过以下命令查看MySQL事物的提交方式
select autocommit 1是自动提交 0是手动提交
mysql中的事物默认自动提交。
可以将mysql中的事物设置为手动提交。 2.1查看/设置事物的提交方式 创建表并插入数据 CREATE TABLE test_01 ( id int DEFAULT NULL COMMENT 主见id, name varchar(10) DEFAULT NULL COMMENT 姓名, money int DEFAULT NULL COMMENT 金额 ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci COMMENT测试表; INSERT INTO test_01 (id,name,money) VALUES (1,张三,2000), (2,李四,2000); 2.2提交事务 2.3回滚事物
三.脏读幻读不可重复读 脏读过程的理解切换事物的隔离级别不同的隔离级别会导致数据的脏读幻读不可重复读 第一个窗口中查询的数据 第二个窗口中查询的数据 第一个窗口中开启事物 第二个窗口中开启事物 第一个窗口中开启事物后的查询 第二个窗口中开启事物后的修改并查询 第一个窗口在开启事物后查询第二个窗口在开启事物并修改数据后的查询 第二个窗口提交事物并查询 第一个窗口在第二个窗口提交事物后第一个窗口没有提交事物的查询 第一个窗口在提交事物后的查询 总结在没有关闭inndb自动提交事物和关闭inndb自动提交事物的情况下都没有发生脏读的情况都是在各自的窗口中执行各自的操作另一个窗口的操作并不会对其他窗口有影响。就算是操作修改删除插入后提交了事物也不会对其他事物还在进行中的数据有影响。大招因为我们默认用的隔离级别是 可重复读 Repeatable read 可重复读 不会发生 脏读幻读不可重复读 这条查询会返回全局和会话级别的事务隔离级别。全局级别代表服务器级别的默认隔离级别而会话级别代表当前连接会话的隔离级别。
执行这条查询将返回类似以下的输出 SELECT GLOBAL.transaction_isolation, SESSION.transaction_isolation; mysql8设置隔离级别
在MySQL 8中您可以使用SET TRANSACTION语句来设置事务的隔离级别。以下是几个常见的隔离级别设置示例
1.设置为读未提交Read Uncommitted:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
2.设置为读已提交Read Committed:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
3.设置为可重复读Repeatable Read:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
4.设置为串行化Serializable:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
请注意设置隔离级别必须在启动事务使用START TRANSACTION之前进行。一旦事务开始隔离级别就无法更改。
此外也可以在MySQL配置文件通常是my.cnf或my.ini中设置默认的全局隔离级别或者为单个会话设置隔离级别。这样做可以影响所有新的连接和事务不必在每次开始事务时都进行设置。
四.隔离级别的具体实现
参考视频MySQL事务和锁机制详解_哔哩哔哩_bilibili 事物具体的实现方式
原子性一致性持久性 通过redo log 和 undo log 实现
隔离性 通过锁和mvcc多版本控制实现 就到这重新写一篇具体的实现