【MySQL系列笔记】 - 第六章 - 约束

约束

constraint,一般约束的是字段,保证表中数据的有效性、完整性

约束包括:非空约束、唯一性约束、主键约束和外键约束

非空约束 - not null

约束的字段必须有确定值,不能为null

create table t_stu(
	id int,
  	name varchar(255) not null // 非空约束,学生姓名不能为空
);

仅允许列级约束,不允许表级约束(即两列或多列在一起的约束)

唯一性约束 - unique

唯一性约束字段不能重复,但是可以为null

create table t_stu(
	id int unique, // 唯一性约束,学生id应当是唯一的
  	user_name varchar(255) not null
);

两个字段联合起来具有唯一性,比如要求用户的姓名唯一,但是姓和名可以部分相同

create table t_stu(
	id int,
  	user_name varchar(255),
  	unique(id, user_name) // 表级约束
);

在MySQL中,如果一个字段同时被 not nullunique 约束,该字段自动变成主键字段

create table t_stu(
	id int not null unique, // id字段变成主键
  	user_name varchar(255),
);

主键约束 - primary key

主键约束是一种约束,加入了主键约束的字段成为主键字段,主键字段的每一个值称为主键值, 主键值是每一行记录的唯一标识

create table t_stu(
	id int primary key,
  	user_name varchar(255)
);

复合主键,两个字段联合起来做主键(不建议使用)

create table t_stu(
	id int,
  	user_name varchar(255),
  	primary key(id, user_name)
);

Tip:

  1. 一张表只能有一个主键
  2. 主键值建议使用int或big int类型,不建议使用varchar等不定长类型

主键的分类还可以分为:

  1. 自然主键:主键值是一个自然数,和业务无关(使用的更多,主键只需要不重复就行;如果业务发生变动,也不会影响到主键)
  2. 业务主键:与业务紧密关联

在MySQL中,auto increment 可以自动维护自增值

create table t_stu(
	id int primary key auto_increment,
  	user_name varchar(255),
);

注意:auto increment是从1开始自增的

外键约束 - foreign key

在t_class班级表中有classno和classname两个字段

在t_student学生表中有no, name和cno三个字段

cno没有约束的时候,可能导致数据无效,cno为外键字段,cno中的每一个值都是外键值

  1. 外键值可以为null
  2. 父表被引用字段不一定是主键,但至少具有unique约束

当两个表建立一对多关系的时候,"一"的那一端是父表,"多"的那一端是子表

如何理解父表和子表?

  1. 子表和父表只是普通的数据库表,但它们以父子关系描述的方式链接。
  2. 它通常用于指定一个表的值在何处引用另一个表中的值(通常是另一个表的主键)。
  3. 例如,想象一篇新闻文章。这可以用一个名为db_artical的表来表示,其中包含idheadlinebodypublished_dateauthor。但是,对于author,您可以将他的 ID 值放在一个单独的表中,而不是在该字段中放置一个名称——这张表可能称为db_authors——该表包含有关作者的信息,例如idnameemail
  4. 因此,如果需要更新作者姓名,只需在db_authors(parent)表中进行即可;因为db_artical(子)表只包含相应记录的id

在进行涉及子表和父表的增删改操作时,

  1. 创建表的时候,先创建父表,再创建子表
  2. 插入数据的时候,先插入父表,再插入子表
  3. 删除表的时候,先删除子表,再删除父表

使用例 foreign key(子表名) references 父表名(外键名)

create table t_class(
	classno int primary key auto_increment,
  	classname varchar(255)
)

create table t_stu(
	no int primary key auto_increment,
  	name varchar(255),
  	cno int,
  	foreign key(cno) references t_class(classno) // 外键约束另起一行写
);

还有一个检查约束 - check,但是MySQL不支持,这里不再赘述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值