MySQL表约束详解:非空、默认、主键、唯一与外键

需积分: 5 0 下载量 170 浏览量 更新于2024-08-03 收藏 2.2MB PPTX 举报
"MySQL表约束是数据库设计中非常重要的一个概念,它用于确保数据的完整性和一致性。约束可以分为列级约束和表级约束,这两种类型的约束在MySQL中都有不同的应用和限制。以下是对各类型约束的详细说明: 1. **非空约束(NOT NULL)**: 非空约束用于指定某个字段的值不能为空。这在存储关键信息如姓名、身份证号等时非常有用,因为这些数据通常是不允许缺失的。例如: ```sql CREATE TABLE students ( id INT NOT NULL # 不为空 ); ``` 2. **默认约束(DEFAULT)**: 默认约束允许为字段设置一个默认值,当插入新记录时,如果未提供该字段的值,系统会自动使用默认值。这在记录创建时间或某些可选信息时很有用。例如: ```sql CREATE TABLE students ( id INT NOT NULL, date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP # 创建时的默认时间戳 ); ``` 3. **主键约束(PRIMARY KEY)**: 主键约束确保一个表中某个字段的值是唯一的,并且不允许为空。主键常用于标识表中的唯一记录,如学号、员工ID等。例如: ```sql CREATE TABLE students ( id INT PRIMARY KEY # 主键 ); ``` 4. **唯一约束(UNIQUE)**: 唯一约束确保字段的值在整个表中是唯一的,但可以为空。例如,座位号可能为空,但一旦分配则必须唯一。创建唯一约束如下: ```sql CREATE TABLE students ( seat_id VARCHAR(10) UNIQUE # 可为空的唯一座位号 ); ``` 5. **外键约束(FOREIGN KEY)**: 外键约束用于建立两个表之间的关系,通常用于实现参照完整性。虽然MySQL支持外键约束,但在某些模式下可能不起作用。例如,外键用于连接学生表和课程表,表示学生所属的课程: ```sql CREATE TABLE students ( id INT PRIMARY KEY, course_id INT, FOREIGN KEY (course_id) REFERENCES courses(id) ); ``` 但请注意,外键约束在某些MySQL配置下可能需要启用`innodb引擎`并正确设置`foreign_key_checks`。 6. **检查约束(CHECK)**: 检查约束允许定义字段值的特定条件。在MySQL中,虽然语法上支持`CHECK`,但实际上并不执行检查,因此主要用于其他数据库系统,如PostgreSQL。 在实际应用中,通过结合使用这些约束,可以确保数据库中的数据质量和一致性。例如,创建一个包含学生姓名、性别和出生日期的表,可以这样定义: ```sql CREATE TABLE students ( id INT PRIMARY KEY, name VARCHAR(100) NOT NULL, gender CHAR(1) CHECK (gender IN ('M', 'F')), birth_date DATE NOT NULL ); ``` 这个例子中,`name`字段不能为空,`gender`字段只能是'M'或'F',`birth_date`字段同样不能为空。这样的约束设计有助于防止错误数据的录入,保持数据的整洁和可靠。