10 常见约束&标识列

一、常见约束

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

--六大约束

NOT NULL:非空约束,用于保证该字段的值不能为空
DEFAULT:默认约束,用于保证该字段有默认值
PRIMARY KEY:主键约束,用于保证该字段的值具有唯一性,不能为空,一个表中至多有一个;主键不建议带有业务含义,比如身份证号、邮箱、手机号等,否则后面有更改的话会很麻烦。
UNIQUE:唯一约束,用于保证该字段的值具有唯一性,可以为空,一个表中可以有多个
CHECK:检查约束,限制列的范围,MySQL中不支持
FOREIGN KEY:外键约束,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值

 其中,主键表达了两方面的含义:

主键表示了表所描述的对象;
主键表示了表中数据的粒度;

什么叫表所描述的对象呢?
比如,对于学生表,它所描述的对象就是学生,而表中的主键就是唯一标识一个学生的学生编号。如果看到一张表的主键是学生编号,那基本可以肯定,这张表就是描述学生的属性的。

什么叫表中数据的粒度呢?
比如,对于考试成绩表,主键是学生编号+课程编号,它描述的是每一个学生对应的课程考了多少分,那么这张表的数据粒度就是学生+课程。

 

2、添加列级/表级约束

--语法
CREATE TABLE 表名
(
列名a 数据类型(数据长度) 列级约束条件,
列名b 数据类型(数据长度) 列级约束条件,
列名c 数据类型(数据长度) 列级约束条件,
...
表级约束条件(约束条件涉及到多个属性列,则须定义在表级上)
);


--添加列级约束
只支持默认、非空、主键、唯一


--添加表级约束
CONSTRAINT 约束名 约束类型(字段名)
除了非空、默认,其他的都支持


--列级约束和表级约束的区别
列级约束:位于列的后面,不支持外键,不可以起约束名;
表级约束:位于所有列的下面,不支持默认约束和非空约束,可以起约束名。

 

3、修改表时添加约束

--添加非空约束
ALTER TABLE 表名 MODIFY COLUMN 字段 VARCHAR(20) NOT NULL;

--添加默认约束
ALTER TABLE 表名 MODIFY COLUMN 字段 INT DEFALUT 18;

--添加主键约束1)列级约束
ALTER TABLE 表名 MODIFY COLUMN 字段 INT PRIMARY KEY;
(2)表级约束
ALTER TABLE 表名 ADD PRIMARY KEY(字段);

--添加唯一约束1)列级约束
ALTER TABLE 表名 MODIFY COLUMN 字段 INT UNIQUE;
(2)表级约束
ALTER TABLE 表名 ADD UNIQUE(字段);

--添加外键约束
ALTER TABLE 从表 ADD FOREIGN KEY 从表(外键字段) REFERENCES 主表(主键字段);

 

4、修改表时删除约束

--删除非空约束
ALTER TABLE 表名 MODIFY COLUMN 字段 VARCHAR(20) NULL;

--删除默认约束
ALTER TABLE 表名 MODIFY COLUMN 字段 INT;

--删除主键约束
ALTER TABLE 表名 DROP PRIMARY KEY;

--删除唯一约束
ALTER TABLE 表名 DROP INDEX 字段:

--删除外键约束
ALTER TABLE 表名 DROP FOREIGN KEY 外键;

 

二、标识列(自增长列)

可以不用手动的插入值,系统提供默认的序列值。

1、创建数据库表时设置标识列

--如:创建数据库表tab_identity,设置id为标识列
CREATE TABLE tab_identity(
id INT PRIMARY KEY auto_increment,
NAME VARCHAR(20)
);
标识列特点:
(1)标识列必须和主键搭配吗?不一定,但要求是一个key
(2)一个表可以有几个标识列?至多有一个
(3)标识列的类型只能是数值型
(4)标识列可以通过SET auto_increment_increment=3;设置步长可以通过手动插入值,设置起始列。

2、修改表时设置标识列

ALTER TABLE 表名 MODIFY COLUMN ID INT PRIMARY KEY auto_increment;

3、修改表时删除标识列

ALTER TABLE 表名 MODIFY COLUMN ID INT; 

 

posted @ 2021-04-13 12:35  赵Gary  阅读(545)  评论(0)    收藏  举报