五、约束

MySQL学习

五、约束(Constraint)

1.定义

​ 在创建表的时候,可以给表的字段添加相应的约束,添加约束的目的是为了保证表中数据的合法性、有效性、完整性。

​ 常见约束有:

​ ①非空约束(not null):约束的字段不能为NULL

​ ②唯一约束(unique):约束的字段不能重复

​ ③主键约束(primary key):约束的字段既不能为NULL也不能重复(简称PK)

​ ④外键约束(foreign key):(简称FK)

​ ⑤检查约束(check):Oracle数据库有check约束,但MySQL没有。


2. 非空约束 not null
drop table if exists t_user;

create table t_user(

		id int,

		username varchar(255) not null,

		password varchar(255)

				);

// 语句不能执行,缺少非空约束 username,会报错
insert into t_user(id,password) values (1,'123'); 

insert into t_user(id,username,password) values (1,'meimei',123');

​ 非空约束只能加到字段后面,只有列级约束。


3. 唯一约束 unique

​ 唯一约束修饰的字段具有唯一性,不能重复,但可以为NULL(NULL不是值,两个NULL不能画等号,即可以有多个NULL的情况)。

​ 唯一约束添加的位置和非空约束添加的位置相同。

​ 案例:给某一列添加unique :

create table t_user(

		id int,

		username varchar(255) unique, 

		password varchar(255)

			);

​ 案例:给两个列或者多个列添加unique:

create table t_user(

		id int,

		usercode varchar(255),

		username varchar(255),

		unique(usercode username) 

			);

create table t_user(

		id int,

		usercode varchar(255) unique,

		username varchar(255) unique 

		);

​ unique在列后面添加:列级约束

​ unique在所有声明完之后添加:表级约束(多个字段联合约束用表级约束)


4. 主键约束 primary key
4.1 给一张表添加主键约束:添加在字段后面即可
drop table if exists t_user;

create table t_user (

		id int primary key, 

		username varchar(255),

		email varchar(255)

		);

insert into t_user (id,username,email) values (1,'zhangsan','zs@123.com');

insert into t_user (id,username,email) values (2,'lisi','ls@123.com');

insert into t_user (id,username,email) values (3,'wangwu','ww@123.com');

​ 根据以上的测试得出:id是主键,因为添加了主键约束,主键字段中的数据不能为NULL,也不能重复。

​ 主键的特点:不能为NULL,也不能重复。

4.2 主键相关的术语

主键约束就是:primary key

主键字段:带有主键约束的字段

主键值:主键字段插入的值

4.3 主键的作用

​ 表的设计三范式有要求,第一范式就要求任何一张表都应该有主键。

​ 主键的作用是:添加主键的这行是记录在这张表当中的唯一标识。(类似于人的身份证号码)

4.4 主键的分类

​ 根据主键字段的数量来划分:单一主键(推荐的,常用的)和复合主键(多个字段联合添加一个主键约束,复合主键不建议使用,因为复合主键违背三范式)。

​ 根据主键的性质来划分:自然主键(主键最好就是和业务没有关系的自然数,例如编号id)和业务主键(主键值和系统的业务挂钩,例如:拿银行卡的卡号做主键、拿身份证号码做主键,不推荐用)。最好不要拿和业务挂钩的字段作为主键,因为以后一旦业务发生变化,主键值可能也需要随着变化,但有时主键是没法变化的,因为变化就会导致主键值重复。

🔺一张表只能有一个主键约束。

4.5 使用表级约束的方式定义主键
drop table if exists t_user;

create table t_user (

   	 	id int, 

		username varchar(255),

		primary key(id) 

			);
4.6 MySQL提供主键值自增(★非常重要★)
drop table if exists t_user;

create table t_user (

		id int primary key auto_increment, 

		username varchar(255),

		email varchar(255)

		);

​ 往表里insert数据的时候id不赋值也会自动增加。(主键值起到一个标识的作用即可,不需要有任何的含义)


5. 外键约束 foreign key
5.1 外键约束的相关术语

​ 外键约束:foreign key

​ 外键字段:添加有外键约束的字段

​ 外键值:外键字段中的每一个值

5.2 外键约束的定义

​ 案例背景:两张表,一张学生表,一张班级表,班级表中记录班级信息。t_student称为子表,t_class称为父表,子表中的一项classno(fk)必须是父表对应cno(pk)这一列的内容。

​ 顺序要求:删表的时候要先删子,再删父,创建表或者添加数据时应先父表,再子表。

drop table if exists t_student;

drop table if exists t_class;

create table t_class(

		cno int,

		cname varchar(255),

		primary key(cno)

		);

create table t_student(

		sno int,

		sname varchar(255),

		classno int,

    	foreign key(classno) references t_class(cno)

		);

insert into t_class values(101,'xxxxxxx');

insert into t_class values(102,'yyyyyyy');


insert into t_student values (1,'zs',101);

insert into t_student values (2,'1s',101);

insert into t_student values (3'ww',102);


select * from t_class;

select * from t_student;

​ 外键值可以为NULL。

​ 子表的外键连到主表的字段,主表的那个字段不一定为主键,但起码具有唯一性(unique约束),但一般情况下都是引用主键。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值