5.约束

一 约束概述

约束(constraint):在创建表的时候,给表中的字段加上一些约束,来保证表中数据的完整性、有效性!

作用:保证表中数据的有效!

分类

列级约束:创建表时添加在列后面的约束。

表级约束:创建表时添加在最后面的约束。(联合多个字段的约束

约束 列级约束 表级约束
非空约束 not null
唯一性约束 unique unique(xx,xx,..)
主键约束 primary key(简称PK) primary key(xx)
外键约束 foreign key(字段1) references 表名(字段2)
默认约束 default  
检查约束 check(mysql不支持,oracle支持)  

二 非空约束 - not null

非空约束(not null):被约束的字段不能为null

用法:创建表时,在字段和数据类型后面加not null关键字。

 -- 示例代码
 create table tb(
     id int,
     name varchar(20) not null   # 表示name字段不能为null
 );

 

三 唯一性约束 - unique

唯一性约束(unique):约束的字段具有唯一性不能重复(但是可以为NULL,且多个NULL不算重复)

用法:创建表时,在字段和数据类型后面加unique关键字。

 -- 示例代码
 create table tb(    
     id int unique,  # 表示id字段具有唯一性(列级约束)
     name varchar(20) not null
 );

 

多个字段联合唯一性约束

用法:在创建表时,加入unique函数:unique(字段1,字段2,...)

此时的联合多个字段的约束,称为表级约束

 create table tb(
     id int,
     name varchar(20) not null,
     unique(id,name) -- id和name两个字段联合具有唯一性(表级约束)
 );
 ​
 #此时(1,'jack')和(2,'jerry')两条数据可以共存

注意:两个字段联合具有唯一性 和 两个字段分别具有唯一性 不同。

 

四 主键约束 - Primary Key (重要)

 

1. 相关概念:

  • 主键约束:一种约束。主键值不能是NULL,同时也不能重复!

  • 主键字段:添加了主键约束的字段。

  • 主键值:主键字段上的值。

 

2. 什么是主键?

主键值是每一行记录的唯一标识。(相当于身份证号)

 

3. 注意:任何一张表都必须有主键!且只能有一个主键

 

4. 主键的特征

主键值不能是NULL,同时也不能重复!(相当于not null + unique)

 

5.主键的分类

  • 单一主键、联合主键

  • 自然主键(相当于身份证号)、业务主键(相当于在某个产品中的会员号,如银行卡号)

 

5. 单一主键(列级)

 create table tb(
     id int primary key,
     name varchr(20),
 );

 

6. 复合主键:多个字段联合起来添加主键约束。(表级)

 create table tb(
     id int,
     name varchar(20),
     primary key(id,name)    -- id和name两个字段联合起来做主键
 );

使用表级主键约束会给指定字段设置默认值,而列级主键不会。

实际开发中,不建议使用复合主键。

 

7.主键值的数据类型一般都使用数字,或者定长字符串

 

8. 使用自增的方式自动维护主键 - auto_increment

 create table tb(
     id int primary key auto_increment,  -- 主键值自增
     name varchar(20)
 );

auto_increment:从1自增,每次自增1 。

 

五 外键约束 - Foreign Key(重要)

外键约束(Foreign Key):用于维护表之间的关系,如果表中的某个字段是外键字段,那么该外键字段的值必须来源于参照表的字段

同时,当前表和参照表就有了父子关系,参照表为父表,当前表为子表。

 foreign key(字段名1) references 表名(字段名);

 

  1. 相关术语

    • 外键约束:一种约束。

    • 外键字段:添加了外键约束的字段。

    • 外键值::外键字段中的值。

  2. 参照表的字段必须要具有唯一性(不一定是主键)

  3. 外键值可以为NULL

  4. 当前表和参照表具有父子关系之后:先创建父,再创建子;先删子,再删父。

  5. 参考示例

 drop table if exists t_stu;
 drop table if exists t_clas;
 ​
 create table t_clas(
     classno int primary key,
     class varchar(30)
 );
 ​
 create table t_stu(
     id int primary key auto_increment,
     name varchar(20),
     cno int,
     foreign key(cno) references t_clas(classno)
 );
 ​
 insert into t_clas(classno,c) values(1904,'HAUT-zdh-1904'),(1905,'HAUT-zdh-1905');
 ​
 insert into t_stu(name,cno) values('jack',1905),('jerry',1904);
 ​
 -- 试图添加外键之外的值,报错
 insert into t_stu(name,cno) values('yh',1901);

 

 

 

 

 

 

 

执行SQL脚本文件

source 路径\xxx.sql;

一般用于初始化数据库

posted @ 2022-03-21 23:36  MadMe  阅读(94)  评论(0)    收藏  举报