1. 乐观锁

    1. 需要对表的设计增加额外的字段,增加了数据库的冗余,另外,当应用并发量高的时候,version值在频繁变化,则会导致大量请求失败,影响系统的可用性。

    2. 我们通过上述sql语句还可以看到,数据库锁都是作用于同一行数据记录上,这就导致一个明显的缺点,在一些特殊场景,如大促、秒杀等活动开展的时候,大量的请求同时请求同一条记录的行锁,会对数据库产生很大的写压力。

  2. 悲观锁

    1. 使用方法: select * from table where id = 1 for update;
    2. 在高并发环境下,容易造成大量请求阻塞,影响系统可用性
    3. 悲观锁使用不当还可能产生死锁的情况
      1. 一个事务里面不好获取多个锁,不然会有哲学家就餐问题

外键的优点

  • 保证数据的完整性和一致性;
  • 级联操作方便;
  • 将数据完整性判断托付给了数据库完成,减少了程序的代码量;