MYSQL中约束
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MySQL 中约束保存在 information_schema 数据库的 table_constraints 中,可 以通过该表查询约束信息;
约束主要完成对数据的检验,保证数据库数据的完整性;如果有相互依赖数据,保证该数据不被 删除。
常用五类约束:’’ not null:非空约束,指定某列不为空 unique: 唯一约束,指定某列和几列组合的数据不能重复 primary key:主键约束,指定某列的数据不能重复、唯一 foreign key:外键,指定该列记录属于主表中的一条记录,参照另一条数据 check:检查,指定一个表达式,用于检验指定数据 注意: MySQL 不支持 check 约束,但可以使用 check 约束,而没有任何效果;
/*主键约束*/ id int primary key, name varchar(25) );
create table temp2( id int not null, name varchar(25), pwd varchar(15), constraint pk_temp_id primary key(id)
id int auto_increment primary key, name varchar(20), classes_name varchar(20), classes_number int, /*表级别联合外键*/ foreign key(classes_name, classes_number) references classes(name, number) on delete cascade );
5、 check 约束 MySQL 可以使用 check 约束,但 check 约束对数据验证没有任何作用。 create table temp(
id int auto_increment, name varchar(20), age int, primary key(id), /*check 约束*/ check(age > 20) ); 上面 check 约束要求 age 必须大于 20,但没有任何作用。但是创建 table 的时候没有任何错 误或警告。
);
组合模式: create table temp2(
id int not null, name varchar(25), pwd varchar(15), constraint pk_temp_id primary key(name, pwd)
);
alter 删除主键约束 alter table temp drop primary key;
alter 添加主键 alter table temp add primary key(name, pwd);
alter 修改列为主键 alter table temp modify id int primary key;
设置主键自增 create table temp(
id int auto_increment primary key, name varchar(20), pwd varchar(16) ); auto_increment 自增模式,设置自增后在插入数据的时候就不需要给该列插入值了。
id int not null, name varchar(255) not null default ‘abc’, sex char null ) 上面的 table 加上了非空约束,也可以用 alter 来修改或增加非空约束 增加非空约束 alter table temp modify sex varchar(2) not null;
Baidu Nhomakorabea
4、 foreign key 约束 外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的 两个字段之间的参照关系。 也就是说从表的外键值必须在主表中能找到或者为空。 当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据,需要先删除从表中依 赖该记录的数据, 然后才可以删除主表的数据。还有一种就是级联删除子表数据。 注意:外键约束的参照列,在主表中引用的只能是主键或唯一键约束的列,假定引用的主表列不 是唯一的记录, 那么从表引用的数据就不确定记录的位置。同一个表可以有多个外键约束。 创建外键约束: 主表 create table classes(
通常先建主表,然后再建从表,这样从表的参照引用的表才存在。
表级别创建外键约束: create table student(
id int auto_increment primary key, name varchar(25),
classes_id int, foreign key(classes_id) references classes(id) ); 上面的创建外键的方法没有指定约束名称,系统会默认给外键约束分配外键约束名称,命名为 student_ibfk_n, 其中 student 是表名,n 是当前约束从 1 开始的整数。
自引用、自关联(递归表、树状表) create table tree(
id int auto_increment primary key, name varchar(50), parent_id int, foreign key(parent_id) references tree(id) );
级联删除:删除主表的数据时,关联的从表数据也删除,则需要在建立外键约束的后面增加 on delete cascade 或 on delete set null,前者是级联删除,后者是将从表的关联列的值设置为 null。 create table student(
根据约束数据列限制,约束可分为: 单列约束:每个约束只约束一列 多列约束:每个约束约束多列数据
1、 not null 约束 非空约束用于确保当前列的值不为空值,非空约束只能出现在表对象的列上。 Null 类型特征: 所有的类型的值都可以是 null,包括 int、float 等数据类型 空字符串””是不等于 null,0 也不等于 null create table temp(
同一个表可以有多个唯一约束,多个列组合的约束。在创建唯一约束的时候,如果不给唯一约束 名称,就默认和列名相同。 MySQL 会给唯一约束的列上默认创建一个唯一索引; create table temp (
id int not null, name varchar(25), password varchar(16), --使用表级约束语法, constraint uk_name_pwd unique(name, password) ); 表示用户名和密码组合不能重复 添加唯一约束 alter table temp add unique(name, password); alter table temp modify name varchar(25) unique; 删除约束 alter table temp drop index name;
3、 primary key 主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值;如果 的多列组合的主键约束, 那么这些列都不允许为空值,并且组合的值不允许重复。 每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别上创建。MySQL 的主键名总是 PRIMARY, 当创建主键约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。 列模式: create table temp(
取消非空约束 alter table temp modify sex varchar(2) null;
取消非空约束,增加默认值 alter table temp modify sex varchar(2) default ‘abc’ null;
2、 unique 唯一约束是指定 table 的列或列组合不能重复,保证数据的唯一性。虽然唯一约束不允许出现 重复的值,但是可以为多个 null
多列外键组合,必须用表级别约束语法: create table classes(
id int, name varchar(20), number int, primary key(name, number) ); create table student( id int auto_increment primary key, name varchar(20), classes_name varchar(20), classes_number int, /*表级别联合外键*/ foreign key(classes_name, classes_number) references classes(name, number) );
指定约束名称: create table student(
id int auto_increment primary key, name varchar(25), classes_id int, /*指定约束名称*/ constraint fk_classes_id foreign key(classes_id) references classes(id) );
删除外键约束: alter table student drop foreign key student_ibfk_1; alter table student drop foreign key fk_student_id;
增加外键约束
alter table student add foreign key(classes_name, classes_number) references classes(name, number);
id int auto_increment primary key, name varchar(20) ); 从表 create table student( id int auto_increment, name varchar(22), constraint pk_id primary key(id), classes_id int references classes(id) );
约束主要完成对数据的检验,保证数据库数据的完整性;如果有相互依赖数据,保证该数据不被 删除。
常用五类约束:’’ not null:非空约束,指定某列不为空 unique: 唯一约束,指定某列和几列组合的数据不能重复 primary key:主键约束,指定某列的数据不能重复、唯一 foreign key:外键,指定该列记录属于主表中的一条记录,参照另一条数据 check:检查,指定一个表达式,用于检验指定数据 注意: MySQL 不支持 check 约束,但可以使用 check 约束,而没有任何效果;
/*主键约束*/ id int primary key, name varchar(25) );
create table temp2( id int not null, name varchar(25), pwd varchar(15), constraint pk_temp_id primary key(id)
id int auto_increment primary key, name varchar(20), classes_name varchar(20), classes_number int, /*表级别联合外键*/ foreign key(classes_name, classes_number) references classes(name, number) on delete cascade );
5、 check 约束 MySQL 可以使用 check 约束,但 check 约束对数据验证没有任何作用。 create table temp(
id int auto_increment, name varchar(20), age int, primary key(id), /*check 约束*/ check(age > 20) ); 上面 check 约束要求 age 必须大于 20,但没有任何作用。但是创建 table 的时候没有任何错 误或警告。
);
组合模式: create table temp2(
id int not null, name varchar(25), pwd varchar(15), constraint pk_temp_id primary key(name, pwd)
);
alter 删除主键约束 alter table temp drop primary key;
alter 添加主键 alter table temp add primary key(name, pwd);
alter 修改列为主键 alter table temp modify id int primary key;
设置主键自增 create table temp(
id int auto_increment primary key, name varchar(20), pwd varchar(16) ); auto_increment 自增模式,设置自增后在插入数据的时候就不需要给该列插入值了。
id int not null, name varchar(255) not null default ‘abc’, sex char null ) 上面的 table 加上了非空约束,也可以用 alter 来修改或增加非空约束 增加非空约束 alter table temp modify sex varchar(2) not null;
Baidu Nhomakorabea
4、 foreign key 约束 外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的 两个字段之间的参照关系。 也就是说从表的外键值必须在主表中能找到或者为空。 当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据,需要先删除从表中依 赖该记录的数据, 然后才可以删除主表的数据。还有一种就是级联删除子表数据。 注意:外键约束的参照列,在主表中引用的只能是主键或唯一键约束的列,假定引用的主表列不 是唯一的记录, 那么从表引用的数据就不确定记录的位置。同一个表可以有多个外键约束。 创建外键约束: 主表 create table classes(
通常先建主表,然后再建从表,这样从表的参照引用的表才存在。
表级别创建外键约束: create table student(
id int auto_increment primary key, name varchar(25),
classes_id int, foreign key(classes_id) references classes(id) ); 上面的创建外键的方法没有指定约束名称,系统会默认给外键约束分配外键约束名称,命名为 student_ibfk_n, 其中 student 是表名,n 是当前约束从 1 开始的整数。
自引用、自关联(递归表、树状表) create table tree(
id int auto_increment primary key, name varchar(50), parent_id int, foreign key(parent_id) references tree(id) );
级联删除:删除主表的数据时,关联的从表数据也删除,则需要在建立外键约束的后面增加 on delete cascade 或 on delete set null,前者是级联删除,后者是将从表的关联列的值设置为 null。 create table student(
根据约束数据列限制,约束可分为: 单列约束:每个约束只约束一列 多列约束:每个约束约束多列数据
1、 not null 约束 非空约束用于确保当前列的值不为空值,非空约束只能出现在表对象的列上。 Null 类型特征: 所有的类型的值都可以是 null,包括 int、float 等数据类型 空字符串””是不等于 null,0 也不等于 null create table temp(
同一个表可以有多个唯一约束,多个列组合的约束。在创建唯一约束的时候,如果不给唯一约束 名称,就默认和列名相同。 MySQL 会给唯一约束的列上默认创建一个唯一索引; create table temp (
id int not null, name varchar(25), password varchar(16), --使用表级约束语法, constraint uk_name_pwd unique(name, password) ); 表示用户名和密码组合不能重复 添加唯一约束 alter table temp add unique(name, password); alter table temp modify name varchar(25) unique; 删除约束 alter table temp drop index name;
3、 primary key 主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值;如果 的多列组合的主键约束, 那么这些列都不允许为空值,并且组合的值不允许重复。 每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别上创建。MySQL 的主键名总是 PRIMARY, 当创建主键约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。 列模式: create table temp(
取消非空约束 alter table temp modify sex varchar(2) null;
取消非空约束,增加默认值 alter table temp modify sex varchar(2) default ‘abc’ null;
2、 unique 唯一约束是指定 table 的列或列组合不能重复,保证数据的唯一性。虽然唯一约束不允许出现 重复的值,但是可以为多个 null
多列外键组合,必须用表级别约束语法: create table classes(
id int, name varchar(20), number int, primary key(name, number) ); create table student( id int auto_increment primary key, name varchar(20), classes_name varchar(20), classes_number int, /*表级别联合外键*/ foreign key(classes_name, classes_number) references classes(name, number) );
指定约束名称: create table student(
id int auto_increment primary key, name varchar(25), classes_id int, /*指定约束名称*/ constraint fk_classes_id foreign key(classes_id) references classes(id) );
删除外键约束: alter table student drop foreign key student_ibfk_1; alter table student drop foreign key fk_student_id;
增加外键约束
alter table student add foreign key(classes_name, classes_number) references classes(name, number);
id int auto_increment primary key, name varchar(20) ); 从表 create table student( id int auto_increment, name varchar(22), constraint pk_id primary key(id), classes_id int references classes(id) );