1.Innodb
支持事务,支持外键,支持行级锁即操作时只锁一行,不锁其他行,对高并发好,也支持表级锁,使用的是聚簇索引
那么InnoDB什么时候使用行级锁,什么时候使用表级锁呢
看别人说的有索引的时候是行级锁没有索引的时候是表级锁
2.MyIASM
不支持事务,不支持外键,支持表级锁,不支持行级锁,非聚簇索引
那么外键到底是什么呢?
比如学号是一个表的主键,然后在另一个表中也有学号这个列,那么第二个表中的学号就是第一个表的外键,或者也可以成学号就是第二个表的外键
保证数据的一致性和完整性
为什么保证呢?
你插入表2学号字段的值必需要求在表1的学号字段能找到,(找不到就不能插入呗,删除也一样呗)其中表二中的学号是外键,学号是表一的主键
同一时候。假设你要删除表1的某个学号字段。必须保证表2中没有引用该字段值的列,否则就没法删除。
行级锁 分两种
1.共享锁
所有事务只能对其进行读操作而不能进行写操作,而且可能会造成死锁。
一个事务对其加上了共享锁,那么别的事务只能再加共享锁而不能加排它锁,直到在其上面的共享锁被释放。
因为你两个事务同时进行读操作,而此时两者又都想进行修改的操作,两者都在等待对方释放共享锁,进而造成死锁
SELECT
idFROM table WHERE id in(1,2) LOCK IN SHARE MODE
2.排它锁
加上排它锁,只能这个事务对其进行读写操作,在此事务结束之前,其他事务不能对其进行加任何锁,其他进程可以读取,不能进行写操作,需等待其释放。
SELECT
idFROM mk_user WHERE id=1 FOR UPDATE
表级锁
表级锁也分为共享锁和排它锁