mysql约束

一、基本介绍

约束用于确保数据库的数据满足特定的商业规则。
在 mysql 中,约束包括:not null(非空)、unique(唯一)、primary key(主键)、foreign key(外键)和check(检查)五种。
二、使用
1、primary key(主键)
(1)语法
用于唯一的标示表行的数据,当定义主键约束之后,该列不能重复。一般每一张表都有一个主键。

在这里插入图片描述

CREATE TABLE tab(
	id INT PRIMARY KEY,-- 表示id列数主键
	`name` VARCHAR(32),
	email VARCHAR(32)
	);
	

(2)主键的细节:
1)primary key 不能重复,并且不能为空
2)一张表只能有一个主键,但是可以是复合主键
3)主键的指定方式有两种,一个是列级约束(直接在列的后边指定,如上图),一个是表级约束(在表的最后加主键约束,如下图,细节2 的说明)

细节2的说明:

在这里插入图片描述

CREATE TABLE tab01(
	id INT ,-- 表示id列数主键
	`name` VARCHAR(32),
	email VARCHAR(32),
	primary key(id,`name`) -- 创建复合主键{id,name}
	);
desc tab01; -- 查看表的结构 

2、not null(非空)
如果在列上定义了 not null,那么在插入数据的时候,必须为该列提供数据
在这里插入图片描述

		
CREATE TABLE tab02(
	id INT PRIMARY KEY,-- 表示id列数主键
	`name` VARCHAR(32) NOT NULL,
	email VARCHAR(32)
	);

DESC tab02;-- 查看表的结构 

3、unique唯一
(1)语法
当定义了唯一约束后,该列的值是不能重复的

在这里插入图片描述

CREATE TABLE tab03(
	id INT PRIMARY KEY,-- 表示id列数主键
	`name` VARCHAR(32) UNIQUE,
	email VARCHAR(32)
	);

DESC tab03;-- 查看表的结构 

(2)细节
1)如果没有指定not null ,则unique字段可以有多个null
2)一张表可以有多个unique字段

4、foreign key(外键)
(1)语法
用于定义主表和从表之间的关系:外键约束要定义在从表上,主表则必须具有主键约束或是unique约束,当定义外键约束之后,要求外键列数据必须在主表的主键列存在或是为null

在这里插入图片描述

-- 首先创建主表,之后再创建从表,因为从表引用到主表中的属性
-- 班级表(主表)
CREATE TABLE class(
	id INT PRIMARY KEY,-- 班级编号;要求主表被引用的属性列,要是主键约束或者是unique约束
	class_name VARCHAR(32) -- 班级名称
	);

DESC class;

-- 学生表(从表)
CREATE TABLE student(
	id INT PRIMARY KEY, -- 学生学号,指定为主键
	`name` VARCHAR(32), -- 学生姓名
	class_id INT, -- 学生所在班级的班级编号
	-- 下面指定外键关系
	FOREIGN KEY (class_id) REFERENCES class(id) -- 指定class_id是student(学生表)的外键,参考自class(班级)表
	);
	
DESC student;

(2)细节
1)外键指向的表(主表)的字段,要求是 primary key 或者是unique
2)表的类型是 innodb,这样的表才支持外键
3)外键字段(从表中的外键)的类型要和主键字段(主表中的主键)的类型一致(长度可以不同)
4)外键字段(从表中的外键)的值,必须在主键字段(主表的主键)中出现过,或者为null(添加数据的时候指定外键为null)
5)一旦建立主外键关系,数据就不能随意删除了

5、check (检查)
(1)语法
用于强制行数据必须满足的条件,假定在 sal 列上定义了check约束,并要求 sal列值在1000 ~ 2000之间如果不在1000 ~ 2000之间就会提示出错。
在 mysal 中实现check的功能,一般是在程序中控制,或者是通过触发器完成
在这里插入图片描述

create table t23(
	id int primary key,
	`name` varchar(32),
	sex varchar(6) check (sex in('man','woman')),
	sal double check (sal>1000 and sal<2000)
	);	
desc t23;

-- 插入数据查看是否生效
insert into t23
	values(1,'jack','mid',1001);
	

韩顺平 零基础30天学会java

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值