跟数字有关的mysql基础-1

  1. 数据库3大范式是什么

数据库三大范式是为了确保数据库结构的合理性和高效性,主要包括:

  1. 第一范式:确保每个单元格只有一个值,避免数据冗余。

  1. 第二范式:非主键列必须依赖于主键,避免数据更新异常和冗余。

  1. 第三范式:非主键列之间不能有依赖关系,避免数据冗余。

这些规范化概念的引入,可以使数据库的设计更加规范化,并确保数据的准确性、一致性和高效性。

附:

单元格是指数据库表格中的一个交叉点,它位于行和列的交叉处,用来存储一个数据项。在关系型数据库中,一个表通常由若干行和若干列组成,每个单元格就是这些行和列的交叉点,用来存储该行和该列的交叉处所对应的数据。

例如,在一个学生信息表中,每个单元格可能表示一个学生的某个属性,比如姓名、年龄、性别、学号等。

单元格是数据库表格中最小的数据存储单位,它也是数据处理的最基本单位。在进行数据库设计和管理时,需要对每个单元格进行明确定义,以保证表格中数据的准确性和一致性。

  1. 事务的4大特性介绍一下

  1. 原子性:事务要么全部执行成功,要么全部失败回滚。

  1. 一致性:事务执行前后,数据库的数据应该保持一致性状态。例:关系型数据库中的外键约束,插入或更新操作必须满足外键约束,否则会导致数据不一致。

  1. 隔离性:多个事务之间应该相互隔离,每个事务应该感知不到其他事务的存在和操作。

  1. 持久性:事务提交后,其所做的修改操作应该被永久保存到数据库中。

简称为:ACID

A- Atomicity(原子性):事务是一个不可分割的“原子”,也就是说,事务要么全部完成,要么全部不完成,没有中间状态。

C- Consistency(一致性):事务执行的结果必须是数据库从一个一致性状态到另一个一致性状态。事务执行过程中出现的任何错误都必须回滚到事务开始前的状态。

I- Isolation(隔离性):多个事务执行时,每个事务之间都是相互隔离的,不会相互干扰。

D- Durability(持久性):完成事务后,数据必须被持久化到数据库,即使系统崩溃或断电,也不能丢失。

  1. 常用的事务隔离级别有4种

事务隔离级别分为四种:读未提交、读已提交、可重复读、序列化

事务隔离级别是数据库管理系统用来控制并发访问的机制。它定义了多个并发事务之间的隔离程度。

  1. 读未提交(Read Uncommitted):该级别允许一个事务读取另一个事务尚未提交的数据。这个级别最容易产生脏读、幻读等问题。

  1. 读已提交(Read Committed):该级别允许一个事务只能读取另一个事务已经提交的数据。这个级别可以避免脏读问题,但可能出现幻读问题。

  1. 可重复读(Repeatable Read):该级别保证一个事务多次读取同一数据时,其结果始终一致。这样可以避免脏读和幻读问题,但可能会出现不可重复读问题。

  1. 序列化(Serializable):该级别是最高的隔离级别,它通过对数据进行加锁来避免并发问题。所有事务按照次序逐个执行,避免了所有并发问题,但是会大大降低数据库的性能。

隔离级别从低到高依次增强了事务之间的隔离程度,但同时也带来了性能的下降。所以需要根据具体的业务场景和性能需求选择适当的隔离级别。

  1. 数据库事务并发控制时可能遇到的4种问题

  1. 脏读:指一个事务读取了另一个事务未提交的修改数据,当另一个事务回滚时,读取的数据就是无效的,造成的后果非常严重,破坏了数据的一致性。

  1. 幻读:指在同一个事务中,同一查询在不同的时间会返回不同的结果数量。例如,在一个事务中,第一次执行 SELECT 语句查询符合条件的行数时,结果是2行,但是在接下来的操作中,另一个事务插入了符合同样查询条件的第三行数据,当这个事务再次执行该 SELECT 语句时,结果是3行,这就是幻读。

  1. 可重复读:指一个事务在多次执行同样的查询时,结果总是一致的。如果另一个事务在该事务查询期间修改了数据,该事务不会读取到这个修改结果。

  1. 不可重复读:指一个事务多次读取同一数据,但是在这个过程中,其他事务修改了这个数据,导致每次查询返回的结果不一样。

这些问题产生的主要原因是事务隔离级别不当或者事务并发控制不严格,因此在进行并发访问时需要选择合适的隔离级别来避免这些问题的出现。

精简一下:

脏读是指一个事务读取了另一个事务未提交的数据;幻读是指同一查询在不同的时间会返回不同的结果数量;可重复读是指对同样的数据多次读取的结果总是一致的;不可重复读是指多次读取同一数据,但在这个过程中其他事务修改了数据导致每次查询结果不一样。这些问题的主要原因是事务隔离级别不当或者并发控制不严格,需要选择合适的隔离级别来避免这些问题。

  1. 2种拆分方式

在数据库中,常见的拆分方式有水平拆分和垂直拆分两种。

  1. 水平拆分(Sharding):把大表按行拆分为多个小表,每个小表可以存储部分数据,从而降低单个数据库的存储压力和查询压力。

  1. 垂直拆分(Vertical Partitioning):将大表按业务功能或列拆分为多个小表,从而降低单个表的行数,提高查询效率。

  1. 混合拆分:结合前两种方法,既按行数拆分,也按列数拆分,从而实现更加灵活的数据拆分和管理。

  1. 动态拆分:根据负载均衡等策略,通过动态地创建和删除数据库或表,实现数据的动态拆分和管理,从而更好地适应变化的数据量和访问量。

  1. 跨库查询:将多个数据库的数据通过联合查询等方式,实现对多个数据源的同时查询,从而更好地满足业务需求。

每种拆分方式都有其优缺点和适用场景,具体的选择需要根据实际情况进行评估和决策。

水平和垂直拆分都可以用于分库和分表。

水平拆分是将一个大的表或数据库水平划分成多个小的表或数据库,以减轻单个表或数据库的存储和查询压力。在分库、分表中使用水平拆分,可以将数据按照一定的规则拆分到不同的数据库或表中,每个数据库或表只包含部分数据。

垂直拆分是将一个大的表或数据库按照列或业务功能划分成多个小的表或数据库,以减少单个表或数据库的冗余和复杂度。在分库、分表中使用垂直拆分,可以将长的数据表垂直拆分成多个短的数据表,每个表只包含部分列,或将一个大的应用拆分成多个小的相对独立的应用,减小单个应用的规模和复杂度。

因此,在实际应用中,根据具体情况,可以采用水平拆分、垂直拆分或两者结合的方式,来实现大规模数据的存储和管理。

猜你喜欢

转载自blog.csdn.net/samsung_samsung/article/details/129749223
今日推荐