三、事务事务是一组操作的集合他是一个不可分割的工作单位事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求即这些操作要么同时成功要么同时失败。1.事务操作1.1 方式一查看/设置事务提交方式SELECT AUTOCOMMIT;-- select autocommit SET AUTOCOMMIT 0;AUTOCOMMIT的值有两种1为自动提交0为手动提交该设置只对当前会话有效,默认一般是1自动提交此时如果改为0手动提交不会改变原数据需要下面的手动提交事务提交事务COMMIT;-- commit回滚事务ROLLBACK;-- rollback方式一练习select autocommit; set autocommit 0; -- 设置手动提交 -- 转账操作张三给李四转账1000) -- 1、查询张三账户余额 select * from account where name 张三; -- 2、将张三账户余额-1000 update account set money money - 1000 where name 张三; 程序执行出错... -- 3、奖励四账户余额1000 update account set money money 1000 where name 李四; -- 提交事务 commit; -- 回滚事务 rollback;1.2 方式二开启事务START TRANSACTION 或 BEGIN [TRANSACTION]; -- start transaction 或 begin [transaction];提交事务COMMIT; -- commit;回滚事务ROLLBACK; -- rollback;方式二练习-- 方式二 -- 开启事务 start transaction; -- 表示我要手动提交 -- 转账操作张三给李四转账1000) -- 1、查询张三账户余额 select * from account where name 张三; -- 2、将张三账户余额-1000 update account set money money - 1000 where name 张三; 程序执行出错... -- 3、奖励四账户余额1000 update account set money money 1000 where name 李四; -- 提交事务 commit; -- 回滚事务 rollback;2.事务的四大特性(ACID)原子性(Atomicity)事务是一组操作是不可分割的最小操作单元要么全部成功要么全部失败一致性(Consistency)事务完成时必须使所有数据都保持一致状态隔离性(Isolation):数据库系统提供的隔离机制保证事务在不受外部并发操作影响的独立环境下运行持久性(Durability)事务一旦提交或回滚它对数据库中的数据的改变就是永久的3.并发事务问题问题描述脏读一个事务读到另一个事务还没提交的数据不可重复读一个事务先后读取同一条记录但两次读取的数据不同幻读一个事务按照条件查询数据时没有对应的数据行但是再插入数据时又发现这行数据已经存在4.事务隔离级别隔离级别脏读不可重复读幻读Read uncommitted√√√Read committed×√√Repeatable Read(默认)××√Serializable×××查看事务隔离级别SELECT TRANSACTION_ISOLATION; -- select transaction_isolation;设置事务隔离级别SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}; set [session | global] transaction isolation level {read uncommitted | read committed | repeatable read | serializable};SESSION 是会话级别表示只针对当前会话有效GLOBAL 表示对所有会话有效事务隔离级别越高数据安全性越安全但是性能越低Read uncommitted事务隔离级别最低Serializable事务隔离级别最高
MySQL(七)事务详细讲解(事务操作两种方式、事务的四大特性、并发事务问题、事务隔离级别)
三、事务事务是一组操作的集合他是一个不可分割的工作单位事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求即这些操作要么同时成功要么同时失败。1.事务操作1.1 方式一查看/设置事务提交方式SELECT AUTOCOMMIT;-- select autocommit SET AUTOCOMMIT 0;AUTOCOMMIT的值有两种1为自动提交0为手动提交该设置只对当前会话有效,默认一般是1自动提交此时如果改为0手动提交不会改变原数据需要下面的手动提交事务提交事务COMMIT;-- commit回滚事务ROLLBACK;-- rollback方式一练习select autocommit; set autocommit 0; -- 设置手动提交 -- 转账操作张三给李四转账1000) -- 1、查询张三账户余额 select * from account where name 张三; -- 2、将张三账户余额-1000 update account set money money - 1000 where name 张三; 程序执行出错... -- 3、奖励四账户余额1000 update account set money money 1000 where name 李四; -- 提交事务 commit; -- 回滚事务 rollback;1.2 方式二开启事务START TRANSACTION 或 BEGIN [TRANSACTION]; -- start transaction 或 begin [transaction];提交事务COMMIT; -- commit;回滚事务ROLLBACK; -- rollback;方式二练习-- 方式二 -- 开启事务 start transaction; -- 表示我要手动提交 -- 转账操作张三给李四转账1000) -- 1、查询张三账户余额 select * from account where name 张三; -- 2、将张三账户余额-1000 update account set money money - 1000 where name 张三; 程序执行出错... -- 3、奖励四账户余额1000 update account set money money 1000 where name 李四; -- 提交事务 commit; -- 回滚事务 rollback;2.事务的四大特性(ACID)原子性(Atomicity)事务是一组操作是不可分割的最小操作单元要么全部成功要么全部失败一致性(Consistency)事务完成时必须使所有数据都保持一致状态隔离性(Isolation):数据库系统提供的隔离机制保证事务在不受外部并发操作影响的独立环境下运行持久性(Durability)事务一旦提交或回滚它对数据库中的数据的改变就是永久的3.并发事务问题问题描述脏读一个事务读到另一个事务还没提交的数据不可重复读一个事务先后读取同一条记录但两次读取的数据不同幻读一个事务按照条件查询数据时没有对应的数据行但是再插入数据时又发现这行数据已经存在4.事务隔离级别隔离级别脏读不可重复读幻读Read uncommitted√√√Read committed×√√Repeatable Read(默认)××√Serializable×××查看事务隔离级别SELECT TRANSACTION_ISOLATION; -- select transaction_isolation;设置事务隔离级别SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}; set [session | global] transaction isolation level {read uncommitted | read committed | repeatable read | serializable};SESSION 是会话级别表示只针对当前会话有效GLOBAL 表示对所有会话有效事务隔离级别越高数据安全性越安全但是性能越低Read uncommitted事务隔离级别最低Serializable事务隔离级别最高