MySQL事务原理
事务概述
事务是一组原子性的SQL操作序列,这些操作要么全部执行成功,要么全部失败,事务具有以下特性:
1、原子性(Atomicity):事务中的所有操作要么全部执行成功,要么全部失败,不会只执行其中的一部分。
2、一致性(Consistency):事务执行前后,数据库的状态应该保持一致。
3、隔离性(Isolation):并发执行的多个事务之间互不干扰,一个事务的中间状态对其他事务不可见。
4、持久性(Durability):事务一旦提交,其对数据库的修改是永久性的。
事务控制语句
MySQL中用于控制事务的语句有:
1、BEGIN:开始一个新的事务。
2、COMMIT:提交当前事务,使对数据库的修改永久生效。
3、ROLLBACK:回滚当前事务,撤销对数据库的所有修改。
4、SAVEPOINT:设置一个保存点,可以在后续的ROLLBACK命令中指定回滚到这个保存点。
5、SET TRANSACTION:设置事务的属性,如隔离级别等。
事务隔离级别
MySQL支持四种事务隔离级别,分别为:
1、READ UNCOMMITTED(未提交读):允许读取尚未提交的其他事务对数据的修改。
2、READ COMMITTED(提交读):只允许读取已经提交的其他事务对数据的修改。
3、REPEATABLE READ(可重复读):在一个事务内,多次读取同一行数据时,结果都是一致的,在并发执行的多个事务之间,可能会出现幻读现象。
4、SERIALIZABLE(串行化):强制事务串行执行,避免了幻读现象,但性能较差。
事务隔离级别的实现原理
1、未提交读:通过不加锁的方式实现,可能导致脏读、不可重复读和幻读现象。
2、提交读:通过加共享锁的方式实现,只锁定查询到的数据行,提高了并发性能,在可重复读和串行化隔离级别下,可以避免脏读和不可重复读现象。
3、可重复读:通过加共享锁的方式实现,只锁定查询到的数据行,在并发执行的多个事务之间,使用MVCC(多版本并发控制)技术来避免幻读现象,在串行化隔离级别下,可以避免幻读现象。
4、串行化:通过加排他锁的方式实现,确保事务串行执行,性能较差。
事务控制语句的使用示例
开始一个新的事务 BEGIN; 插入一条数据 INSERT INTO users (name, age) VALUES ('张三', 25); 插入一条数据 INSERT INTO users (name, age) VALUES ('李四', 30); 提交当前事务,使对数据库的修改永久生效 COMMIT;
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/644487.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复