1. 数据库粒度锁historical

    1. 什么是粒度锁 数据库的锁按照粒度划分,可以分成行锁、页锁、表锁 2. 行锁 2.1. 是什么 行锁就是按照行的粒度对数据进行锁定 2.2. 分类 再按读写划分 共享锁:读锁,S(Share)锁。读取一条记录时,先获取该锁。多个读操作可以同时进行,但会阻塞写 独占锁:写锁,X(Exclusive)锁。修改一条记录时,先获取该锁。当前写操作没有完成前,会阻塞其他写和读操作 兼容性 使用 共享锁: SELECT ... LOCK IN SHARE MODE 独占锁: SELECT ... FOR UPDATE 3. 页锁 3.1. 是什么 页锁就是在页的粒度上进行锁定

  2. 数据库范式historical

    1. 定义 1NF:符合1NF的关系中的每个属性都不可再分 2NF:2NF在1NF的基础之上,消除了非主属性对于码的 部分 函数依赖 3NF:3NF在2NF的基础之上,消除了非主属性对于码的 传递 函数依赖 2. 参考 数据库第一二三范式到底在说什么? 知乎

  3. 数据库锁historical

    1. 是什么 多个事务并发访问同一份数据的时候,肯定会有冲突发生,那么怎么处理这种冲突呢? 主要有两种思想: 1. 悲观锁机制:避免冲突发生,如Read/Write Locks,Two Phase Locking 2. 乐观锁机制:允许冲突发生,后续需要检测出冲突,如MVCC 用Java语言描述 使用Java进行多线程编程的时候,需要加锁。 最简单的就是ReentranLock,这玩意读写互斥,读读互斥; 换成ReentrantReadWriteLock,这玩意读读不互斥,但是读写互斥; 最后换成CopyOnWriteList,这玩意读读不会互斥,读写也不会互斥; MVCC差不多类似于Copy