1.了解事务的概念。
比如:银行转帐
张三 ---> 转账给李四500元
张三的钱-500;李四的钱+500;
两个update操作 这次事务才算完成,这就叫一次事务。
那:张三的钱刚-500,打雷闪电机房断电,李四的钱还没加上
最终这500快哪去了???
日常生活中,汇款两字包含两个小动作,1扣张三的钱,2加李四的钱。
汇款成功,那扣钱和增加钱都需完成才算汇款成功,事物就是给你一种保证,什么样的保证呢?
要么让你都完成,要么让你都不完成,从而保证你数据的安全性
否则,张三钱少了,李四没收到钱...两人决裂了
如何保证一个或者一次事务的完整性?
事务要选择innodb引擎,之前建表都使用myisam引擎,但它速度是稍微快快点,但不支持事务。
1 CREATE TABLE t29( 2 id INT, 3 name CHAR(10), 4 money int 5 )ENGINE=innodb DEFAULT CHARSET=utf8;
插入zhangsan和lisi的数据
INSERT INTO t29 VALUES (1,'zhangsan',5000),(2,'lisi',5000);
zhangsan借给lisi500,给lisi的钱+500
UPDATE t29 SET money=money+500 where id=2;
在另外一个B窗⼝查看lisi的钱是否多了500
1 select * from t29;
这个事务还没完成,zhangsan的钱还没减500,lisi不应该看到自己多的500
A窗口启用事务,看看是什么样的效果
start transaction;
先查看连个人各有多少钱,再次给lisi+500
1 select * from t29; 2 update t29 set money=money+500 where id=2;
B窗口查看lisi的钱
1 select * from t29;
A窗口应该给zhangsan-500
update t29 set money=money-500 where id=1;
B窗口查看t29
select * from t29;
事务完成,A窗口结束事务
commit;
zhangsan继续借给了lisi50
1 update t29 set money=money+500 where id=2; 2 update t29 set money=money-500 where id=1;
结果在commit之前,想撤销借出的钱
需要用到:回滚 rollback;
1 rollback; 2 select * from t29;