Mysql数据库基础05-约束

约束的作用:用于确保数据库的数据满足特定的商业规则。

mysql中的常见的约束,包括以下5种:

  • primary key(主键)
  • not null(非空)
  • unique(唯一)
  • foreign key(外键)
  • check(检查)

下面分别单独介绍一下。

1. primary key(主键)

作用:用于唯一的标识表行的数据,当一个列定义成主键约束后,那么该列的值不能重复。

主键又分为复合(联合)主键和非复合(联合)主键,一般建表时都会设置主键。

(1)非复合主键格式:

`列名` 数据类型 primary key

eg,新建一个 person_info 表,并设置 id 列为主键约束。

CREATE TABLE `person_info`
(
`id` INT PRIMARY KEY,
`name` VARCHAR(22),
`email` VARCHAR(32)
);

那么,在对上面这个表,进行重复插入具有相同 id 值的数据时,会报错,原因就是违反了主键约束。

(2)复合主键格式:

CREATE TABLE `表名`
(
`列名1` 数据类型1,
`列名2` 数据类型2,
`列名3` 数据类型3,
PRIMARY KEY(`列名1`,`列名2`...)
);

eg,新建一个 student_info 表,并设置 id 列与 name 列为复合主键约束。

CREATE TABLE `student_info`
(
`id` INT,
`name` VARCHAR(22),
`email` VARCHAR(32),
 PRIMARY KEY(`id`,`name`)
);

向上面这张表插入数据,只有当 idname两列的值都相同时,才被认为是重复的数据,不允许插入;仅是id 值或者 name值相同,不被认为是重复数据,可以插入。

注意要点:

  1. 被设置成主键的列,其值不能重复,也不能为null
  2. 一张表最多只能有一个主键,也可以做成复合主键
2. not null(非空)

作用:定义为非空的列,在插入数据时,必须提供数据,不允许空数据入库。

格式:

`列名` 数据类型 NOT NULL
3. unique(唯一)

作用:定义为唯一约束的列,在插入数据时,该列值不能重复。

格式:

`列名` 数据类型 UNIQUE

eg,创建一个有唯一约束的表。

CREATE TABLE `teacher_info`
(
`id` INT UNIQUE,
`name` VARCHAR(22),
`email` VARCHAR(32)
);

注意要点:

  1. 如果指定为 unique 的列,没有指定成 not null,那么这一列可以插入多个 null 值。
  2. 一张表可以有多个 unique 字段。
  3. unique not null一起组合用,效果和直接用 primary key 类似。
4. foreign key(外键)

作用:用于定义主表和从表之间的关系。

外键约束定义在从表的列上,主表相对应的列必须具有主键约束或者unique约束。

当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为null。

格式:

FOREIGN KEY(`要做外键的从表列名`) REFERENCES `主表名`(`主表相对应列名`) 

eg,创建 student 表和 class 表,前者为从表,后者作为主表,根据班级编号设置外键。

-- 创建主表
CREATE TABLE `class`
(
`id` INT PRIMARY KEY,
`name` VARCHAR(22) NOT NULL DEFAULT
);

-- 创建从表
CREATE TABLE `student`
(
`stu_id` INT PRIMARY KEY,
`name` VARCHAR(22) NOT NULL DEFAULT,
`class_id` INT,
FOREIGN KEY (`class_id`) REFERENCES `class`(`id`)-- 设置外键
);

注意要点:

  1. 外键指向的表的字段,要求是 primary key 或者是 unique
  2. 表的存储引擎是 innodb ,这样的表才支持外键。
  3. 外键字段的数据类型要和主表对应字段的数据类型一致(长度可以不同)。
  4. 外键字段的值,必须在主表对应字段中出现过,或者为 null (前提:外键字段允许为 null )。
  5. 一旦建立外键关系,数据不能随意删除。
5. check(检查)

作用:用于强制行数据必须满足的条件。

假设在 id 列上定义了 check 约束,并要求 id 列的值在100500之间,如果值不在100500之间,就会提示出错。

当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为null。

格式:

`列名` 数据类型 CHECK (检查条件)

eg,创建 student 表,并对 id列增加 check 约束。

CREATE TABLE `student`
(
`id` INT PRIMARY KEY CHECK(`id` > 100 AND `id` < 500),
`name` VARCHAR(22) NOT NULL DEFAULT,
`class_id` INT
);

注意要点:

  • check约束,在mysql5.7及以前的版本支持但不生效,oracle、sql server均支持且生效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值