事务
事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不 执行。
Mysql 中用 BEGIN, ROLLBACK, COMMIT 来实现事务
BEGIN 开始一个事务 ROLLBACK 事务回滚 COMMIT 事务确认
例子:张三账户转账转出 100 元到李四的账户
1、张三账户减去 100 元
2、李四账户增加 100 元
begin; // 开启一个事务;
UPDATE myusers SET balance=balance-100 WHERE id=1;
UPDATE myusers SET balance=balance+100 WHERE id=2;
rollback; // 如果有失败执行回滚;
commit; // 提交之后才更新数据;
锁 lock
Mysql 中的锁有表级锁和行级锁,这里主要讲最常用的表级锁
1、添加读锁
可以并发读,但是不能并发写,读锁期间,没释放锁之前不能进行写操作
使用场景:读取结果集的最新版本,同时防止其他事务产生更新该结果集 主要用在需要数据依存关系时确认某行记录是否存在,并确保没有人对这个记录进行 UPDATE 或者 DELETE 操作
lock table user read;
unlock tables;
2、添加写锁
只有锁表的用户可以进行读写操作,其他用户不行 (并发下对商品库存的操作)
多人抢一个商品
lock table user write;
unlock tables;