MySQL高级进阶
1.了解什么是事务控制
2.熟悉事务的特性
3.掌握事务控制的作用【重点】
什么是事务?
事务的四个特性
原子性:原子,不可再分割
MySQL的事务控制
实际演练:银行转账的例子
创建表格
create table bank_account(
id int not null auto_increment primary key,
name varchar(30) comment '姓名',
balance decimal(18, 2) comment '账户余额'
);
insert into bank_account(id, name, balance) values(1, '张三', 0);
insert into bank_account(id, name, balance) values(2, '李四', 0);
update bank_account set balance=balance+1000 where id=1;
====================================================================================
查看自动提交是否开启,默认为1,开启状态。
select @@autocommit;
开启一个事务
start transaction;
张三给李四转账100
update bank_account set balance=balance-100 where id=1;
update bank_account set balance=balance+100 where id=2;
提交事务
commit;
查看表的状态,发现已经更改完毕
select * from bank_count;
mysql> select * from bank_account;
+----+------+---------+
| id | name | balance |
+----+------+---------+
| 1 | 张三 | 900.00 |
| 2 | 李四 | 100.00 |
+----+------+---------+
2 rows in set (0.00 sec)
又开启了一个事务
start transaction;
想进行再转账100的业务
update bank_account set balance=balance-100 where id=1;
update bank_account set balance=balance+100 where id=2;
发现出现错误了,想取消这个事务,那么就使用rollback回滚。
rollback;
再次查看,发现未更改
mysql> select * from bank_account;
+----+------+---------+
| id | name | balance |
+----+------+---------+
| 1 | 张三 | 900.00 |
| 2 | 李四 | 100.00 |
+----+------+---------+
2 rows in set (0.00 sec)