700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > day 06 非空约束 唯一约束 主键约束 外键约束

day 06 非空约束 唯一约束 主键约束 外键约束

时间:2022-04-09 03:34:02

相关推荐

day 06 非空约束 唯一约束 主键约束 外键约束

由于sql语句不区分大小写,为了书写方便,本文所有命令统一使用小写

往期内容

day 01 初识Mysql以及DDL数据定义语言day 02 DML数据操作语言​​​​​​day 03 DQL数据查询语言---初窥门径day 04 DQL数据查询语言---单表查询day 05 DQL数据查询语言---连接查询

目录

一、简介

二、非空约束:not null

三、唯一性约束:unique

四、主键约束:primary key

五、外键约束:foreign key

一、简介

约束就是在创建表的时候,给表中的字段加上一些约束,来保证这个表中数据的完整性、有效性!!!

约束的作用就是为了保证:表中的数据有效!!

约束有哪些?

非空约束:not null唯一性约束: unique主键约束: primary key外键约束:foreign key

约束的用法一般都是直接写在字段的数据类型之后

二、非空约束:not null

非空约束not null约束的字段不能为NULL

可以在多个字段上使用,但不能多个字段联合起来使用!!!

即只有列级约束,没有表级约束!!!

#name字段非空约束mysql> create table t_students(-> id int,-> name varchar(32) not null);Query OK, 0 rows affected (0.10 sec)mysql> insert into t_students(id,name) values(1,'张三');Query OK, 1 row affected (0.01 sec)mysql> insert into t_students(id) values(2);ERROR 1364 (HY000): Field 'name' doesn't have a default value

增加非空约束:alter table 表名 add 字段名 数据类型not null;修改非空约束:alter table 表名 modify 字段名 数据类型新约束;

#新约束为null时,为取消约束

三、唯一性约束:unique

not null 与 unique 联合使用

案例:建立一个表,使id不能重复且不能为null

mysql> create table t_students(-> id int not null unique,-> name varchar(32));Query OK, 0 rows affected (0.06 sec)mysql> desc t_students;+-------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+-------------+------+-----+---------+-------+| id | int | NO | PRI | NULL | || name | varchar(32) | YES || NULL | |+-------+-------------+------+-----+---------+-------+2 rows in set (0.04 sec)mysql> insert into t_students(id,name) values(1,'张三');Query OK, 1 row affected (0.04 sec)mysql> insert into t_students(id,name) values(1,'李四');ERROR 1062 (23000): Duplicate entry '1' for key 't_students.id'mysql> insert into t_students(name) values('李四');ERROR 1364 (HY000): Field 'id' doesn't have a default value

not null 与 unique 在联合使用时,书写顺序没有限制。

not null 与 unique 在联合使用时,该字段自动变成主键!!!

修改唯一约束:alter table表名modify字段名 数据类型unique;#列级约束添加唯一约束:alter table表名add unique(字段名1,.....);#表级约束删除约束:alter table表名drop index字段名;

四、主键约束:primary key

主键约束:就是一种约束。主键字段:添加了主键约束的字段主键值:主键字段中的每一个值都叫做主键值,主键值是每一行记录的唯一标识。

主键约束的特征:

主键值不能重复也不能为NULL!!!一张表,主键约束只能添加1个!!!主键值一般都是数字,一般都是定长的!!!

案例:建立一个表,使 id 为主键

mysql> create table t_students(-> id int primary key,-> name varchar(32));Query OK, 0 rows affected (0.08 sec)mysql> insert into t_students(id,name) values(1,'张三');Query OK, 1 row affected (0.01 sec)mysql> insert into t_students(id,name) values(1,'李四');ERROR 1062 (23000): Duplicate entry '1' for key 't_students.PRIMARY'mysql> insert into t_students(name) values('李四');ERROR 1364 (HY000): Field 'id' doesn't have a default value

复合主键:多个字段联合起来作为主键,称为复合主键。

案例:建立一个表,使 id 和 name 联合起来作为复合主键

mysql> create table t_students(-> id int,-> name varchar(32),-> primary key(id,name));Query OK, 0 rows affected (0.07 sec)mysql> insert into t_students(id,name) values(1,'张三');Query OK, 1 row affected (0.01 sec)mysql> insert into t_students(id,name) values(2,'张三');Query OK, 1 row affected (0.04 sec)mysql> insert into t_students(id,name) values(1,'张三');ERROR 1062 (23000): Duplicate entry '1-张三' for key 't_students.PRIMARY'mysql> insert into t_students(name) values('张三');ERROR 1364 (HY000): Field 'id' doesn't have a default value

自增长:auto_increment

auto_increment表示自增,从1开始,以1递增;自增长字段必须是整型数据!!

mysql> create table t_students(-> id int primary key auto_increment,-> name varchar(32));Query OK, 0 rows affected (0.13 sec)mysql> insert into t_students(name) values('张三'),('李四'),('王五');Query OK, 3 rows affected (0.05 sec)Records: 3 Duplicates: 0 Warnings: 0mysql> select * from t_students;+----+------+| id | name |+----+------+| 1 | 张三 || 2 | 李四 || 3 | 王五 |+----+------+3 rows in set (0.00 sec)

删除主键:alter table表名drop primary key;

修改主键:alter table表名modify字段名 数据类型primary key;

五、外键约束:foreign key

语法:constraint 外键名foreign key(外键字段) references 父表名(引用字段)

位置:与创建复合主键的语句的位置相同。

外键约束:一种约束外键字段:该字段上添加了外键约束外键值:外键字段当中的每一个值,可以为NULL。

foreign key 被约束的表叫做子表,外键引用主键字段所在的表叫做父表。

外键值中的数据一定是父表中出现的数据!!

子表中的外键引用的这个字段不一定是主键,但至少具有unique约束!!

注(添加外键约束后)

创建表的时候,先创建父表,再创建子表添加数据的时候,先添加父表数据,再添加子表数据修改数据的时候,先修改子表的数据,再修改父表的数据删除数据的时候,先删除子表的数据,再删除父表的数据

案例:父表为t_f,子表为t_z,父表的为教师表,子表为学生表,外键为教师id,外键名为fz

mysql> create table t_f(-> fid int unique,-> fname varchar(32));Query OK, 0 rows affected (0.11 sec)mysql> create table t_z(-> zid int,-> zname varchar(32),-> fid int,-> constraint fz foreign key(fid) references t_f(fid));Query OK, 0 rows affected (0.14 sec)mysql> desc t_f;+-------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+-------------+------+-----+---------+-------+| fid | int | YES | UNI | NULL | || fname | varchar(32) | YES || NULL | |+-------+-------------+------+-----+---------+-------+2 rows in set (0.04 sec) mysql> desc t_z;+-------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+-------------+------+-----+---------+-------+| zid | int | YES || NULL | || zname | varchar(32) | YES || NULL | || fid | int | YES | MUL | NULL | |+-------+-------------+------+-----+---------+-------+3 rows in set (0.00 sec)

尝试插入数据

由于父表中没有fid=3,所以会报错!!

mysql> insert into t_f(fid,fname) values(1,'张三'),(2,'李四');Query OK, 2 rows affected (0.01 sec)Records: 2 Duplicates: 0 Warnings: 0mysql> insert into t_z(zid,zname,fid) values(10,'李华',1);Query OK, 1 row affected (0.00 sec)mysql> insert into t_z(zid,zname,fid) values(10,'李华',3);ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`studydata`.`t_z`, CONSTRAINT `fz` FOREIGN KEY (`fid`) REFERENCES `t_f` (`fid`))

建表完成后添加外键

alter table数据表名addconstraint外键名foreign key(外键字段名)references父表名(引用字段);

删除外键

alter table表名drop foreign key外键名;

未完待续。。。。。。。。。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。