当执行事务操作时,MySQL会在表上加锁,防止其他用户改表的数据.这对用户来讲是非常重要的.
如果不开启事务,默认是自动提交的,不能回滚;
//1.开始一个事务,方式1 start transaction //1.开始一个事务,方式2 set autocommit=off //2.设置保存点,可以创建多个保存点 savepoint 保存点名 //3.回退事务 rollback to 保存点名 //4.回退全部事务,如果没有创建保存点,直接回退到开始状态 rollback //5.提交事务,所有事务操作生效,删除之前所有保存点,释放锁,数据生效,不能回退了 commit2.隔离级别
保证多个连接获取数据的准确性
//查看当前会话隔离级别 select @@tx_isolation
不考虑隔离级别的三种可能:
脏读(dirty read):看到其他事务未提交的修改
不可重读的(nonrefundable read):看到其他事务提交的修改或删除
幻读(phantom read):看到其他事务提交的插入
四种隔离级别:
读未提交(read uncommitted):出现 脏读/不可重读/幻读 读的时候不加锁
读已提交(read committed):出现 不可重读/幻读 读的时候不加锁
可重复的(repeatable read):不会出现上面的三种 读的时候不加锁
可串行化(serializable):不会出现上面的三种 读的时候加锁