sql-约束constraint(非空,唯一,主键,外键,检查)自学笔记

来源:互联网 发布:java源代码文件调试 编辑:程序博客网 时间:2024/06/07 10:00

约束(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);




1 0
原创粉丝点击