一、锁
行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也最大
表级锁是MySQL中锁定粒度最大的一种锁,表示对当前操作的整张表加锁,它实现简单,资源消耗较少,被大部分MySQL引擎支
二、乐观锁 悲观锁
乐观锁和悲观锁是两种思想,用于解决并发场景下的数据竞争问题。
- 乐观锁:乐观锁在操作数据时非常乐观,认为别人不会同时修改数据。因此乐观锁不会上锁,只是在执行更新的时候判断一下在此期间别人是否修改了数据:如果别人修改了数据则放弃操作,否则执行操作。
- 悲观锁:悲观锁在操作数据时比较悲观,认为别人会同时修改数据。因此操作数据时直接把数据锁住,直到操作完成后才会释放锁;上锁期间其他人不能修改数据。
三、事务
事务就是指逻辑上的一组sql语句操作,组成这组操作的sql语句,要么全成功要么全失败。
-- 从id=1的账户给id=2的账户转账100元
-- 第一步:将id=1的A账户余额减去100
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- 第二步:将id=2的B账户余额加上100
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
上述两条sql操作,要么都执行,要么都不执行,不然钱就对不上了。这就是事务的原子性(Atomicity)。
事务的四大特性:
1.原子性:事务时不可分割的单位,要么一起发生,要么一起失败。
2.一致性:事务发生前后,数据的完整性保持一致。
3.隔离性:多个并发事务之间的数据使相互隔离的。
4.持久性:事务一旦提交,他对数据库的改变就是永久的。事务不能撤销。