首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
11.1 索引概述
11.1.1 MySQL索引概述
11.1.2 MySQL索引分类
11.2 创建索引
11.2.1 在建立数据表时创建索引
11.2.2 在已建立的数据表中创建索引
11.2.3 修改数据表结构以为数据表添加索引
11.3 删除索引
12.1 视图概述
12.1.1 视图的概念
12.1.2 视图的作用
12.2 创建视图
12.2.1 查看创建视图的权限
12.2.2 创建视图
12.2.3 创建视图的注意事项
12.3 视图操作
12.3.1 查看视图
12.3.2 修改视图
12.3.3 更新视图
12.3.4 删除视图
第13章 数据完整性约束
13.1 定义完整性约束
13.1.1 实体完整性
13.1.2 参照完整性
13.1.3 用户定义完整性
13.2 命名完整性约束
13.3 更新完整性约束
13.3.1 删除完整性约束
13.3.2 修改完整性约束
第14章 存储过程与存储函数
14.1 创建存储过程和存储函数
14.1.1 创建存储过程
14.1.2 创建存储函数
14.1.3 变量的应用
14.1.4 光标的应用
14.2 调用存储过程和存储函数
14.2.1 调用存储过程
14.2.2 调用存储函数
14.3 查看存储过程和存储函数
14.3.1 SHOW STATUS语句
14.3.2 SHOW CREATE语句
14.4 修改存储过程和存储函数
14.5 删除存储过程和存储函数
15.1 MySQL触发器
15.1.1 创建MySQL触发器
15.1.2 创建具有多条执行语句的触发器
15.2 查看触发器
15.2.1 SHOW TRIGGERS语句
15.2.2 查看triggers表中触发器信息
15.3 使用触发器
15.3.1 触发器的执行顺序
15.3.2 使用触发器维护冗余数据
15.4 删除触发器
第16章 事务
16.1 事务机制
16.1.1 事务的概念
16.1.2 事务机制的必要性
16.1.3 关闭MySQL自动提交
16.1.4 事务回滚
16.1.5 事务提交
16.1.6 MySQL中的事务
16.1.7 回退点
16.2 锁机制
16.2.1 MySQL锁机制的基本知识
16.2.2 MyISAM表的表级锁
16.2.3 InnoDB表的行级锁
16.2.4 死锁的概念与避免
16.3 事务的隔离级别
16.3.1 事务的隔离级别与并发问题
16.3.2 设置事务的隔离级别
当前位置:
首页>>
技术小册>>
MySQL从入门到精通(四)
小册名称:MySQL从入门到精通(四)
### 13.1.1 实体完整性 在数据库管理系统中,数据完整性是确保数据库数据准确性和可靠性的关键机制之一。MySQL作为广泛使用的关系型数据库管理系统,自然也提供了多种数据完整性约束来维护数据的正确性和一致性。实体完整性(Entity Integrity)是其中最基本也是最重要的一种约束,它确保了数据库表中每一行数据(即每一个实体)的唯一性和标识性。 #### 13.1.1.1 实体完整性的定义 实体完整性主要关注于表中的主键(Primary Key)约束。主键是表中的一列或列组合,用于唯一标识表中的每一行数据。它必须满足两个条件:唯一性(Unique)和非空性(Not Null)。唯一性意味着表中的每一行在主键列上的值都是唯一的,没有两行可以拥有相同的主键值。非空性则要求主键列在插入新记录时不能留空,必须为每一行数据提供一个明确的标识符。 #### 13.1.1.2 主键的作用 1. **唯一标识**:主键为表中的每一行提供了一个独一无二的标识符,使得我们能够准确地定位和访问数据库中的特定数据行。 2. **关系基础**:在关系型数据库中,表与表之间通过外键(Foreign Key)建立联系,而外键必须参照另一表的主键。因此,主键是实现表间关联和数据完整性的基础。 3. **查询优化**:数据库管理系统可以利用主键来优化查询性能,因为主键通常会被自动创建索引,加速数据的检索速度。 4. **数据完整性保障**:通过确保主键的唯一性和非空性,实体完整性约束有助于防止数据重复和缺失,从而维护数据库的完整性和准确性。 #### 13.1.1.3 设置主键 在MySQL中,设置主键可以通过在创建表时指定列为主键,或者在表创建后添加主键约束来实现。 ##### 创建表时指定主键 ```sql CREATE TABLE Employees ( EmployeeID INT AUTO_INCREMENT, FirstName VARCHAR(50), LastName VARCHAR(50), Email VARCHAR(100), PRIMARY KEY (EmployeeID) ); ``` 在这个例子中,`EmployeeID`列被设置为主键,同时使用了`AUTO_INCREMENT`属性来自动为新记录生成唯一的ID值。 ##### 在现有表中添加主键 如果表已经存在且尚未设置主键,可以通过`ALTER TABLE`语句来添加。 ```sql ALTER TABLE Employees ADD PRIMARY KEY (EmployeeID); ``` 注意,如果尝试将包含重复值或非空值缺失的列设为主键,MySQL将报错,因为这会违反实体完整性的要求。 #### 13.1.1.4 复合主键 在某些情况下,单个列可能不足以唯一标识表中的每一行,此时可以使用复合主键,即两个或多个列的组合来作为主键。 ```sql CREATE TABLE Orders ( OrderID INT, ProductID INT, Quantity INT, OrderDate DATE, PRIMARY KEY (OrderID, ProductID) ); ``` 在这个例子中,`OrderID`和`ProductID`的组合构成了复合主键,确保了即使在同一个订单中,每个产品的订购记录也是唯一的。 #### 13.1.1.5 实体完整性与数据操作 实体完整性约束在数据插入、更新和删除操作中起着至关重要的作用。 - **插入操作**:当尝试向表中插入新记录时,如果违反了主键的唯一性约束(例如,尝试插入一个已存在的`EmployeeID`),MySQL将拒绝该操作并返回错误。 - **更新操作**:更新操作同样受到实体完整性的限制。如果更新操作试图将主键列的值更改为一个已存在的值,或者将主键列更新为空(如果主键列被设置为`NOT NULL`),则操作将被拒绝。 - **删除操作**:虽然删除操作本身不直接受实体完整性约束的影响,但删除包含外键引用的主键行时,需要特别注意,因为这可能违反参照完整性(Referential Integrity),即外键约束要求子表中的外键值在父表中必须存在。 #### 13.1.1.6 实体完整性的重要性 实体完整性是数据库设计中不可或缺的一部分,它确保了数据的唯一性和准确性,为数据查询、更新和删除操作提供了可靠的基础。通过严格遵守实体完整性约束,可以显著降低数据冗余、不一致和错误的风险,提高数据库的整体质量和效率。 #### 13.1.1.7 实践建议 - **合理设计主键**:在选择主键时,应考虑到其唯一性、稳定性和效率。对于大多数情况,使用自增的整数ID作为主键是一个简单且高效的选择。 - **避免使用业务逻辑数据作为主键**:尽管在某些情况下,业务逻辑数据(如身份证号、邮箱地址等)看似可以作为主键,但这样做可能会带来潜在的问题,如数据变更、格式不一致等。 - **利用复合主键解决复杂需求**:当单个列无法唯一标识行时,考虑使用复合主键。但要注意,复合主键可能会增加查询和索引的复杂性。 - **定期审查和维护主键**:随着数据库应用的发展,可能需要重新评估和调整主键的设计。例如,当发现主键设计不合理或影响性能时,应考虑进行优化或重构。 综上所述,实体完整性是MySQL数据库设计中至关重要的一环。通过合理设置和维护主键约束,可以确保数据库数据的唯一性、准确性和可靠性,为数据库应用的稳定运行提供有力保障。
上一篇:
13.1 定义完整性约束
下一篇:
13.1.2 参照完整性
该分类下的相关小册推荐:
MySQL 实战 45 讲
MySQL从入门到精通(一)
MySQL从入门到精通(二)
MySQL从入门到精通(五)
MySQL8.0入门与实践
MySQL必会核心问题
细说MySQL(零基础到高级应用)
SQL零基础到熟练应用(增删改查)
MySQL从入门到精通(三)