第一、事务的原则
ACID原则:
原子性(atomicity):要么都成功,要么都失败
一致性(consistency):事务前后的数据完整性要保存一直
持久性(durability):事务提交,事务一旦提交则不可逆转,被持久化到数据库中
隔离性(isolation):事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离
隔离会导致:
脏读:指一个事务读取了另外一个事务未提交的数据。
不可重复读:在一个事务内读取表中某一行数据,多次读取结果不同
幻读(虚读):是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。
第二、事务的使用
1、MySQL默认开启事务自动提交
set autocommit = 0 -- 关闭事务
set autocommit = 1 -- 开启事务
2、手动处理事务
(1)、创建测试数据库
create database shop character set utf8 collate utf8_general_ci;
(2)、创建表
use shop;
create table account(
id int not null auto_increment,
name varchar(11) not null ,
money decimal(9,2) not null ,
primary key (id)
)engine = INNODB DEFAULT CHARSET = utf8
(3)、插入数据
insert into account(name, money) VALUES ('wjdsg',10000),('小明',1000)
(4)、模拟转账,wjdsg给小明转账500
set autocommit = 0; -- 关闭mysql默认自动提交
start transaction -- 开启一个事务
update account set money=money-500 where name='wjdsg'; -- wjdsg给小明转账
update account set money=money-500 where name='小明' -- 小明收到转账
commit; -- 提交时间,数据持久化
rollback; -- 回滚
set autocommit = 1;