MysqL中的约束

本文介绍了Mysql中的五种常见约束:非空约束、唯一约束、主键约束、外键约束和检查约束,并详细阐述了外键约束的应用场景及其实现方式。

Mysql常用五类约束:
not null:非空约束,指定某列不为空
unique: 唯一约束,指定某列和几列组合的数据不能重复
primary key:主键约束,指定某列的数据不能重复、唯一
foreign key:外键,指定该列记录属于主表中的一条记录,参照另一条数据
check:检查,指定一个表达式,用于检验指定数据
其中 外键约束只有InnoDB引擎支持。
外键 约束两张表的关系
出现数据冗余问题
把字段数据出现比较高冗余的字段 单独放到一张表中
员工表当中 部门 信息 这个时候时候就可以吧部门信息单独设计一张表
主表:约束别人的表被称为主表
副表 被别人约束的表被称为附表
一般情况下 外键约束在附表当中
举例来说建立一张员工表 emp并且插入数据:

    CREATE  TABLE emp(
   id  INT  PRIMARY KEY,
    empname VARCHAR(20), -- 员工姓名
    deptname VARCHAR(20) -- 员工部门编号
    );

数据如图
建立一张部门表并且插入数据:

CREATE TABLE depart(
	id INT  PRIMARY KEY AUTO_INCREMENT ,
	depart_name VARCHAR(20)
	)DEFAULT CHARSET = utf8;

插入的数字
期初在没有 外键约束的条件下我们可以看出 删除副表某一部门id 并不会影响,主表中的员工的所在的部门id;
这是实际不符和 员工坐在的部门都已经不存在了,主表中员工的部门id需要做出调整。
这是我们就需要添加外键约束来实现

### MySQL 中的约束类型及其使用方法 #### 主键 (Primary Key) 主键用于唯一标识表中的每一行记录。它允许有重复值或 NULL 值。可以通过 `PRIMARY KEY` 关键字定义主键。 - 创建时设置主键: ```sql CREATE TABLE content ( id INT(10) PRIMARY KEY, first_name VARCHAR(20), last_name VARCHAR(20) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; ``` - 删除主键约束: ```sql ALTER TABLE content DROP PRIMARY KEY; ``` 删除主键后,非空约束仍然保留[^3]。 --- #### 外键 (Foreign Key) 外键用于建立两个表之间的关系,通常用来维护参照完整性。通过 `FOREIGN KEY` 定义外键。 - 设置外键: ```sql ALTER TABLE child_table ADD CONSTRAINT fk_parent_child FOREIGN KEY (parent_id) REFERENCES parent_table(id); ``` - 删除外键: ```sql ALTER TABLE child_table DROP FOREIGN KEY fk_parent_child; ``` 需要注意的是,外键的存在可以防止非法数据被插入到子表中[^2]。 --- #### 唯一性约束 (Unique Constraint) 唯一性约束确保某列或多列组合的数据在整个表中具有唯一性。允许有一个 NULL 值。 - 创建时设置唯一约束: ```sql CREATE TABLE content ( id INT(10) PRIMARY KEY, first_name VARCHAR(20) UNIQUE, last_name VARCHAR(20) ); ``` - 创建后添加唯一约束: ```sql ALTER TABLE content ADD CONSTRAINT unique_last_name UNIQUE (last_name); ``` - 删除唯一约束: ```sql ALTER TABLE content DROP INDEX unique_last_name; ``` 唯一性约束的作用类似于主键,但它允许多个字段联合形成唯一的约束条件[^1]。 --- #### 检查约束 (Check Constraint) 检查约束用于限制某一列能够接受的值范围。虽然 MySQL 支持语法声明 CHECK 约束,但在较早版本中并未实际生效。自 MySQL 8.0 开始支持真正的 CHECK 约束功能。 - 添加检查约束: ```sql CREATE TABLE product ( price DECIMAL(10, 2), quantity INT CHECK (quantity >= 0) ); ``` 此语句确保 `quantity` 列只接受大于等于零的整数[^4]。 --- #### 默认值约束 (Default Constraint) 默认值约束为未显式赋值的列提供一个预设值。 - 设置默认值: ```sql CREATE TABLE user_info ( username VARCHAR(50), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` 当向 `user_info` 表插入新记录而未指定 `created_at` 的值时,默认会采用当前时间戳作为其值。 --- #### 自增列 (Auto Increment Column) 自增列是一种特殊的属性,主要用于为主键生成连续递增的数值。注意,自增列能与非空约束同时使用,因为它本身已经隐含了非空特性。 - 使用自增列: ```sql CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) ); ``` 如果尝试手动插入符合序列逻辑的值,则可能会引发错误;但如果完全依赖于数据库引擎来填充这些值,则会出现问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值