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;