第六课:MySQL 数据库约束(Constraints)
学习目标
在本课中,我们将学习数据库的约束(Constraints)系统,这些规则用于限制存储在数据库表中的数据类型。掌握约束对于维护数据的完整性、一致性和准确性至关重要。我们将重点了解以下内容:
- 不同类型的约束及其用途。
- 如何在创建或修改表时应用这些约束。
- 约束如何影响数据插入、更新和删除。
学习内容
1. 约束的基本概念
数据库约束是应用于数据库表上的规则,它们可以是:
NOT NULL :指定列不能存储 NULL 值。UNIQUE :保证列中的所有值都是不同的。PRIMARY KEY :独特标识数据库表中的每一行。FOREIGN KEY :保证一个表中的数据与另一个表的数据相关联。CHECK :确保列中的值满足指定的条件。DEFAULT :为列指定默认值。
2. 实现约束
NOT NULL 约束
- 语法示例:
CREATE TABLE Students ( StudentID int NOT NULL, StudentName varchar(255) NOT NULL, RegistrationDate date NOT NULL );
- 描述:确保创建记录时必须提供
StudentID 、StudentName 和RegistrationDate 的值。
UNIQUE 约束
- 语法示例:
CREATE TABLE Students ( StudentID int NOT NULL, StudentEmail varchar(255) UNIQUE );
- 描述:保证所有学生的电子邮件地址都是独一无二的。
PRIMARY KEY 约束
- 语法示例:
CREATE TABLE Students ( StudentID int NOT NULL, StudentName varchar(255), PRIMARY KEY (StudentID) );
- 描述:
StudentID 是表的主键,用于唯一标识表中的每一行。
FOREIGN KEY 约束
- 语法示例:
CREATE TABLE Enrollment ( EnrollmentID int, StudentID int, FOREIGN KEY (StudentID) REFERENCES Students(StudentID) );
- 描述:
StudentID 是Enrollment 表的外键,它引用Students 表的StudentID 。
CHECK 约束
- 语法示例:
CREATE TABLE Products ( ProductID int NOT NULL, ProductName varchar(255) NOT NULL, Price decimal NOT NULL CHECK (Price >= 0) );
- 描述:
CHECK 约束确保所有产品的价格都不会小于0。
DEFAULT 约束
- 语法示例:
CREATE TABLE Students ( StudentID int NOT NULL, StudentName varchar(255) NOT NULL, RegistrationDate date DEFAULT CURRENT_DATE );
- 描述:如果在创建记录时没有提供
RegistrationDate ,它将默认为当前日期。
3. 约束的应用和影响
- 当尝试插入或更新数据时,如果违反了约束条件,数据库系统将拒绝该操作并返回错误。
- 约束有助于保护数据,防止无效或不一致的信息进入数据库。
- 约束在数据库设计中非常重要,因为它们确保了数据的准确性和可靠性。
课后练习
- 创建带约束的表:创建一个名为
Courses 的表,它具有课程编号(CourseID ,主键)、课程名称(CourseName ,不为空且唯一)和课程简介(Description ,默认值为’No description provided’)。
CREATE TABLE Courses ( CourseID int NOT NULL, CourseName varchar(255) NOT NULL UNIQUE, Description text DEFAULT 'No description provided', PRIMARY KEY (CourseID) );
- 更新表添加外键约束:给一个已经存在的
Enrollment 表,将CourseID 字段设置为Courses 表的外键。
ALTER TABLE Enrollment ADD FOREIGN KEY (CourseID) REFERENCES Courses(CourseID);
- 使用
CHECK 约束强制限制:创建一个名为Exams 的表,它包含考试分数(Score ),并确保分数在0到100之间。
CREATE TABLE Exams ( ExamID int NOT NULL PRIMARY KEY, Score int CHECK (Score >= 0 AND Score <= 100) );
- 插入数据时考虑约束:向
Courses 表中添加一些课程,确保数据符合约束的要求。
INSERT INTO Courses (CourseID, CourseName, Description) VALUES (1, 'Introduction to Databases', 'A course on database fundamentals.');
- 违反约束的处理:尝试插入或更新数据,使其违反上述表中的某个约束,并观察系统如何响应。
-- 这将失败,因为它违反了`CourseName`的`UNIQUE`约束 INSERT INTO Courses (CourseID, CourseName) VALUES (2, 'Introduction to Databases');
通过本课的学习和实践,你应该对如何在MySQL中创建和管理约束有了深入的理解,并能够利用约束来保护数据的完整性。在设计数据库和表时应当仔细考虑哪些约束适用,并确保所有的数据操作都符合这些规则。
第七课:MySQL 高级查询技巧