表约束
完整性是指数据的准确性和一致性,而完整性检查就是指检查数据的准确性和一致性。mysql数据库管理系统提供了一直机制来检查数据库中的数据是否满足规定的条件。以保证数据库中数据的准确性和一致性,这种机制就是约束。
mysql所支持的完整性约束
NOT NULL(NK)
DEFAULT
UNIQUE KEY(UK)约束字段的值是唯一的
PRIMATYKEY(PK)
AUTO_INCREMENT
FOREIGN KEY(FK)
不支持check约束,即可以使用check约束,但是没有效果约束:
单列约束
多列约束
1、NOT NULL (NK)
在创建表的时候,指定属性为not null即可
例:
| create table t_name( column type not null ) create table t_notnull{ id int not null, name varchar(20) } insert into t_notnull(name) values("dsagdfs"); |
会发现对应的id被置为0
alter table t_notnull modify id int;
insert into t_notnull(name) values("fdgdf");
发现对应的id为null
2、DEFAULT
创建表时指定
| create table t_name( column type default 字段 类型 默认值 ) |
例:
| create table t_default( id int not null, name varchar(20) default 'test' ) insert into t_default(id) values(1); insert into t_dedault(name) values('name'); |
3、AUTO_INCREMENT
| create table t_name( column type auto_increment ) create table t_auto( id int primay key auto_increment, name varchar(20) default 'test' ) |
注意:使用的时候该列要指定为primary key,该列是数值列
4、UNIQUE UK
| create table t_name( column type unique ) create table t_name( column type constraint uk_column unique(column) ) |
constraint:约束
在为约束设置标示符时,推崇使用“约束缩写_字段名”的格式
| create table t_unique( id int primary key, name varchar(20) unique ) |
注意:1、auto_increment显然也能实现unique的功能,但是没有unique灵活,unique的列不必是主键列,也不一定是数字列,
2、varchar必须指定字节数,否则会失败
5、primary key
| 单字段主键 create table t_name( column type primary key ) create table t_name( column type contraint pk_column primary key(column) ) 多字段主键 create table t_name( column1 type , column2 type ... contraint pk_column1_column2 primarykey(column1,column2) ) |
6、foreign key
前五个约束都是都是单表,而外键约束牵涉到了多个表。
设置外键约束的两个表之间会有父子关系,即子表中某个字段的取值范围由父表所决定。
在具体设置FK约束时,设置FK约束的字段必须依赖于数据库中的已经存在的父表的主键,同时外键可以为null
create tablet_name(
column1 type,
column2 type,
constraint fk_column1 foreign key(column1) references tablename (columname)
)
column1:外键,columnname:父表中设置主键约束的字段