一、约束 CONSTRAINTS

数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。在用户对数据进行插入

修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。

数据的完整性要从以下四个方面考虑:

  • 实体完整性(Entity Integrity):例如,同一个表中,不能存在两条完全相同无法区分的记录
  • 域完整性(Domain Integrity):例如:年龄范围0-120,性别范围“男/女”
  • 引用完整性(Referential Integrity):例如:员工所在部门,在部门表中要能找到这个部门
  • 用户自定义完整性(User-defined Integrity):例如:用户名唯一、密码不能为空等,本部门经理的工资不得高于本部门职工的平均工资的5倍。

根据约束的特点,分为几种:

  • 键约束:主键约束、外键约束、唯一键约束
  • Not NULL约束:非空约束
  • Check约束:检查约束
  • Default约束:缺省约束

1.主键约束PRIMARY KEY

主键:Primary key,简称PK,数据库主键作用保证实体的完整性,可以是一个列或多个列的组合
MySQL数据库中的约束

  • 主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值,如果是多列组合的主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。
  • 每个表有且最多允许一个主键约束
  • MySQL的主键名总是PRIMARY,就算自己命名了主键约束名也没有
  • 当创建主键约束时,MySQL默认在对应的列上建立主键索引。删除主键时,也会直接删除主键的索引

建立主键的方式:

在主键列后面直接加主键约束,复合主键不能使用这种方式 单独声明主键约束 声明复合主键,复合主键只能使用这种方式
CREATE TABLE t_stu( sid INT PRIMARY KEY, sname VARCHAR(100), gender CHAR); CREATE TABLE t_course( cid INT , cname VARCHAR(100), decription VARCHAR(200), PRIMARY KEY(cid)); CREATE TABLE t_stu_course( sid INT, cid INT, score DOUBLE(4,1), PRIMARY KEY(sid,cid));
建表后添加主键约束 alter table 表名称 add 【constraint 约束名】 primary key (字段名);
alter table 表名称 add 【constraint 约束名】 primary key (字段名1,字段名2);
ALTER TABLE t_stu ADD PRIMARY KEY(sid); ALTER TABLE t_course ADD PRIMARY KEY(cid); ALTER TABLE t_stu_course ADD PRIMARY KEY(sid,cid);

2. 唯一键Unique key,简称UK

  • 同一个表可以有多个唯一约束
  • 唯一约束可以是某一列的值唯一,也可以多个列组合值的唯一
  • MySQL会给唯一约束的列上默认创建一个唯一索引
  • 删除唯一键只能通过删除唯一索引的方式删除,删除时需要指定唯一索引名,唯一索引名就是唯一约束名一样。如果创建唯一约束时未指定名称,如果是单列,就默认和列名相同,如果是组合列,那么默认和()中排在第一个的列名相同。也可以自定义唯一性约束名。

建立唯一性约束的方式:

在某个列后面直接加唯一性约束 单独指定表的唯一性约束 组合列唯一性约束
CREATE TABLE t_course( cid INT PRIMARY KEY, cname VARCHAR(100) UNIQUE, description VARCHAR(200)); CREATE TABLE t_stu( sid INT PRIMARY KEY, sname VARCHAR(100), card_id CHAR(18), CONSTRAINT uk_card_id UNIQUE KEY(card_id));#其中CONSTRAINT uk_cname和KEY可以省略 CREATE TABLE t_stu_course( id INT PRIMARY KEY, sid INT, cid INT, score DOUBLE(4,1), CONSTRAINT uk_sid_cid UNIQUE KEY(sid,cid));#其中CONSTRAINT uk_sid_cid和KEY可以省略
建表后增加唯一性约束 alter table表名称 add 【constraint 约束名】 unique 【key】 (字段名);alter table表名称 add 【constraint 约束名】 unique 【key】 (字段名1,字段名2);
ALTER TABLE t_course ADD CONSTRAINT uk_cname UNIQUE KEY(cname);#其中CONSTRAINT uk_cname和KEY可以省略 ALTER TABLE t_stu ADD CONSTRAINT uk_card_id UNIQUE KEY(card_id);#其中CONSTRAINT uk_cname和KEY可以省略 ALTER TABLE t_stu_course ADD CONSTRAINT uk_sid_cid UNIQUE KEY(sid,cid);#其中CONSTRAINT uk_cname和KEY可以省略

删除唯一性约束和索引:

ALTER TABLE 表名称 DROP INDEX 唯一性约束名;#注意:如果忘记名称,可以通过“show index from 表名称;”查看

主键和唯一键的区别:

(1)主键是非空,唯一键允许空

(2)主键一个表只能一个,唯一键可以有多个

联合唯一约束(两个加起来不相同):MySQL数据库中的约束
MySQL数据库中的约束

3. 非空约束

  • NOT NULL 非空约束,规定某个字段不能为空

如果某列已经创建好,那么可以修改列语句修改:

例如:原来非空,修改为允许空

例如:原来允许空,修改为非空

4. 检查约束

注意: MySQL不支持check约束,但可以使用check约束,而没有任何效果;

例如:age tinyint check(age >20) 或 sex char(2) check(sex in(‘男’,’女’))

5. Default缺省约束

default:默认值,在插入数据时某列如果没指定其他的值,那么会将默认值添加到新记录。

如果某列已经创建好,那么可以修改列语句修改:

例如:原来有默认值,去除默认值

例如:原来没有默认值,增加默认值

综合练习:

(1) 创建表
MySQL数据库中的约束
(2) 添加字段MySQL数据库中的约束
(3) 插值
MySQL数据库中的约束
补充—修改偏移量:MySQL数据库中的约束

二、 自增列:AUTO_INCREMENT

例如:

关于自增长auto_increment:

(1)整数类型的字段才可以设置自增长。

(2)当需要产生唯一标识符或顺序值时,可设置自增长。

(3)一个表最多只能有一个自增长列

(4)自增长列必须非空

(5)自增长列必须是主键列或唯一键列。

(6)InnoDB表的自动增长列可以手动插入,但是插入的值如果是空或者0,则实际插入的将是自动增长后的值。

相关文章: