学习内容:数据表的完整性约束
1月26日
一、数据完整性及其分类
1.数据完整性分类
- 实体完整性:通过表中字段或字段组合将表中各记录的唯一性区别开来。
实体完整性的实施方法是添加 primary key 约束和 unique 约束。 - 域完整性:表中特定字段的值是有效取值。尽管每个字段都有数据类型,但并非满足该数据类型的值都是有效的。如:学生出生日期不可能晚于录入数据当天日期。
域完整性的实施方法是添加 check 约束和 default 约束。 - 引用完整性:被引用表中的主关键字和引用表中的外部主关键字之间的关系。
引用完整性的实施方法是添加 foreign key 约束。
2.约束条件
(1)对列的控制
主键约束(PRIMARY KEY),唯一性约束(UNIQUE)
(2)对列数据的控制
检查约束(CHECK),默认值约束(DEFAULT),非空约束(NOT NULL)
(3)关系控制
外键约束(FOREIGN KEY)
二、主键约束
主键约束(primary key constraint)要求主键列的数据唯一,并且不为空。主键分为两种:单字段和多字段联合主键。
1.创建表时添加主键
一个表中只能有一个主键。
注意:数据类型为image 和text 的字段列不能定义为主键。
创建主键的方法是创建表时在数据列的后面直接添加关键字 primary key,语法格式:
字段名 数据类型 primary key
2.修改表时添加主键
语法格式:
alter table 表名
add constraint 约束名 primary key(字段名);
- constraint:创建约束的关键字。
- 约束名:设置主键约束的名称。
注:数据表创建完成后,若需给某个字段创建主键约束,该字段必须不允许为空,若为空,则在创建主键约束时会报错。
3.创建联合主键约束
若对多字段定义了主键约束,则一列中的值可能会重复,但来自主键约束中的所有列的任何值组合必须唯一。
语法格式:(定义完所有字段列后添加主键)
primary key[字段1,字段2,···,字段n]
4.删除表中的主键
语法格式:
alter table 表名
drop primary key;
三、外键约束
外键用来在两个表的数据之间建立链接,可以是一列或者多列。首先,被引用表的关联字段上应该创建primary key 约束或unique 约束,然后在应用表的字段上创建foreign约束,从而创建外键。
主键所在的表为主表(父表);外键所在的表为从表(子表)。
1.创建表时添加外键约束
语法格式:
constraint <外键名> foreign key (字段名1[,字段名2,···])
references <主表名> (主键列1[,主键列2,···])
2.修改表时添加外键约束
语法格式:
alter table 表名
add constraint 外键名 foreign key(字段名1[,字段名2,···])
references 主表名 (主键列1[,主键列2,···])
3.删除表中外键约束
语法格式:
alter table 表名
drop foreign key 外键名;
四、默认约束
default constraint 用于指定某列的默认值。字段只有在不可为空的时候才能设置默认约束。
1.创建表时添加默认约束
语法格式:
create table 表名
(
字段1 数据类型 default constant_expression,
字段2 数据类型,
字段3 数据类型,
···
);
- default :通常放在字段的数据类型之后。
- constant_expression:常量表达式,可以是一个具体的值,也可以是通过表达式得到一个值,但必须确保与数据类型相匹配。
2.修改表时添加默认约束
语法格式:
alter table 表名
alter 字段名 set default constant_expression;
3.删除表中的默认约束
语法格式:
alter table 表名
alter 字段名 drop default;
五、唯一性约束
对于非主键字段应使用唯一性约束,即 UNIQUE约束。
1.创建表时添加
只需在字段的数据类型后面加上 UNIQUE关键字 即可。声明为PRIMARY KEY的列不允许有空值,但声明为 UNIQUE的字段允许空值(NULL)存在。
2.修改表时添加
语法格式:
alter table 表名
add constraint 约束的名字 unique(字段名)
- constraint 约束的名字:该语句可以省略,省略后系统会为添加的约束自动生成一个名字。如果想要同时为多个列设置唯一性约束,就要省略该语句,名字由系统自动生成。
3.删除表中唯一性约束
语法格式:
alter table 表名
drop [index|key] 约束名称;
六、非空约束
非空性是指字段的值不能为空值。
1.创建表时添加
在字段的数据类型后添加 NOT NULL。
2.修改表时添加
语法格式:
alter table 表名
modify 字段名 数据类型 NOT NULL;
3.删除表中的非空约束
语法格式:
alter table 表名
modify 字段名 数据类型;
七、字段的自增属性
1.创建表时添加
只需在字段的数据类型后面添加 AUTO_INCREMENT 关键字。
2.修改表时添加
语法格式:
alter table 表名
change 字段名 字段名 数据类型 UNSIGNED AUTO_INCREMENT;
3.删除表中自增属性
语法格式:
alter table 表名
change 字段名 字段名 数据类型 UNSIGNED NOT NULL;