当前位置: 首页 >数据库 > MySQL的约束

MySQL的约束

主键约束

能够唯一确定一张表中的一条记录,通过给某个字段添加约束,就可以使得该字段不重复且不为空

create table user(	id int primary key,	name varchar(20));

上图中的PRI表示主键

insert into user/*表名下同*/ values(1, "张三");/*此处可以运行*/insert into user values(1, "李四");insert into	user values(null, "王五");/*后面两行不能运行*/

image-20220719094136586image-20220719094154257

联合主键

有时需要多个字段联合起来才能作为主键确定表中唯一一条记录

create table user2(		id int,		name varchar(20),		password varchar(20),		primary key(id, name));

添加记录

image-20220719095219336

不会报错,因为是使用id和name作为联合主键,联合主键中任何一个字段不能为空(添加记录时)

自增约束

create table user3(	id int primary key auto_increment, /*效果就是管控id的值,让他可以自动增长*/	name varchar(20));

image-20220719110122014

自增约束可以在添加使用时该主键的值为null,如下

insert into user1 value(null,"李四");

image-20220719112139421

修改表结构

创建表时忘记创建主键

add
create table user2(	id int,	name varchar(20));describe user2; /*可以使用缩写desc*/

image-20220719112418246

alter table user2/*表名*/ add primary key(id/*需要添加的主键*/);

image-20220719112706133

modify
alter table user2 modify id int primary key;

image-20220719115001628

删除主键

alter table user2 drop primary key;

image-20220719113817892

唯一约束

MySQL 唯一约束(Unique Key)是指所有记录中字段的值不能重复出现。例如,为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况。如果其中一条记录的 id 值为‘0001’,那么该表中就不能出现另一条记录的 id 值也为‘0001’。

唯一约束与主键约束相似的是它们都可以确保列的唯一性。不同的是,唯一约束在一个表中可有多个,并且设置唯一约束的列允许有空值,但是只能有一个空值。而主键约束在一个表中只能有一个,且不允许有空值。比如,在用户信息表中,为了避免表中用户名重名,可以把用户名设置为唯一约束。

create table user4(	id int,	name varchar(20));alter table user4 add unique(name);desc user4

image-20220719121937994

会出现一个key = UNI

image-20220719122351827

第二个就会报错,因为要求name是唯一的

在创建时定义唯一约束

create table user5(	id int,	name varchar(20) unique);desc user5;

image-20220719133321039

下面这种就是两个键加起来不重复就是ok的,并不是强制要救如果一个重复就报错

create table user6(	id int,	name varchar(20),	unique(id, name));desc user6;

image-20220719133936899

创建后添加唯一约束

add

alter table user5/*表名字*/ add constraint unique(name/*要添加唯一约束的字段*/);

modify

alter table user5/*表名字*/ modify id int/*要添加唯一约束的字段名及其数值类型及空间*/ unique;

删除唯一约束

alter table user5/*表名*/ drop index name/**唯一约束名/;

非空约束

MySQL 非空约束(NOT NULL)指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。

create table user7(	id int,	name varchar(20) not null  /*此处添加的not null就是非空约束*/);

image-20220719142129337

如果只添加了id的值,比如

insert into user7 (id) values (7);

会报错类似 \(1364 - Field 'name' doesn't have a default value\) 的错误

默认约束

create table user8(	id int,	name varchar(20),	age int default 10  /*此处指定了默认值,插入时未指定时使用,如果有值就会被覆盖*/);

image-20220719144312653

上面这种就是10就是为指定时是哟个默认值,21就是把10覆盖的那个值

外键约束

MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。(也可以是主表和附表)

外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。

create table classes(	id int primary key,	name varchar(20));create table students(	id int primary key,	name varchar(20),	class_id int,	foreign key(class_id/*本表中作为外键的字段*/) 		references classes/*主表*/(id/*主表中与附表外键相关联的字段*/));
insert into classes  values (1, "一班");insert into classes  values (2, "二班");insert into classes  values (3, "三班");insert into classes  values (4, "四班");insert into students values (1001, "david", 1);insert into students values (2001, "lily", 2);insert into students values (5001, "lisa", 5); /*这一行会报错*/ /*附表要参照主表去添加,如果主表中不存在这个值,则会报错*/

报错: \(1452 - Cannot add or update a child row: a foreign key constraint fails\\ (`test`.`students`, CONSTRAINT `students_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `classes` (`id`))\)

delete from classes where  name = "一班";/*注意主表的值被附表引用时,那么主表中该条数据记录就不能被删除,除非把对应的附表记录先删除,或者就做软删除,即用户看不到,但是数据库中还是存在这条记录*/

报错: \(1451 - Cannot delete or update a parent row: a foreign key constraint fails\\ (`test`.`students`, CONSTRAINT `students_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `classes` (`id`))\)

作者:我就一水
来源链接:https://www.cnblogs.com/wojiuyishui/p/16494212.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/database/118004.html

标签:1364:Field
分享给朋友:

“MySQL的约束” 的相关文章

MYSQL查询某字段为空的数据 2022年06月08日 21:35:13
如何查看MySQL的版本? 2022年06月11日 22:08:01
mysql null 优化 2022年06月15日 17:15:21
Mysql区间查询的注意点 2022年06月19日 14:49:56
Mysql查询不等于某值的所有记录 2022年06月25日 16:32:26
MySQL如何查询表中重复的数据 2022年06月26日 12:56:30