约束(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 nullprimary 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),
unique key('note_name')
} 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);