Mysql 约束

约束就是对表中数据的限制;可以保证表中的数据完整有效

非空约束 not null

-- 约束 user_id 字段值不能为 null
create table user (
	user_id int not null,
	uname varchar(10)
)

唯一性约束 unique

  • 单个字段约束
-- 约束 email 字段不能重复(多个 null 不算重复)
create table user (
	user_id int,
	uname varchar(10),
	email varchar(30) unique
)
  • 多个字段联合约束
-- 建表时约束 user_id 和 uname 联合起来不可重复
create table user (
	user_id int,
	uname varchar(10),
	email varchar(30),
	unique(user_id, uname)
)

-- 下面这种情况是允许插进去的,即有 null 不算重复
INSERT INTO user (user_id) values (111);
INSERT INTO user (user_id) values (111)

主键约束 primary key( PK )

  • 主键是每一行记录的唯一标识,类似于人的身份证号;主键约束的字段不可重复且不可为 null
  • 任何一张表都应该有主键,没有主键的表一般为无效的表;一张表最多只能有一个主键,复合主键算 1 个
  • 主键按用途可分为自然主键和业务主键两种,自然主键:和业务无关的值;业务主键:和业务紧密相关
  • 开发中一般使用自然主键,因为主键一旦和业务挂钩,那么在业务发生变动时,可能会影响到主键

例:为 user 表的 user_id 字段添加主键约束

-- 方式 1
create table user (
	user_id int PRIMARY KEY,
	uname varchar(10),
	email varchar(30)
)

-- 方式 2
create table user (
	user_id int,
	uname varchar(10),
	email varchar(30),
	PRIMARY KEY(user_id)
)

复合主键(了解)

create table user (
	user_id int,
	uname varchar(10),
	email varchar(30),
	PRIMARY KEY(user_id, uname) -- 复合主键任一字段值都不可为 null
)

外键约束 foreign key( FK )

  • 例如描述班级和学生时,班级单独一张表,为保证学生表中存储的班级信息都存在于班级表中,我们可以将班级信息字段添加外键约束
  • 班级表称为父表,学生表称为子表,先有父后有子,删除时先删子再删父
  • 子表引用父表的字段不一定非要是主键,但一定要有唯一性约束
  • 外键字段值可以为 null ,表示不关联到父表中的数据

例:班级和学生

create table class (
	class_no int PRIMARY KEY,
	class_name varchar(10)
)

CREATE TABLE student (
	student_no int PRIMARY KEY,
	name VARCHAR(10),
	class_no int,
	FOREIGN KEY(class_no) references class(class_no)
)

检查约束 check

  • 检查数据表中字段值有效性的一种手段
CREATE TABLE class(
	class_no int PRIMARY KEY,
	class_name varchar(10)
    check(class_no > 0)
)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值