关键词搜索

源码搜索 ×
×

【MySQL约束】数据管理实用指南

发布2023-05-01浏览2067次

详情内容

1、数据库约束的认识

数据库约束的概念:数据库的约束是关系型数据库的一个重要的功能,它提供了一种“校验数据”合法性的机制,能够保证数据的“完整性”、“准确性”和“正确性”

数据库的约束:

  • not null:不能存储 null 值

  • unique:保证某列的每行必须有唯一值

  • default:规定没有给列赋值时的默认值

  • primary key:主键,相当于 not null 和 unique 的结合,每条记录的身份标识

  • aoto_increment:自动添加主键值,也可以手动添加

  • foreign key:外键,多个表的关联关系,要求某个记录必须在另外一个表里存在

2、not null 约束

创建一个student表,表中有两列,分别是: id 类型为 int 约束为 not null,name 类型为varchar 最大存储 20 字符

  1. -- 如果已有student表,请先删除,因为同一个库里面不能存在相同名的表
  2. create table student(id int not null,name varchar(20));

id 的约束为not null,说明 id 列不能为空

  1. desc student;
  2. +-------+-------------+------+-----+---------+-------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +-------+-------------+------+-----+---------+-------+
  5. | id | int(11) | NO | | NULL | |
  6. | name | varchar(20) | YES | | NULL | |
  7. +-------+-------------+------+-----+---------+-------+

查看student表的结构也就可以发现 id 行 Null 列为 NO,也就说明 id 列不能为 NULL

3、unique 约束

创建一个student表,表中有两列,分别是: id 类型为 int 约束为 unique,name 类型为varchar 最大存储 20 字符

  1. -- 如果已有student表,请先删除,因为同一个库里面不能存在相同名的表
  2. create table student(id int unique,name varchar(20));

id 的约束为 unique ,必须是唯一的、不能重复

  1. desc student;
  2. +-------+-------------+------+-----+---------+-------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +-------+-------------+------+-----+---------+-------+
  5. | id | int(11) | YES | UNI | NULL | |
  6. | name | varchar(20) | YES | | NULL | |
  7. +-------+-------------+------+-----+---------+-------+

查看student表的结构也就可以发现 id 行 key 列的为 UNI,也就说明 id 必须唯一不能重复

4、default 约束

创建一个student表,表中有两列,分别是: id 类型为 int ,name 类型为varchar 最大存储 20 字符约束为 default

  1. -- 如果已有student表,请先删除,因为同一个库里面不能存在相同名的表
  2. create table student(id int,name varchar(20) default 'unkown');

name 的约束为 default ,当不给 name 添加内容的时候,默认为 unkown

  1. desc student;
  2. +-------+-------------+------+-----+---------+-------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +-------+-------------+------+-----+---------+-------+
  5. | id | int(11) | YES | | NULL | |
  6. | name | varchar(20) | YES | | unkown | |
  7. +-------+-------------+------+-----+---------+-------+

查看student表的结构也就可以发现 name 行 Default 列的为 unkown,也就说明当不给 name 添加内容的时候默认为 unkown

5、primary key 约束

创建一个student表,表中有两列,分别是: id 类型为 int 约束为 primary ,name 类型为varchar 最大存储 20 字符

  1. -- 如果已有student表,请先删除,因为同一个库里面不能存在相同名的表
  2. create table student(id int primary key,name varchar(20));

id 的约束为 primary key,说明id为主键,主键就相当于 not null 和 unique 的结合,不能为空、不能重复

  1. desc student;
  2. +-------+-------------+------+-----+---------+-------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +-------+-------------+------+-----+---------+-------+
  5. | id | int(11) | NO | PRI | NULL | |
  6. | name | varchar(20) | YES | | NULL | |
  7. +-------+-------------+------+-----+---------+-------+
  8. 2 rows in set (0.00 sec)

查看student 表的结构也就可以发现 id 行 Null 列为 NO,id 行 Key 列为 PRI,说明 id 不能为空、不能重复

当我们创建 student 表的时候,将 id 设置为 not null 和 unique 的时候,也就等于 primary key

  1. -- 如果已有student表,请先删除,因为同一个库里面不能存在相同名的表
  2. create table student(id int not null unique,name varchar(20));
  1. desc student;
  2. +-------+-------------+------+-----+---------+-------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +-------+-------------+------+-----+---------+-------+
  5. | id | int(11) | NO | PRI | NULL | |
  6. | name | varchar(20) | YES | | NULL | |
  7. +-------+-------------+------+-----+---------+-------+

当把 id 的约束设置为 not null 和 unique 的时候,查看student 表结构的时候,发现跟约束为primary key的结构一样

6、auto_increment 约束

对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大 值+1

create table student(id int primary key auto_increment,name varchar(20));
  1. desc student;
  2. +-------+-------------+------+-----+---------+----------------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +-------+-------------+------+-----+---------+----------------+
  5. | id | int(11) | NO | PRI | NULL | auto_increment |
  6. | name | varchar(20) | YES | | NULL | |
  7. +-------+-------------+------+-----+---------+----------------+

当把 id 的约束设置为 primary key 和 auto_increment 的时候,不给 id 添加内容时默认是最大值+1

当我们光给这个表中的name列添加内容时

create table student(id int primary key auto_increment,name varchar(20));
  1. select * from student;
  2. +----+------+
  3. | id | name |
  4. +----+------+
  5. | 1 | 张三 |
  6. | 2 | 李四 |
  7. +----+------+

id 列会默认添加值,且是最大值+1

7、foreign key 约束

外键用于关联其他表的主键和唯一值,让两个表之间产生约束,语法:

foreign key (字段名) references 主表(列)

先创建一个class班级表:

create table class(id int primary key auto_increment,className varchar(20));

class 表中有两个列,分别为:

  • id 列,类型为 int,约束为 primary key 和 auto increment

  • className 列,类型为 varchar 最多存储 20字符

先创建一个 student 学生表:

  1. create table student(id int primary key auto_increment,
  2. classId int ,
  3. name varchar(20),
  4. foreign key (classId) references class (id));

student 表中有三个列,分别为:

  • id 列,类型为 int,约束为 primary key 和 auto increment

  • classId 列,类型为 int

  • name 列,类型为 varchar 最多存储 20字符

  • classId为外键与class表中的id 产生约束

学生表中的数据,要依赖班级表的数据,班级表的数据要对学生表产生约束力

此处起到约束作用的班级表,就叫做“父表”;被约束的这个表,就叫做“子表”

给class表添加一些内容:

insert into class (className) values('Java'),('C'),('python');

给student表添加一些内容:

insert into student (classId,name) values(1,'张三'),(1,'李四'),(2,'王五'),(3,'赵六');

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载