【技术实战】Java开发岗位的八股文积累【一】
  QsxxYt1SkqTc 2023年11月01日 50 0

数据库的三大范式

数据库的三大范式是指关系数据库设计中的三个规范化级别,用于确保数据库的数据结构合理、高效和无冗余。这三个范式分别是第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。

  1. 第一范式(1NF): 第一范式要求数据库中的每个属性都是原子的,即不可再分。换句话说,每个属性的值都应该是单一的,不可再分解为更小的部分。这样可以避免数据冗余和数据更新异常。例如,一个学生表中的姓名属性应该是一个单一的值,而不是一个包含姓和名的复合值。

  2. 第二范式(2NF): 第二范式要求数据库中的每个非主属性完全依赖于主键。换句话说,每个非主属性都应该与主键直接相关,而不是间接相关。这样可以避免数据冗余和数据更新异常。例如,一个订单表中的订单总额属性应该与订单号直接相关,而不是与订单中的其他属性相关。

  3. 第三范式(3NF): 第三范式要求数据库中的每个非主属性不依赖于其他非主属性。换句话说,每个非主属性都应该与主键直接相关,而不是与其他非主属性相关。这样可以进一步避免数据冗余和数据更新异常。例如,一个员工表中的员工工资属性应该与员工号直接相关,而不是与员工的职位属性相关。

需要注意的是,范式化设计可以提高数据库的数据结构合理性和查询效率,但有时也会导致数据的冗余和复杂的查询操作。因此,在实际应用中,需要根据具体情况权衡范式化设计和性能需求。

2NF和3NF的区别和联系

2NF(第二范式)和3NF(第三范式)都是关系数据库设计中的规范化级别,用于消除数据冗余和提高数据结构的合理性。它们之间的区别和联系如下:

区别:

  1. 2NF要求非主属性完全依赖于主键,而3NF要求非主属性不依赖于其他非主属性。换句话说,2NF只要求非主属性与主键直接相关,而3NF进一步要求非主属性与其他非主属性无关。

  2. 2NF消除了部分依赖,即一个非主属性依赖于主键的一部分,而3NF消除了传递依赖,即一个非主属性依赖于其他非主属性。

联系:

  1. 3NF是在2NF的基础上进一步规范化的,即3NF包含了2NF的要求。因此,如果一个关系表符合3NF的要求,那么它一定也符合2NF的要求。

  2. 2NF和3NF都是为了消除数据冗余和提高数据结构的合理性。它们都可以通过将非主属性分离到单独的表中,并使用主键和外键来建立关联关系,来达到这个目的。

  3. 2NF和3NF的设计都可以提高数据库的查询效率和数据更新的一致性。通过将数据分解为更小的表,可以减少数据的冗余和重复,提高查询的性能。同时,通过建立关联关系,可以确保数据的一致性和完整性。

需要注意的是,范式化设计可以提高数据库的数据结构合理性和查询效率,但有时也会导致数据的冗余和复杂的查询操作。因此,在实际应用中,需要根据具体情况权衡范式化设计和性能需求。

Mysql中事务的四大特性?

MySQL中事务的四大特性是ACID,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。

  1. 原子性(Atomicity): 原子性指的是事务是一个不可分割的操作单元,要么全部执行成功,要么全部回滚到事务开始前的状态。如果事务中的任何一部分操作失败,整个事务将被回滚,所有修改都将被撤销,数据库将回到事务开始前的状态。

  2. 一致性(Consistency): 一致性指的是事务执行前后,数据库的状态应该保持一致。事务的执行不应该破坏数据库的完整性约束,如主键约束、外键约束等。如果事务执行成功,数据库应该处于一致的状态。

  3. 隔离性(Isolation): 隔离性指的是并发执行的事务之间应该相互隔离,互不干扰。每个事务应该感觉不到其他事务的存在,就好像它是唯一在执行的事务一样。隔离性可以防止并发执行的事务之间产生不一致的结果。

  4. 持久性(Durability): 持久性指的是一旦事务提交成功,其所做的修改将永久保存在数据库中,即使发生系统故障或重启,修改的数据也不会丢失。持久性通过将事务的修改写入磁盘上的日志文件来实现。

这四个特性保证了事务的可靠性和一致性。MySQL通过使用事务日志和锁机制来实现这些特性。开发人员可以使用事务来确保数据库操作的完整性和一致性,尤其在需要执行多个操作并保持数据一致性的情况下非常有用。

事务隔离级别有哪些?

MySQL事务隔离级别是指在并发执行的多个事务之间,数据库管理系统如何处理事务之间的相互影响和冲突。MySQL提供了四个事务隔离级别,分别是读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。

  1. 读未提交(Read Uncommitted): 在该隔离级别下,一个事务可以读取到其他事务尚未提交的数据。这意味着一个事务可能会读取到脏数据,即其他事务修改但尚未提交的数据。这种隔离级别的优点是并发性高,但缺点是数据的一致性无法保证。

  2. 读已提交(Read Committed): 在该隔离级别下,一个事务只能读取到其他事务已经提交的数据。这意味着一个事务不会读取到脏数据,但可能会读取到不可重复读和幻读的数据。不可重复读指的是在同一个事务中,多次读取同一行数据时,得到的结果可能不一致。幻读指的是在同一个事务中,多次执行同一个查询时,得到的结果集可能不一致。

  3. 可重复读(Repeatable Read): 在该隔离级别下,一个事务在执行期间多次读取同一行数据时,得到的结果是一致的。这意味着一个事务不会遇到不可重复读的问题,但可能会遇到幻读的问题。为了实现可重复读,MySQL使用了多版本并发控制(MVCC)机制。

  4. 串行化(Serializable): 在该隔离级别下,所有事务按照顺序依次执行,相当于每个事务都是串行执行的。这样可以避免脏读、不可重复读和幻读的问题,但并发性非常低,可能导致性能下降。

开发人员可以根据具体的业务需求选择合适的事务隔离级别。默认情况下,MySQL使用的是可重复读隔离级别。可以使用SET TRANSACTION语句来设置事务隔离级别,例如:SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  UlqlDcBcT5AP   2024年03月27日   65   0   0 求职面试
  EC73qDgVNYjz   2024年02月19日   88   0   0 求职面试
  J4vSKoNEfLUp   2024年02月19日   106   0   0 求职面试
  5w1LZATMid06   2024年01月20日   26   0   0 求职面试
  p34aGTFhPbbA   2024年02月19日   141   0   0 求职面试
  tAaiqedz71Vf   2024年02月19日   181   0   0 求职面试
QsxxYt1SkqTc