随笔-数据库-约束

  • 时间:
  • 浏览:
  • 来源:互联网

目录

1、什么是约束?

2、约束特点

3、创建约束

3.1、建表时创建列级约束

3.2、建表时创建表级约束

3.3、建表后加约束

4、约束命名

4.1、命名原则

4.1、列级约束命名

4.2、表级约束命名

4.3、建表后加约束

5、约束操作


1、什么是约束?

    约束是一种自动保持数据库完整性的一种方法,定义了数据库表及表字段中数据的限制条件,约束分为列级约束和表级约束,区别如下:

2、约束特点

  • 主键约束(Primay Key Coustraint):字段值唯一并且不为空。
  • 唯一约束(Unique Counstraint):字段值唯一,值可为空,并且表中可存在多个null值。
  • 检查约束(Check Counstraint):对字段值进行长度、大小等限制。
  • 外键约束(Foreign Key Counstraint):建立两个表之间的关联关系。主表字段值必须是唯一的。
  • 默认(Default Counstraint):为字段设置默认值。当添加多个约束时,默认约束必须为第一个。
  • 非空约束:限定字段值不为空。

3、创建约束

3.1、建表时创建列级约束

-- 创建列级约束
create table student_one(
       stuid number primary key, -- 主键约束
       studentno varchar2(100) unique,  -- 唯一约束
       studentname varchar2(200) not null check(length(studentname) > 2), -- 非空约束 检查约束 (多个约束通过空格分开)
       createtime date default sysdate -- 默认约束
);

3.2、建表时创建表级约束

create table class_one(
       classid number primary key, -- 主键约束
       classname varchar2(100) unique  -- 唯一约束
);
-- 创建表级约束
create table student_two(
       stuid number,
       studentno varchar2(100), 
       studentname varchar2(200) not null, -- 非空约束 
       createtime date default sysdate, -- 默认约束
       classid number,
       primary key(stuid), -- 主键约束
       unique(studentno), -- 唯一约束
       check(length(studentname) > 2), -- 检查约束 
       foreign key(classid) references class_one(classid)-- 外键约束 (多个约束通过逗号分开)
);

3.3、建表后加约束

create table class_three(
       classid number primary key, -- 主键约束
       classname varchar2(100) unique  -- 唯一约束
);

create table student_three(
       stuid number,
       studentno varchar2(100), 
       studentname varchar2(200),
       createtime date,
       classid number
);

-- 主键约束
alter table student_three add primary key(stuid);
-- 唯一约束
alter table student_three add unique(studentno);
-- 检查约束
alter table student_three add check(length(studentname) > 2);
-- 外键约束(一般外键约束)
alter table student_three add foreign key(classid) references class_three(classid);
-- 外键约束(删除主表时也同时删除子表对应记录)
alter table student_three add foreign key(classid) references class_three(classid) on delete cascade;
-- 外键约束(删除主表时, 将子表的字段设置为null)
alter table student_three add foreign key(classid) references class_three(classid) on delete set null;
-- 默认约束
alter table student_three modify createtime default sysdate;
-- 非空约束
alter table student_three modify studentname not null;

4、约束命名

4.1、命名原则

  • 主键约束:PK_字段名
  • 唯一约束:UQ_字段名
  • 检查约束:CK_字段名
  • 非空约束:NN_字段名
  • default(默认)约束:无
  • 外键约束:FK_子表字段名_主表

约束命名:constraint + 约束名称

由于约束名称是全表共用的,所以建议加约束名时(当多表存在的字段名称重复)加上表名或其他标识区分,以下事例中由于表不多,所以未加表名区分。

4.1、列级约束命名

create table student_one(
       stuid number constraint pk_stuid primary key, -- 主键约束
       studentno varchar2(100) constraint uq_studentno unique,  -- 唯一约束
       studentname varchar2(200) constraint nn_studentname not null constraint ck_studentname check(length(studentname) > 2), -- 非空约束 检查约束 (多个约束通过空格分开)
       createtime date default sysdate -- 默认约束
);

4.2、表级约束命名

create table class_one(
       classid number primary key, -- 主键约束
       classname varchar2(100) unique  -- 唯一约束
);
-- 创建表级约束
create table student_two(
       stuid number,
       studentno varchar2(100), 
       studentname varchar2(200) not null, -- 非空约束 
       createtime date default sysdate, -- 默认约束
       classid number,
       constraint pk_stuid primary key(stuid), -- 主键约束
       constraint uq_studentno unique(studentno), -- 唯一约束
       constraint ck_studentname check(length(studentname) > 2), -- 检查约束 
       constraint fk_classid_classone foreign key(classid) references class_one(classid)-- 外键约束 (多个约束通过逗号分开)
);

4.3、建表后加约束

create table class_four(
       classid number primary key, -- 主键约束
       classname varchar2(100) unique  -- 唯一约束
);

create table student_four(
       stuid number,
       studentno varchar2(100), 
       studentname varchar2(200),
       createtime date,
       classid number
);

-- 主键约束
alter table student_four add constraints pk_stuid primary key(stuid);
-- 唯一约束
alter table student_four add constraints uq_studentno unique(studentno);
-- 检查约束
alter table student_four add constraints ck_studentname check(length(studentname) > 2);
-- 外键约束(一般外键约束)
alter table student_four add constraint fk_classid_classfour foreign key(classid) references class_four(classid);
-- 外键约束(删除主表时也同时删除子表对应记录)
alter table student_four add constraint fk_classid_classfour foreign key(classid) references class_four(classid) on delete cascade;
-- 外键约束(删除主表时, 将子表的字段设置为null)
alter table student_four add constraint fk_classid_classfour foreign key(classid) references class_four(classid) on delete set null;
-- 默认约束
alter table student_four modify createtime default sysdate;
-- 非空约束
alter table student_four modify studentname constraints nn_studentname not null;

5、约束操作

-- 删除约束
alter table student_four drop constraints pk_stuid;
alter table student_four drop constraints uq_studentno;
alter table student_four drop constraints ck_studentname;
alter table student_four drop constraints fk_classid_classfour;
alter table student_four drop constraints nn_studentname;
alter table student_four modify studentname default null; -- 特殊

-- 启用约束
alter table student_four enable constraints pk_stuid;
alter table student_four enable constraints uq_studentno;
alter table student_four enable constraints ck_studentname;
-- 如果被引用了需要加 CASCADE
alter table student_four enable constraints fk_classid_classfour /*CASCADE*/;
alter table student_four enable constraints nn_studentname;

-- 关闭约束
alter table student_four disable constraints pk_stuid;
alter table student_four disable constraints uq_studentno;
alter table student_four disable constraints ck_studentname;
-- 如果被引用了需要加 CASCADE
alter table student_four disable constraints fk_classid_classfour /*CASCADE*/;
alter table student_four disable constraints nn_studentname;

 

本文链接http://element-ui.cn/news/show-367381.aspx