5月24日数据库学习笔记

一、数据库约束概述
数据库约束是用于限制表中数据的规则,它可以保证数据的完整性和一致性,确保数据符合业务逻辑要求。常见的数据库约束有主键约束、外键约束、唯一约束、非空约束、检查约束和默认约束。
二、常见约束类型及详细说明
(一)主键约束(PRIMARY KEY)
定义
主键是用于唯一标识表中每一行记录的字段或字段组合,它能确保数据表中每一行数据的唯一性,一个表只能有一个主键。
例如,在学生信息表中,学号可以作为主键,因为每个学生的学号是唯一的。
作用
保证数据的唯一性和完整性,通过主键可以快速定位表中的某一条记录,提高数据查询和操作的效率。
创建方法
创建表时定义主键
示例:CREATE TABLE student (
s_id INT PRIMARY KEY,
s_name VARCHAR(50),
s_age INT
);
为已存在的表添加主键
示例:ALTER TABLE student ADD PRIMARY KEY (s_id);
注意事项
主键字段的值不能重复且不能为 NULL。
一个表只能有一个主键,但主键可以由多个字段组成(联合主键)。
(二)外键约束(FOREIGN KEY)
定义
外键用于在一个表中引用另一个表中的主键,建立两个表之间的关联关系,从而实现数据的引用完整性。
例如,成绩表中的学号字段可以作为外键,引用学生信息表中的学号主键。
作用
维护数据的引用完整性,确保在子表中引用父表中存在的数据,防止出现孤立的记录,避免数据不一致的情况。
创建方法
创建表时定义外键
示例:
CREATE TABLE score (
s_id INT,
course_name VARCHAR(50),
score INT,
FOREIGN KEY (s_id) REFERENCES student(s_id)
);
为已存在的表添加外键
示例:ALTER TABLE score ADD FOREIGN KEY (s_id) REFERENCES student(s_id);
注意事项
外键字段的值可以为 NULL(表示没有关联的记录),但必须是引用表中存在的值或者为 NULL。
删除父表中的记录时,需要注意外键约束的影响,可以通过设置外键的级联操作(如 ON DELETE CASCADE)来处理相关子表记录。
(三)唯一约束(UNIQUE)
定义
唯一约束用于确保表中的某个字段或字段组合中的数据值是唯一的,但允许有 NULL 值。
例如,学生信息表中的学生身份证号可以设置为唯一约束,因为每个学生的身份证号是唯一的。
作用
保证数据的唯一性,与主键约束类似,但在唯一约束的字段中可以有多个 NULL 值(主键约束不允许 NULL 值)。
创建方法
创建表时定义唯一约束
示例:CREATE TABLE student (
s_id INT PRIMARY KEY,
s_name VARCHAR(50),
id_card VARCHAR(18) UNIQUE
);
为已存在的表添加唯一约束
示例:ALTER TABLE student ADD UNIQUE (id_card);
注意事项
一个表可以有多个唯一约束字段。
唯一约束可以通过唯一索引来实现,保证字段的唯一性。
(四)非空约束(NOT NULL)
定义
非空约束用于限制字段的值不能为空,即在插入或更新记录时,必须为该字段提供值。
例如,学生信息表中的姓名字段可以设置为非空约束,因为每个学生都必须有姓名。
作用
确保字段在数据表中必须有值,避免出现关键信息缺失的情况,保证数据的完整性。
创建方法
创建表时定义非空约束
示例:CREATE TABLE student (
s_id INT PRIMARY KEY,
s_name VARCHAR(50) NOT NULL,
s_age INT
);
为已存在的表修改字段为非空约束
示例:ALTER TABLE student MODIFY s_name VARCHAR(50) NOT NULL;
注意事项
对于已经存在的表,如果要将某个字段设置为非空约束,必须确保该字段中已经存在的记录都有值,否则会报错。
可以通过默认约束(DEFAULT)来为非空字段提供默认值,方便数据的插入。
(五)检查约束(CHECK)
定义
检查约束用于限制字段的取值范围,确保字段中的值满足指定的条件或逻辑规则。
例如,在学生信息表中的年龄字段可以设置检查约束,限制年龄在 0 到 100 之间。
作用
根据业务规则对数据进行验证,保证数据的合理性和正确性,避免不符合要求的数据进入数据库。
创建方法
创建表时定义检查约束
示例:CREATE TABLE student (
s_id INT PRIMARY KEY,
s_name VARCHAR(50) NOT NULL,
s_age INT CHECK (s_age >= 0 AND s_age <= 100)
);
为已存在的表添加检查约束(不同数据库语法可能略有不同,以 MySQL 为例,它不支持直接添加 CHECK 约束,但在其他数据库如 SQL Server 中可以使用 ALTER TABLE 语句添加)
示例(SQL Server):ALTER TABLE student ADD CONSTRAINT chk_age CHECK (s_age >= 0 AND s_age <= 100);
注意事项
在某些数据库系统中(如 MySQL)对 CHECK 约束的支持有限,可能不会严格按照 CHECK 条件进行数据验证,因此在使用时需注意数据库的特性。
检查约束的条件表达式应尽量简单明确,避免过于复杂的逻辑,以免影响性能和可维护性。
(六)默认约束(DEFAULT)
定义
默认约束用于为字段指定一个默认值,当插入记录时如果没有为该字段提供值,则自动使用默认值。
例如,在学生信息表中的注册时间字段可以设置默认值为当前时间。
作用
方便数据的插入,减少不必要的数据输入,同时保证字段在没有提供值时也有合理的默认数据,维护数据的完整性。
创建方法
创建表时定义默认约束
示例:CREATE TABLE student (
s_id INT PRIMARY KEY,
s_name VARCHAR(50) NOT NULL,
registration_date DATETIME DEFAULT CURRENT_TIMESTAMP
);
为已存在的表添加默认约束
示例:ALTER TABLE student ALTER COLUMN registration_date DATETIME DEFAULT CURRENT_TIMESTAMP;

posted @ 2025-05-24 23:50  头发少的文不识  阅读(39)  评论(0)    收藏  举报