提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
1:非空约束
2:唯一性约束
3:主键约束
4:外键约束
在MySQL中是有着约束的,约束是什么呢,约束又有什么作用呢。约束顾名思义它是对表有着约束的,而它的作用是为了让数据更加有用,具有有效性。
1:非空约束
如何加非空约束,就是在创建表时定义数据类型的
时候在他的最后面加个not null就行
drop table if exists stu;
create table stu(
name char(10),
score int not null
);
insert into stu values('sdff',100); //正常添加数据

?
再加个空值看看会怎么样
insert into stu(name) values('kl');

很遗憾,加了非空约束,它是不允许你讲它的值设定为空值的。
2:唯一性约束
唯一性约束的定义跟前面的非空约束是一样的
都是在创建数据类型的时候,定义的唯一性
约束。非空约束是not bull,而唯一性约束
是unique。
drop table if exists stu;
create table stu(
name char(10),
score int unique
);
insert into stu values('sd',99);
insert into stu values('sd',87);
?
但是我现在在设置了唯一性约束的score字段中
在插入一条99与前面的99会出现重复,会不会报错呢
insert into stu values('kl',99);
?
?唯一性约束,唯一性约束,现在不唯一了,肯定会报错了。
唯一性约束,能不能联合起来具有唯一性呢?
联合起来的唯一性约束大家知道是什么意思呢
假如我联合两个字段,两个字段其中一个字段出现
重复是没有问题的,但如果全部都重复,这才会报错
这就叫联合唯一性约束。
理论知识永远比不过实践,我们看一看具体的例子吧
drop table if exists stu;
create table stu(
id int,
name char(10),
email char(10),
unique(name,email)
);
insert into stu values(123,'sh','7878');
insert into stu values(111,'sh','9090');
insert into stu values(89,'jk','7878');

?这样子创建是允许的,那么这就是联合唯一性约束,除非联合的全部重复,不然是不会报错的。
如下会报错。
insert into stu values(199,'sh','7878');

?那么唯一性约束可以联合起来的话,not null和唯一性约束可以联合吗,当然可以,不过在MySQL中他们的联合就是相当于后面我们讲到的主键约束(注意是MySQL中,其他数据库就不一定是了),那这里我就不多说了。
3:主键约束
主键是什么呢,主键是一行的标记,就是相当于我们的身份证号,独一无二,可以代表我们的身份,那么我这样一说,你是不是就觉得每张表都应该有主键呢,却是如此,每张表都应该有身份证号的(主键),不然表无效。
主键: primary key
该如何使用呢,跟前面两个约束四一样的,都是在定义数据类型
的时候,在最后面定义就行。
drop table if exists stu;
create table stu(
name char(10),
id int primary key,
score int
);
insert into stu values('kl',123,98);
insert into stu values('op',189,90);

?接下来你就会发现主键的一些作用了
插入这些代码会报错(报错的理由就不用说了吧,大家肯定都知道滴)
insert into stu values('hj',123,12);
insert into stu values('rt',189,78);
insert into stu(name,score) values('ioio',15);

?4:外键约束
外键约束,怎么说呢,举个例子好点,直接定义却是云里雾里的。
假如有一个学生表(有学生学号,班级号),班级表(班级号,班级名)
现在给学生表一个外键约束,给学生表中的班级号添加了外键约束(与班级表中的班级号相关联)
之后学生表中的班级号只能在班级表中的班级号中填写,不能出现班级表中的班级号的其他数据
如班级表中的班级号没有89,那么学生表中的班级号就无法填写89。、
drop table if exists stu;
drop table if exists class;
create table class(
name char(10),
num int primary key //一定要注意,你要设置的外键约束所关联的那个父,一定要是主键约
束,不然会报错的
);
create table stu(
id int,
cno int,
foreign key(cno) references class(num)
);
insert into class values('一班',18);
insert into class values('二班',20);
insert into stu values(123,18);
insert into stu values(122,18);
insert into stu values(189,20);
如果想添加一些数据,外键约束会帮你看看是否符合条件的。
这些代码是会报错的。
insert into stu(199,21);
insert into stu(178,18);

?
在这里我在拓展一个自增(默认从1开始自增)的好东西,
具体不说了,大家只要会用就行啦
drop table if exists stu;
create table stu(
id int primary key auto_increment, //注意一定要设置有主键哦
name char(10)
);
insert into stu(name) values('kl');
insert into stu(name) values('op');
insert into stu(name) values('ioio');
insert into stu(name) values('fg');
insert into stu(name) values('bnbn');

OK, 本文到此结束,如有错误,还请大佬指正!!!
|