DBMS中的约束指的是对关系数据库中数据的限制条件。约束可以保证数据的完整性和一致性,当违反约束时抛出异常并拒绝对数据库进行某些操作。
常见的约束包括:
- 主键约束:每个表中只能有一个主键,它必须是唯一的、非空的,并且可以用来唯一标识一行数据。主键可以确保数据的唯一性和一致性,同时也能提高查询的效率。
例如,在一个存储学生信息的表格中,我们可以将学生的学号设置为主键。这样在插入新的学生信息时,如果学号已经存在,会被拒绝;在查询学生信息时,可以通过学号快速定位对应的学生记录。
- 外键约束:外键指的是一个表中的字段,它引用另一个表的主键。外键约束可以确保数据之间的关联和一致性,当试图插入不符合外键约束的数据时,DBMS会拒绝这个操作,并将异常抛出。
例如,在一个存储课程信息的表格中,我们可以设置课程的教师字段引用一个存储教师信息的表格的主键。这样在插入新的课程信息时,必须保证教师信息已经存在,否则会被拒绝;在查询某个教师的所有课程时,可以通过外键快速定位到相应的课程记录。
- 唯一约束:唯一约束要求一个表中的某个字段的值是唯一的,不允许重复。该约束可以保证数据的唯一性和一致性,但是与主键的不同之处在于,它允许字段为空。
例如,在一个存储学生信息的表格中,我们可以将学生的身份证号设置为唯一约束。这样在插入新的学生信息时,如果身份证号已经存在,会被拒绝;在查询某个学生信息时,可以通过身份证号快速定位到相应的学生记录。
- 检查约束:检查约束要求一个表中的某个字段必须符合一定的条件,否则会被拒绝。这些条件可以是范围、数据类型、格式等等。
例如,在一个存储学生成绩信息的表格中,我们可以设置成绩字段必须在0到100之间。这样在插入新的成绩信息时,如果成绩不符合条件,会被拒绝;在查询某个学生的成绩时,可以保证成绩的合法性。
以上是DBMS中常见的约束,当然在具体的实际使用中还会有其他的约束。
下面给出一个实例说明:
考虑一个学生选课系统,包含如下表格:
学生表格(Student):
id | name | sex | age |
---|---|---|---|
001 | 张三 | 男 | 20 |
002 | 李四 | 男 | 22 |
003 | 王五 | 女 | 21 |
课程表格(Course):
id | name | teacher |
---|---|---|
101 | 数据结构 | 陈老师 |
102 | 算法导论 | 张老师 |
103 | 计算机组成原理 | 李老师 |
选课表格(Selection):
id | student_id | course_id | score |
---|---|---|---|
1 | 001 | 102 | 90 |
2 | 002 | 101 | 85 |
3 | 003 | 101 | 75 |
我们可以对这三个表格分别设置如下约束:
- 学生表格添加主键约束
ALTER TABLE Student ADD CONSTRAINT pk_student_id PRIMARY KEY (id);
这样在插入新的学生信息时,如果学号已经存在会被拒绝,保证了学生信息的唯一性和一致性。
- 课程表格添加主键约束
ALTER TABLE Course ADD CONSTRAINT pk_course_id PRIMARY KEY (id);
这样在插入新的课程信息时,如果课程编号已经存在,会被拒绝,保证了课程信息的唯一性和一致性。
- 选课表格添加主键约束
ALTER TABLE Selection ADD CONSTRAINT pk_selection_id PRIMARY KEY (id);
这样在插入新的选课信息时,如果选课编号已经存在,会被拒绝,保证了选课信息的唯一性和一致性。
- 选课表格添加外键约束
ALTER TABLE Selection ADD CONSTRAINT fk_student_id FOREIGN KEY (student_id) REFERENCES Student(id);
ALTER TABLE Selection ADD CONSTRAINT fk_course_id FOREIGN KEY (course_id) REFERENCES Course(id);
这样在插入新的选课信息时,必须保证学生编号和课程编号已经存在,否则会被拒绝。这样保证了选课信息之间的关联和一致性。
- 选课表格添加检查约束
ALTER TABLE Selection ADD CONSTRAINT chk_score CHECK (score >= 0 AND score <= 100);
这样在插入选课信息时,如果成绩不在0到100之间,会被拒绝。这样保证了选课信息的合法性。