熟练做网站需要了解什么,开网站卖东西需要什么条件,今天新闻联播主要内容,家教中介网站开发前言 ⭐Hello!这里是欧_aita的博客。 ⭐今日语录#xff1a;生活中最重要的决定就是要做出决定。 ⭐个人主页#xff1a;欧_aita ψ(._. )⭐个人专栏#xff1a; 数据结构与算法 MySQL数据库 事务的目录#x1f4d5; 前言事务简介#x1f680;事务操作#x1f680;准…
前言 ⭐Hello!这里是欧_aita的博客。 ⭐今日语录生活中最重要的决定就是要做出决定。 ⭐个人主页欧_aita ψ(._. )⭐个人专栏 数据结构与算法 MySQL数据库 事务的目录 前言事务简介事务操作准备数据方式一查看/设置事务提交方式提交事务回滚事务演示 方式二开启事务 提交事务回滚事务演示 事务四大特性ACID并发事务问题事务隔离级别查看事务隔离级别设置事务隔离级别 事务简介 事务是一组操作的集合它是一个不可分割的操作单位事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求即这些操作要么同时成功要么同时失败。 举个例子在银行转账的过程中分为三步
第一步查询张三账户余额是否足够转账张三余额扣除相应数目李四银行账户余额增加相应数目
但是如果在李四余额增加的过程中出现异常则同时所有操作取消。 这个实例可以帮助我们有效理解事务。
默认MySQL的事务是自动提交的也就是说当执行一条DML语句时MySQL会立即隐式的提交事务。
事务操作
准备数据
create table account(id int auto_increment primary key comment 主键ID ,name varchar(10) comment 姓名 ,money int comment 余额
)comment 账户表 ;
insert into account (id,name,money) values (null,张三,2000),(null,李四,2000);方式一
查看/设置事务提交方式
SELECT autocommit;
SET autocommit;提交事务
COMMIT;回滚事务
ROLLBACK;演示
1.目前账户状况 2.开始操作
-- 转账操作
-- 1.查询张三账户余额select * from account where name 张三;-- 2.将张三账户余额-1000update account set money money - 1000 where name 张三 ;-- 3.将李四账户余额1000update account set money money 1000 where name 李四 ;
3.转账成功 以上是自动提交接下来改一下提交方式修改为手动提交
查看提交方式
select autocommit;此时值若为1就是自动提交
修改为手动提交
set autocommit 0; -- 设置为手动提交此时若值为0就是手动提交 3.开始转账操作
-- 转账操作
-- 1.查询张三账户余额select * from account where name 张三;-- 2.将张三账户余额-1000
给出一个异常
update account set money money - 1000 where name 张三 ;-- 3.将李四账户余额1000update account set money money 1000 where name 李四 ;发现有异常此时由于还没有提交选择回滚事务后重写编写SQL语句再提交。原本的数据不会发生变化在最后再使用提交。
-- 回滚事务
rollback;-- 提交事务
commit;方式二
开启事务
START TRANSACTION;或者
BEGIN;两者具有相同的作用
提交事务
COMMIT;回滚事务
ROLLBACK;演示
start transaction ;-- 1.查询张三账户余额select * from account where name 张三;-- 2.将张三账户余额-1000update account set money money - 1000 where name 张三 ;chenxu
-- 3.将李四账户余额1000update account set money money 1000 where name 李四 ;-- 提交事务
commit;-- 回滚事务
rollback;
事务四大特性ACID
原子性事务是不可分割的最小操作单元要么全部成功要么全部失败。一致性事务完成时必须是所有的数据都保持一致状态。隔离性数据库系统提供的隔离机制保证事务在不受外部并发操作影响的独立环境下运行。持久性事务一旦提交或回滚它对数据库中的数据的改变就是永久的。
并发事务问题
问题描述赃读一个事务读到另一个事务还没有提交的数据不可重复读一个事务先后读取同一条记录但两次读取的数据不同称之为不可重复读。幻读一个事务按照条件查询数据时没有对应的的数据行但在插入数据时又发现这行数据已经存在好像出现了“幻影”。
事务隔离级别
隔离级别赃读不可重复读幻读Read uncommitted√√√Read committed×√√Repeatable Read默认××√Serializable×××
从上向下隔离级别越来越高但是效率却越来越低。
查看事务隔离级别
SELECT TRANSACTION_ISOLATION;设置事务隔离级别
SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}