MySQL命令大全(三)----约束

约束【非常重要*****】

1、什么是约束

约束对应的英语单词是:constraint

在创建表的时候,我们可以给表中的字段加上一些约束,来保证这个表中数据的完整性、有效性!!

约束的作用就是为了保证:表中的数据有效!!

2、约束包括哪些?

非空约束:not null
唯一性约束:unique
主键约束:primary key(简称PK)
外键约束:foreign key (简称FK)
检查约束:check (MySQL不支持,oracle支持)

3、非空约束:not null

非空约束的字段插入数据时不能为NULL,否则报错!
not null只有列级约束

语法格式:直接在字段后边加
	如:create table table_name(
			id,int,
			name varchar(32) not null 
		);

4、唯一性约束:unique

唯一性约束unique约束的字段不能重复,但是可以为NULL!

5、两个字段联合唯一

语法格式:
	create table table_name(
		id int,
		name varchar(255),
		email varchar(255),
		unique(name,email)  // 表示name加上email具有唯一性,这种约束被称为表级约束,多个字段需要联合添加某一个约束时,使用表级约束。约束直接添加到列后面的,叫做列级约束。
	);

unique和not null 联合使用

create table table_name(
	id int,
	name varchar(32) not null unique
);

注意:在MySQL当中,如果一个字段同事呗not null和unique约束的话,该字段自动变成主键(oracle中不一样!)

6、主键约束(primary key,简称PK)–> 非常重要

主键约束的相关术语:
主键约束:就是一种约束
主键字段:该字段上添加了主键约束,这样的字段,叫做主键字段
主键值:主键字段中的每一个值都叫做:主键值!

什么是主键?有什么用?
主键值是每一行记录的唯一标识
主键值是每一行记录的身份证号!!!

任何一张表都应该有主键,没有主键,表无效!!
主键特征:not null + unique(主键值不能是null,同时也不能重复!)

语法格式:
一个字段做主键,叫做单一主键
	create table tavbe_name(
		id int primary key,
		name varchar(32)
	);
或者用表级约束添加主键
	create table table_name(
		id int,
		name varchar(32),
		primary key(id)
	);

多个字段联合起来做主键:复合主键!!

create table table_name(
		id int,
		name varchar(32),
		email varchar(255),
		primary key(id,name)
	);

但是在实际开发中不建议使用复合主键,建议使用单一主键!
因为主键存在的意义就是这行记录的身份证号,主要意义达到即可,单一主键可以做到。复合主键比较复杂,不建议使用!!
一张表,主键约束只能添加一个(但可以是复合主键)

主键值建议使用的数据类型:
int
bigint
char
等类型
不建议使用:varchar来做主键,因为主键一般都是数字,一般都是定长的!

主键除了单一主键和复合主键之外,还分为:
自然主键:主键值是一个自然数,和业务没关系。
业务主键:主键值和业务紧密关联,例如拿银行卡账号做主键值,这就是业务主键!

在实际开发中自然主键使用比较多,因为主键只要做到不重复就行,不需要有意义。
业务主键不好,因为主键一旦和业务挂钩,那么当业务发生变动的时候,可能会影响到主键值,所以业务主键不建议使用,尽量使用自然主键。

auto_increment:自然增长(从1开始,以1递增)

在MySQL当中,有一种机制,可以帮助我们自动维护一个主键值

语法格式:
	create table table_name(
		id int primary key auto_increment,
		name varchar(32)
	);

insert into table_name(name) values('zhangsan');
insert into table_name(name) values('zhangsan');
insert into table_name(name) values('zhangsan');
insert into table_name(name) values('zhangsan');
insert into table_name(name) values('zhangsan');
insert into table_name(name) values('zhangsan');
insert into table_name(name) values('zhangsan');
insert into table_name(name) values('zhangsan');

在这里插入图片描述

7、外键约束(foreign key,简称FK)–> 非常重要

外键约束的相关术语:
外键约束:就是一种约束
外键字段:该字段上添加了外键约束,这样的字段,叫做主键字段
外键值:外键字段中的每一个值都叫做:外键值!

当两张表需要关联,但没有任何约束的时候,可能会导致数据无效,所以为了保证字段中的值有效,需要给字段添加外键约束。

语法格式:
	create table t_class(
		classnum int primary key,
		classname varchar(255)
	);
	create table t_student(
		id int primary key auto_increment,
		name varchar(32),
		cnum int,
		foreign key(cnum) referencecs t_class(classnum)
		// t_student表的cnum字段外键引用t_class表的classnum字段
	);

注意:
被外键约束的表是子表,另一个是父表
删除表的顺序:
先删子,再删父。
创建表的顺序:
先创建父,再创建子。
删除数据的顺序:
先删子,再删父。
插入数据的顺序:
先插入父,再插入子。

思考:
子表中的外键引用父表中的某个字段,被引用的这个字段必须是主键吗?
答:不一定是主键,但至少要具有唯一性(unique约束)。

外键可以为NULL吗?
答:外键值可以为NULL。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值