DDL(Date Definition Language)-约束


约束的定义

    约束是指一定的规则,规则就一定是不允许被违反的。
Oracle中有以下五种约束:

  • NOT NULL(非空约束)只能定义在列级
  • UNIQUE(唯一值约束)允许多个空值
  • PRIMARY KEY(主键约束)不允许空值,且唯一
  • FOREIGN KEY(外键约束)只能添加子表已有的数据
  • CHECK(检查约束)

    约束可以在建表时创建约束,也可以在建表后追加创建。

注意:

约束是表一级的限制,如果存在依赖关系,约束可以防止错误的删除数据。


非空约束(NOT NULL)

    限制列值允许、不允许为空。

修改列为非空

ALTER TABLE 表名
MODIFY(
      列名 NOT NULL 
);

取消非空约束

ALTER TABLE 表名
MODIFY(
      列名 NULL 
);

创建表时列为非空

CREATE TABLE 表名(
       列名 类型(范围) NOT NULL
);

唯一值约束(UNIQUE)

    限制列的值唯一,一个表中可以有多个列为唯一值约束。

设置唯一值约束

ALTER TABLE 表名
ADD CONSTRAINTS 约束名
UNIQUE(列名);

注意:

唯一值约束也可以复合,也就是说多列共享一个唯一值约束,删除约束也是一样的。


主键约束(PRIMARY KEY)

注意:

一张表只能有一个主键,否则会出问题。

设置主键约束

ALTER TABLE 表名
ADD CONSTRAINTS 主键名
PRIMARY KEY(列名);

删除主键约束

ALTER TABLE 表名
DROP CONSTRAINTS 主键名;

复合主键

    多列组成一个主键

ALTER TABLE 表名
ADD CONSTRAINTS 主键名
PRIMARY KEY(列名,列名···);

外键约束(FOREIGN KEY)

    限制外键列值必须是引用的主表中的主键列存在的值,不限制空值。

注意:

引用的主表中的主键必须已经设置主键约束。

示例

--部门表(设置主键)
ALTER TABLE test_depts
ADD CONSTRAINTS dept_pk
PRIMARY KEY(department_id);

--员工表(设置外键)
ALTER TABLE test_ecmps
ADD CONSTRAINTS ecmp_fk
FOREIGN KEY(dept_id)
REFERENCES test_depts(department_id);

级联删除

    级联删除是指当主表中的一条记录被删除,那么子表中所关联的记录也相应的自动删除。

ALTER TABLE test_ecmps
ADD CONSTRAINTS ecmp_deptid_fk
FOREIGN KEY(dept_id)
REFERENCES test_depts(department_id)
ON DELETE CASCADE;

创建表时添加级联删除

CREATE TABLE table_name
(
       column1 datatype null/not null,
       column2 datatype null/not null,
       ...

       CONSTRAINT fk_column
          FOREIGN KEY (column1, column2, ... column_n)
          REFERENCES parent_table (column1, column2, ... column_n)
          ON DELETE CASCADE
);

级联置空

    级联置空同级联删除一样,只是不删除,只清空。

ALTER TABLE test_ecmps
ADD CONSTRAINTS ecmp_deptid_fk
FOREIGN KEY(dept_id)
REFERENCES test_depts(department_id)
ON DELETE SET NULL;

检查约束(CHECK)

    限制自定义条件,忽略空值。

--限制员工工资不能低于400
ALTER TABLE test_ecmps
ADD CONSTRAINTS ecmp_sal_chk
CHECK(salary >= 400);

自定义约束

添加自定义约束

ALTER TABLE 表名
ADD CONSTRAINTS 约束名
约束类型(列名);

创建表时添加自定义约束

CREATE TABLE 表名(
       列名 类型(取值范围)
       CONSTRAINTS 约束名
       约束类型(列名)
);

posted @ 2021-02-22 17:43  End_Unripe  阅读(196)  评论(0编辑  收藏  举报