SQL事务
事务特征特性:ACID
-- 1、原子性:要么都成功 要么都失败
-- 2、一致性:事务执行前和执行后数据库的状态保持一致性
-- 3、持久性:当事务成功后持久化到磁盘 一旦提交不可逆
-- 4、隔离性:事物之间的隔离 多个用户访问数据库时 数据库为每一个用户开始事务 不会被其他用户操作干扰
隔离所导致的一些问题(脏读、不可重复度、幻读)
-- 脏读
一个事务读取了另一个事务未提交的数据
-- 不可重复读
多次读取的结果是不一致的(不一定是错误的 某些场合不对)
-- 幻读(虚读)
一个事务中读取倒别人事务插入的数据 导致前后读取不一致
-- 事务-- mysql 是默认开启事务自动提交的-- 关闭SET autocommit = 0-- 开启SET autocommit = 1-- 事务开始 标记这这个事务的开始 之后的sql都在同一个事务内START TRANSACTIONINSERT xxINSERT xx-- 提交 持久化(成功)COMMIT-- 回滚 回到原来的样子ROLLBACK-- 事务结束SET autocommit = 1-- 了解-- SAVEPOINT 保存点名 设置一个事务的保存点-- ROLLBACK TO SAVEPOINT 保存点名 回滚到保存点-- PELEASE SAVEPOINT 保存点名 撤销保存点
关于事务的举例:
-- 关闭自动提交SET autocommit = OFF;SHOW VARIABLES LIKE 'autocommit';-- 开启事务(一组事务)START TRANSACTION; UPDATE shop SET money = money + 500 WHERE NAME = 'A';UPDATE shop SET money = money + 10000 WHERE NAME = 'B';COMMIT; -- 提交事务 一旦提交就被持久化了ROLLBACK; -- 回滚SET autocommit = on; -- 恢复默认值
开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系