约束(constraint)即完整性约束
在表上强制执行的数据校验规则,
对表执行DML(insert,update,delete)操作时,如果不符合规则则无法执行。
种类:
非空约束 NOT NULL -> NN
唯一性约束 UNIQUE KEY -> UK
主键约束 PRIMARY KEY -> PK
外键约束 FOREIGN KEY -> FK
检查约束 CHECK KEY -> CK
■ 非空 NOT NULL
要求此项目数据内容不能为空
用法:
1.建表时直接追加
create table user{
'user_id' varchar(8) not null COMMENT '用户id',
'user_name' varchar(32) not null COMMENT '用户名',
'password' varchar(128) COMMENT '密码',
primary key ('user_id') ,
unique key ('user_name')
} ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.对已存在的表增加非空约束
ALTER table user MODIFY(‘password’ varchar(128) not Null);
3.对已存在的表删除非空约束
ALTER table user MODIFY(‘password’ varchar(128) Null);
■ 唯一性约束 unique key
字段或字段的组合不能有重复值(不包括null)
用法
1.建表时直接追加
create table user{
'user_id' varchar(8) not null COMMENT '用户id',
'user_name' varchar(32) not null COMMENT '用户名',
'password' varchar(128) COMMENT '密码',
primary key ('user_id') ,
unique key ('user_name')
} ENGINE=InnoDB DEFAULT CHARSET=utf8;
或
create table user{
'user_id' varchar(8) not null COMMENT '用户id',
'user_name' varchar(32) not null uniqueCOMMENT '用户名',
'password' varchar(128) COMMENT '密码',
primary key ('user_id')
} ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.对已存在的表增加唯一性约束
ALTER table user ADD unique('user_name');
3.同时对多个字段增加唯一性约束
ALTER table user ADD constraint user_namepwd
unique('user_name','password');
■ 主键约束 PRIMARY KEY
一个表中只能有一个主键(可以是单列,也可以是多个字段的组合)
主键:对应的字段既要是not null也要是unique key;尽量是单列;对系统无意义的数据;不要更新主键;不要是动态数据(如时间戳);尽量是自动生成数据,
用途:仅是唯一标识行
1.建表时直接追加
create table user{
'user_id' varchar(8) not null primary key COMMENT '用户id',
'user_name' varchar(32) not null COMMENT '用户名',
'password' varchar(128) COMMENT '密码',
unique key ('user_name')
} ENGINE=InnoDB DEFAULT CHARSET=utf8;
或
create table user{
'user_id' varchar(8) not null COMMENT '用户id',
'user_name' varchar(32) not null COMMENT '用户名',
'password' varchar(128) COMMENT '密码',
primary key ('user_id') ,
unique key ('user_name')
} ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.对已存在的表增加主键约束
create table user{
'user_id' varchar(8) not null COMMENT '用户id',
'user_name' varchar(32) not null COMMENT '用户名',
'password' varchar(128) COMMENT '密码',
unique key ('user_name')
} ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE user ADD constraint pkid primary key ('user_id') ;
3.删除主键
Alter table user Drop Constraint PrimaryKey(默认名);
Alter table user Drop Constraint pkid (主键约束的别名);
■ 外键约束 FOREIGN KEY
两个表的字段,或一个表的2个字段保持相关的关系
主表/父表 PK
从表/子表 FK (子表参照父表数据)
注意事项:子表列的值必须从主表得到,不能为null;主表字段的数据被子表参照使用后,数据不能删除。
1.建表时直接追加
create table note{
'note_id' varchar(8) COMMENT '笔记id',
'notebook_id' varchar(8) COMMENT '笔记本id',
'user_id' varchar(8) COMMENT '用户id',
'note_name' varchar(128) COMMENT '笔记名称',
'note_title' varchar(256) not nullCOMMENT '笔记标题',
'note_text' text not null COMMENT '笔记内容',
'note_status' varchar(8) not null COMMENT '笔记状态',
'creat_time' date default sysdate COMMENT '创建时间',
'current_fixtime' date default sysdate COMMENT '最后修改时间',
primary key ('note_id'),
CONSTRAINT `FK_note_notebookid` FOREIGN KEY (`notebook_id`) REFERENCES `notebook` (`notebook_id`),
} ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.对已存在的表增加外键约束
ALTER TABLE note ADD constraint `FK_note_userid` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`);
■ 检查约束 check
自定义硬性的检查条件,不满足时DML语句不执行。
ALTER TABLE note ADD CONSTRAINT 'check_notebook_id' CHECK('notebook_id' >100);