04.常见约束

1. 常见约束

  1. 描述:一种限制,用于限制表中的数据,保证数据的一致性
  2. 分类:
    • not null:非空约束,用于保证字段值不能为空
    • default:默认约束,用于保证字段值有默认值
    • check:检查约束,用于保证字段的取值范围,mysql不支持
    • unique:唯一约束,用于保证字段值唯一性,允许存在一个null
    • primary key:主键约束,用于保证字段的唯一性和非空性
    • foreign key:外键约束,用于保证字段值来自主表字段值
  3. 列级约束:六大约束都支持,但外键约束无效果
  4. 表级约束:除了非空约束和默认约束不支持,其他都支持

2. 创建数据表时添加约束

2.1 添加列级约束

# 语法
字段名称 字段类型(长度) 约束类型;

# 实例
CREATE TABLE `student`(
	`pk_id`	INT PRIMARY KEY,
	`uk_name` VARCHAR(20) UNIQUE,
	`sex` CHAR(1) CHECK(sex='男' OR sex='女'),
	`address` VARCHAR(50) NOT NULL,
	`phone` VARCHAR(20) DEFAULT '15971196612',
	`fk_majorId` INT REFERENCES major(id)
);

2.2 添加表级约束

  • 命名:fk_从表名称_主表名称
  • 外键:
    • 要求在从表设置外键关系
    • 从表的外键字段类型和主表的关联字段类型要求一致或兼容,名称无要求
    • 主表的关联字段必须是一个key(一般是主键或唯一键)
    • 插入数据时,应该先插入主表记录后插入从表记录,删除数据时,应该先删除从表记录后删除主表记录
# 语法
[CONSTRAINT 约束名称] 约束类型(约束字段);

# 实例
CREATE TABLE `student`(
	`pk_id` INT,
	`uk_name` VARCHAR(20),
	`sex` CHAR(1),
	`majorId` INT,
	CONSTRAINT pk_id PRIMARY KEY(`pk_id`),
	CONSTRAINT uk_name UNIQUE(`uk_name`),
	CONSTRAINT ck_sex CHECK(`sex`='男' OR `sex`='女'),
	CONSTRAINT fk_student_user FOREIGN KEY(`majorId`) REFERENCES `user`(`pk_id`)
);

3. 修改数据表时添加约束

3.1 添加列级约束

# 语法
ALTER TABLE 数据表名称 MODIFY 字段名 字段类型(长度) 新约束类型;

# 实例
ALTER TABLE `student` MODIFY `uk_name` VARCHAR(20) NOT NULL;

3.2 删除列级约束

# 语法
ALTER TABLE 数据表名称 MODIFY 字段名 字段类型(长度);

# 实例
ALTER TABLE `student` MODIFY `uk_name` VARCHAR(20);

3.3 添加表级约束

# 语法
ALTER TABLE 数据表名称 ADD [CONSTRAINT 约束名称] 约束类型(字段名);

# 实例
ALTER TABLE `student` ADD CONSTRAINT `fk_student_user` FOREIGN KEY(`majorId`);

3.4 删除表级约束

# 语法
ALTER TABLE 数据表名称 DROP 约束类型 约束名称;

# 实例1
ALTER TABLE `student` DROP PRIMARY KEY;

# 实例2
ALTER TABLE `student` DROP INDEX uk_name;

# 实例3
ALTER TABLE `student` DROP FOREIGN KEY fk_student_user;

4. 标识列

  • 描述:自增长列,可以不用手动插入值,系统提供默认序列值。(计数器原理)
  • 特点:
    • 标识列必须是一个key(主键、唯一键)
    • 标识列最多只能有一个
    • 标识列类型必须是数值型
    • 通过SET auto_increment_increment = 3设置系统标识列步长
  • 实例:pk_id INT PRIMARY KEY AUTO_INCREMENT

猜你喜欢

转载自blog.csdn.net/qq_43625140/article/details/107498598