龙空技术网

谈谈MySQL的约束

程序学习笔记 191

前言:

现在姐妹们对“mysql列约束”大致比较注重,看官们都需要知道一些“mysql列约束”的相关知识。那么小编在网络上汇集了一些对于“mysql列约束””的相关文章,希望看官们能喜欢,姐妹们一起来学习一下吧!

约束:一种限制,用于限制表中的数据,为了保证表中数据的准确性和可靠性。

比如学生信息表,有学生编号字段,如果不加约束,先加一条学号为1的信息,后面还可以再加一条学号为1的学生信息,这是不合理的。

MySQL中的约束

SQL中有6种约束

NOT NULL:非空约束,用于保证该字段的值不能为空,比如姓名,学号等。

DEFAULT:默认,保证该字段有一个默认值。

PRIMARY KEY:主键,用于保证该字段值是有唯一性,可以标识整行,如学生可以作为一个学生的标识。

UNIQUE:唯一性约束,可以为空,没有主键这么严谨。

CHECK:检查约束,MySQL中不支持,即使用了语法不错误,但是没有效果。

FOREIGN KEY:外键约束,用于限制两个表的关系。用于保证该字段的值必须来自于主表的关联列的值。

如有两个表:学生信息表,专业表。学生信息表中有专业编号,专业表中有编号1和2两个专业,此时学生的专业编号可以作为外键,关联专业表的编号列,它的值就来自专业表的编号列。

添加约束的时机

1、创建表时

2、修改表时

约束分类

无论在何时添加约束,都分为两类:列级约束和表级约束

create table 表名{ 字段名 字段类型 列级约束 字段名 字段类型 列级约束 表级约束}

可作列级约束的有:六大约束在语法上都支持,但外键约束没有效果。

可作表级约束的有:除了非空和默认约束,其他都可以。

创建表时添加约束

添加列级约束

直接在字段名、字段类型后追加约束类型

#先建一张专业表create table major( id int PRIMARY key, name varhcar(20))#学生表create table student( id int PRIMARY key, #主键 name VARCHAR(20) NOT NULL,#非空 gender char(1) check(gender='男' or gender = '女'), age int DEFAULT 18,#默认约束 seat int UNIQUE,#唯一 majorId int REFERENCES major(id) #外键)

使用desc查看字段信息

mysql> desc student;+---------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+---------+-------------+------+-----+---------+-------+| id | int(11) | NO | PRI | NULL | || name | varchar(20) | NO | | NULL | || gender | char(1) | YES | | NULL | || age | int(11) | YES | | 18 | || seat | int(11) | YES | UNI | NULL | || majorId | int(11) | YES | | NULL | |+---------+-------------+------+-----+---------+-------+6 rows in set (0.03 sec)

有类型和约束的信息,没有外键约束,因为外键约束在列级没有效果。

添加表级约束

将刚才建的学生表删除再重新建

DROP TABLE IF EXISTS studentcreate table student( id int, name VARCHAR(20), gender char(1), age int, seat int, majorId int, CONSTRAINT pk PRIMARY KEY(id),#主键 UNIQUE(seat),#唯一键 check(gender='男' or gender='女'),#检查约束 FOREIGN key(majorId) REFERENCES major(id) #外键 )

非空和默认约束不支持的,所以建表时忽略,CONSTRAINT pk 是我们给约束起的名字,是可选的。

通用一点的写法

create table student( id int PRIMARY key, #主键 name VARCHAR(20) NOT NULL,#非空 gender char(1) check(gender='男' or gender = '女'), age int DEFAULT 18,#默认约束 seat int UNIQUE,#唯一 majorId int,CONSTRAINT fk1 FOREIGN key(majorId) REFERENCES major(id) #外键 )

一张表可以加多个外键,名字不能重复,所以要给外键加名字时,要能保证唯一,最有一个规律。

修改表时添加约束

删除student表,再新建时不加任何约束

DROP TABLE IF EXISTS studentcreate table student( id int, name VARCHAR(20), gender char(1), age int, seat int, majorId int )

修改表的用alter

添加约束:

非空约束alter table student modify name varchar(20) not null;默认约束alter table student modify age int default 18主键约束1)alter table student modify id int PRIMARY key;2)alter table student add PRIMARY key(id);#表级写法唯一约束1、列级alter table student modify seat int UNIQUE2、表级alter table student add UNIQUE(seat);外键约束alter table student  add FOREIGN KEY(majorId)  REFERENCES major(id)

注意,主键约束和唯一约束在列级和表级都支持,所以有两种写法

总结一下两个分类修改时添加约束的方法

添加列级约束:

alter table 表名 modify 列名 类型 约束名;

添加表级约束

alter table 表名 add 约束(字段名)【外键引用】

修改表时删除约束

删除非空约束

alter table student modify name varchar(20) null;

删除默认约束

alter table student modify age int;

删除主键约束,一个表只有一个主键,不用写列名。

alter table student drop primary key;

删除唯一约束

alter table student drop index seat;

删除外键

alter table student drop FOREIGN key majorId

标签: #mysql列约束