作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO
联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬
学习必须往深处挖,挖的越深,基础越扎实!
阶段1、深入多线程
阶段2、深入多线程设计模式
阶段3、深入juc源码解析
码哥源码部分
码哥讲源码-原理源码篇【2024年最新大厂关于线程池使用的场景题】
码哥讲源码-原理源码篇【揭秘join方法的唤醒本质上决定于jvm的底层析构函数】
码哥源码-原理源码篇【Doug Lea为什么要将成员变量赋值给局部变量后再操作?】
码哥讲源码【谁再说Spring不支持多线程事务,你给我抽他!】
打脸系列【020-3小时讲解MESI协议和volatile之间的关系,那些将x86下的验证结果当作最终结果的水货们请闭嘴】
数据库基础知识
数据库的三范式是什么?
- 第一范式(1NF):表中的每个列都必须包含原子值,这意味着每个列中的数据不能再分解为更小的数据单元。这可以确保每个数据单元都是不可再分的。
- 第二范式(2NF):在满足第一范式的基础上,还要确保表中的非主键列都完全依赖于表的候选键(即,没有部分依赖)。这意味着非主键列不能依赖于候选键的一部分,它们必须与整个候选键相关。
- 第三范式(3NF):在满足第二范式的基础上,还要确保表中的非主键列之间没有传递依赖关系。这意味着非主键列不能相互依赖,而应该直接依赖于主键或其他候选键。
遵循三范式有助于减少数据冗余,提高数据的一致性和完整性,使数据库更容易维护和更新。然而,有时根据具体的应用需求,可能需要违反一些范式来优化性能或满足特殊要求。因此,在数据库设计中,需要权衡范式的遵守和应用的实际需求。
事务的基本要素 ACID
原子性(Atomicity):原子性确保事务是不可分割的单元,要么全部执行成功,要么全部失败。如果事务的任何部分失败,整个事务都会被回滚到初始状态,以确保数据库不会处于部分完成的状态。
一致性(Consistency):一致性要求事务在执行前后必须保持数据库的一致性。这意味着事务应该将数据库从一个一致的状态转换到另一个一致的状态,不会破坏数据库的完整性约束。如果事务违反了一致性规则,它将被回滚。
隔离性(Isolation):隔离性确保同时执行多个事务时,每个事务都是相互隔离的,不会相互干扰。这意味着一个事务的操作对其他事务是不可见的,直到该事务提交。这可以防止并发执行事务时发生不一致的情况。
持久性(Durability):持久性确保一旦事务提交,其结果将被永久保存在数据库中,即使系统崩溃或重新启动也不会丢失。这通常通过将事务的更改记录到持久存储(例如磁盘)来实现。
drop、delete 与 truncate 区别?
drop:
- 功能:DROP 用于删除整个数据库对象,可以是表、视图、索引、存储过程等。
- 影响:DROP 删除的对象以及对象中包含的所有数据都会被永久删除,无法恢复。这是一个非常危险的操作,需要谨慎使用。
delete:
- 功能:DELETE 用于删除表中的数据行,可以根据特定的条件选择要删除的数据。
- 影响:DELETE 只删除符合条件的数据行,而不删除表本身。删除的数据可以使用事务日志进行恢复,但通常需要较大的系统开销。
truncate:
-
功能:TRUNCATE 用于删除表中的所有数据,但保留表的结构以及有关表的信息(例如,列的定义、索引等)。
-
影响:TRUNCATE 操作通常比 DELETE 更快,因为它不会逐行删除数据,而是直接截断表的数据。删除的数据无法使用事务日志进行恢复,但 TRUNCATE 操作通常会释放存储空间并重置表的自增计数器(如果有的话)。
-
使用 DROP 来删除整个数据库对象,包括数据和定义。
-
使用 DELETE 来删除特定条件下的数据行,但保留表的定义。
-
使用 TRUNCATE 来删除表中的所有数据,但保留表的定义。 TRUNCATE 通常比 DELETE 更快,但不能用于删