这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战
1、乐观锁、悲观锁
悲观锁,每次拿数据都会上锁,这样其他人想要拿到这个数据就会被阻塞挂起。传统的关系型数据库大都用到了这种锁,行锁,表锁,读锁,列锁等等。
乐观锁,拿数据时不会上锁,但是更新时判断在此期间有没有人更新过这个数据,读操作多时常用乐观锁,能够有效提高吞吐量。
2、事务并发
脏读,事务A读取了事务B更新的数据,然后B回滚,则A读取的时脏数据。
不可重复读,事务A多次读取同一数据,事务B在事务A多次读取过程中,更新数据并提交,导致事务A先后两次读取到的数据结果不一致。
幻读,欢度解决了不可重复读,保证了在同一事物中里,查询的结果哦都是事务开始时的状态,保证了一致性。
3、数据库的三范式
第一范式,保证原子性,所有字段都是不可再分的原子值。
第二范式,确保表中每列都和主键相关,
第三范式,数据库表中的每一列数据都和主键直接相关,而不是间接相关。
4、内连接、外连接、交叉连接和笛卡尔积
内连接:只连接匹配的行
左外连接:包含左边表的全部行以即右边表中全部匹配的行
右外连接:包含右边表的全部行以及左边表中全部匹配的行
全外连接:包含左、右两个表的全部行,不管另外一边表中是否存在与他们相匹配的行
交叉连接:生成笛卡尔积-他不是用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另外一个数据源的每个行一一匹配。
5、
count(*):对行的数目进行计算,包含null
count(1):和count(*)一样
count(colum):对特定的列的值具有的行数进行计算,不包含null值