约束管理
数据完整性指定的是数据的一致性和正确性。
MySQL中常用六类约束:
not null : 非空约束,指定某列值不为空。 非空约束用于确保当前列的值不为空值,非空约束只能出现在对象的列上。对于使用了非空约束的字段,如果用户再添加数据时没有指定值,数据库系统会报错。格式如下:
column_name data_type not null
unique : 唯一约束,指定某列和几列组合的数据值不能重复。要求该列唯一,允许为空。格式如下:
column_name data_type unique
primary key : 主键约束,指定某列的数据不能重复、唯一且不为null。主键约束相当于唯一约束与非空约束的组合,主键约束列不允许重复,也不允许出现空值。格式如下:
column_name data_type primary key
foreign key : 外键,指定该列记录属于主表中某列的记录,参考另一条数据。外键用来在两个表的数据之间建立连接,它可以是一列或者多列。一个表可以有一个或多个外键。外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每个外键值必须等于另一个表中主键列的某个值。外键:它是表中的一个字段,他可以不是本表的主键,但对应另外一个表的主键或唯一约束。
主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的表既是主表。
从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的表既是从表。
[constraint<外键名>] foreign key (字段名1[,字段名2,...]) references <主表名> (主键列1[,主键列2,...])
注:“外键名”为定义的外键约束的名称,一个表中不能有多个相同名称的外键;
“字段名”表示子表需要添加外键约束的字段列;
“主表名”即被子表外键所依赖的表的名称;
“主键列”表示主表中定义的主键列,或者主键列组合。
check : 检查,指定一个表达式,用于检验指定数据。(mysql不支持)
default : 默认约束,指定某列的默认值。格式如下:
column_name data_type default default_value
建表时添加约束
非空约束:
create table table_name (column_name data_type not null );
唯一约束:
create table table_name (column_name data_type unique);
主键约束:
create table table_name (column_name data_type primary key);
主键自增:
create table table_name ( column_name1 data_type1 primary key auto_increment, column_name2 data_type2 not null )auto_increment=n;
注意:column_name1 为主键,n表示自增的初始值。设置自增后,在插入数据的时候不需要给该列插入值。
非建表时操作约束
非空约束:
--添加 alter table table_name modify column_name data_type not null --删除 alter table table_name modify column_name data_type null
唯一约束:
--添加 alter table table_name add [constraint<约束名>] unique (column_name) ; --修改 alter table table_name modify column_name data_type unique; --删除 alter table table_name drop index 约束名;
注:删除时必须知道约束的名字。
主键约束:
--添加 alter table table_name add [constraint<约束名>] primary key (column_name) ; --修改 alter table table_name modify column_name data_type primary key; --删除 alter table table_name drop primary key;
外键约束:
--添加 alter table table_name add [constraint<约束名>] foreign key (column_name) references (主)table_name (column_name); --删除 alter table table_name drop foreign key 约束名;