第三节:MySQL中的约束
- 数据库的完整性:是指数据库的准确性和一致性,存在不正确,不准确的数据,数据库就失去了完整性
- 完整性检查:就是检查数据的准确性和一致性
- 约束:就是表中数据的限制条件,它通过对表的行或列的数据做出限制,来确保表的数据的完整性。(比如:name字段中要让其用户名不重复,或者必须注册的时候需要添加邮箱等,商品表的类别必须属性类别表中的值)
- 使用条件:约束条件可以在创建表时使用,也可以在修改表的时候添加约束条件
列级约束和表级约束
- 约束可以分为列级约束和表级约束
- 列级约束:列级约束在列定义时声明,包含在列定义中,不必指定列名
- 如:create table test1(id int(11) primary key,name varchar(25));
- 表级约束:表级约束只能在列定义后声明,不包含在列定义中,必须指出需要约束的列的名称(表级约束可以给约束起名字,也可以省略,方便以后通过这个名字来删除这个约束 :constraint 约束名称)
- 如:create table test2(id int(11),name varchar(25),[constraint pk_test2] primary key (id));
- 列级约束与表级约束的区别:
- 列级约束:只能应用于一列上。
- 表级约束:可以应用于一列上,也可以应用在一个表中的多个列上。
- 注意:如果你创建的约束涉及到该表的多个属性列,则必须创建的是表级约束;如果你创建的约束涉及到表的单个属性列,则既可以定义在列级上也可以定义在表级上,此时只是SQL语句格式不同而已
主键约束
- 主键约束:主键约束实际就是一个限定词,修饰一个列或者列的组合。这样的一列或多列称为表的主键,其中由多列组合的主键称为复合主键,主键能唯一地标识表中的每一行。主键字段中出现的每一个数据都称为主键值
- 主键值:是当前行数据的唯一标识
- 主键的分类:
- 单一主键:给一个字段添加主键约束
- 复合主键:给多个字段联合添加一个主键约束(只能用表级定义)
- 主键应该遵守下面的规则:
- 每张表最多只能有一个主键
- 主键同时具有唯一约束和非空约束
- 主键能唯一地标识表中的每一行
- 一个列名只能在复合主键中出现一次
- 复合主键不能包含不必要的多余列。(当把复合主键的某一列删除后,如果剩下的列构成的主键仍然满足唯一性原则,这个复合主键是错误)
创建表时设置主键约束
- 主键是通过 PRIMARY KEY 关键字来指定的
- 列级别定义主键约束:在定义列的同时指定主键,语法规则如下
- 字段名 数据类型 primary key
- create table test1(id int(11) primary key, name varchar(55))
- 表级别定义主键约束:在定义完所有列之后指定主键,语法格式为:
- [CONSTRAINT 约束名] PRIMARY KEY [字段名]
-
create table test2 (id int(11),name varchar(55),primary key(id))
创建表时设置复合主键
- 只能在表级别定义主键约束:主键由多个字段联合组成,语法规则如下:
- primary key (字段1,字段2...字段n)
- create table test3 (name varchar(55),home varchar(55),sex int(11),primary key(name,home));
修改表时添加主键约束
- 语法规则如下:
- ALTER TABLE 表名 ADD PRIMARY KEY(列名);
- alter table test4 add primary key (id);
外键约束
- 外键约束(FOREIGN KEY):实际就是一个限定词,修饰一个列或者列的组合。这样的一列或多列称为表的外键,一个表可以有一个或多个外键,其中由多列组合的外键称为复合外键。外键字段中出现的每一个数据都称为外键值
- 外键:用来在两个表的数据之间建立链接,保持数据的一致性、完整性。(例如:部门表的主键是 id,在员工表中有 deptId 字段与这个 id 关联)
- 主表(父表):两个相关联的表,相关联字段为引用字段所在的表就是主表。
- 从表(子表):两个相关联的表,相关联字段为外键所在的表就是从表。
- 外键约束的分类:
- 单一外键:给一个字段添加外键约束
- 复合外键:给多个字段联合添加一个外键约束
- 定义外键时的规则:
- 父表必须已经存在,或者是当前正在创建的表(此时,父表和子表是同一个表,该表称为自参照表,这种结构称为自参照完整性)
- 外键名字在数据库中的唯一,不重复
- 外键字段去引用主表的某个字段的时候,被引用的字段必须具有unique约束
- 每一个外键值必须等于主表中引用字段的某个值或者为空值
- 创建表时先键父表再创建子表,删除时先键字子表,在删除父表
- 在创建表时设置外键约束的语法:[constraint 外键约束名称] foreign key 字段1...字段n references '主表名' 字段1...字段n
- 主表:create table tb_department(id int(11) primary key,name varchar(22) not null);
- 从表:create table tb_staff(id int(11) primary key,departmentID int(11),constraint fk_dept_satff foreign key (departmentID) references tb_department (id));
- 在修改表时添加外键约束语法:alter table tb_name add constaint 外键约束名称 foreign key (字段1...字段n) references 主表名 (字段1...字段n)
- alter table tb_staff1 add constraint fk_dept_satff1 foreign key (departmentID) references tb_department (id);
- 删除外键约束语法: alter table tb_name drop foreign key 外键约束名称
- alter table tb_staff1 drop foreign key fk_dept_satff1;
-
如果数据库中的外键不需要,可以删除。(删除外键就会解除主表和从表间的关联关系)
唯一约束
- 唯一约束(Unique Key):修饰某一列或者某几列,该列或复合列的所有的值都不能重复,允许为空,但只能出现一个空值
- 在创建表时设置唯一约束的语法:
- 字段名 数据类型 unique
- create table tb_student(id int(11) primary key ,name varchar(55) unique);
- 在修改表时添加唯一约束的语法:
- alter table tb_name add CONSTRAINT 唯一约束名称 unique (字段名称)
- alter table tb_student1 add constraint unique_student1 unique (name);
- 删除唯一约束的语法:
- alter table tb_name drop index 唯一约束名
- alter table tb_student1 drop index unique_student1;
默认值约束
- 默认值约束:用来指定某列的默认值,如果插入一条新的记录时没有为这个字段赋值,系统使用默认值约束的值
- 非空约束和默认值约束一样,对于每列系统都有其默认的值,添加和删除约束的就是修改系统对每列的默认的值
- 在创建表时设置默认值约束语法:
- 字段名 数据类型 default (数值)
- create table tb_teacher(id int(11),sex varchar(25) default 'man');
- 在修改表时添加默认值约束语法:
- alter table tb_name change column 字段名 字段名 数据类型 default 默认值
- alter table tb_teacher change column sex sex varchar(25) default 'woman';
- 删除默认值约束语法:
- alter table tb_name change column 字段名 字段名 数据类型 default NULL
- alter table tb_teacher change column sex sex varchar(25) default NULL;
非空约束
- 非空约束(NOT NULL):用来修饰某列的限定词,来约束某列的取值不能为空。对于使用了非空约束的字段,在添加数据时没有指定值,数据库系统就会报错。
- 非空约束和默认值约束一样,对于每列都有其默认的值,添加和删除约束的就是修改系统对每列的默认的值
- 在创建表时设置非空约束语法:
- 字段名 数据类型 not null
- create table tb_teacher1 (id int(11) primary key,name varchar(25) not null);
- 在修改表时添加非空约束:语法:
- alter table tb_name change column 字段 字段 数据类型 not null
- alter table tb_teacher2 change column name name varchar(25) not null;
- 删除非空约束:语法:
- alter table tb_name change column 字段 字段 数据类型 null
- alter table tb_teacher2 change column name name varchar(25) null;
自动增长约束
- ATUO_INCREMENT:是一个修饰词限定词,一张表只能有一个字段使用ATUO_INCREMENT修饰,该列一般就是主键;使用这个约束的字段只能是整数类型,可以来完成值得自动增长,默认值是1
- 在创建表时添加自动增长语法:
- 字段 类型 主键约束 auto_increment
- create table teacher(id int(11) primary key auto_increment ,name varchar(25));
- 修改表时添加自动增长语法:
- alter table tb_name modify 字段 数据类型 auto_increment;
- alter table teacher1 modify id int auto_increment;
- 删除自动增长语法:
- alter table tb_name modify id int;
- alter table teacher modify id int;

浙公网安备 33010602011771号