Oracle 19C学习

您所在的位置:网站首页 oracle常用的约束 Oracle 19C学习

Oracle 19C学习

2024-07-13 04:20| 来源: 网络整理| 查看: 265

什么是约束

约束就是在表上强制执行的规则。约束可以防止存在相关性时产生误删除或者误操作。

Oracle包括以下约束: NOT NULL 非空约束,此列不允许有空值。 UNIQUE 唯一约束,不能有重复项。 PRIMARY KEY 主键约束,一个表具有标识性的列,非空且唯一。 FOREIGN KEY 外键约束,在列和被引用的表的列之间建立一个外键关系。 CHECK 检查约束,当条件满足时,才能向改列插入数据或者更新数据。

约束的相关规则: 约束的名字描述性好 可以在一下任何时刻创建约束: 创建表的时候创建 创建表后,可以补充约束的定义 可以在列或者表级别定义约束。 可以在数据字典中查看相关约束的定义。

定义列级约束

引用一个列,并在有用列的范围内定义,可以定义任何类型的约束条件。

CREATE TABLE TEST_1 ( ID number(6) PRIMARY KEY, NAME VARCHAR2(50));

定义表级约束

引用一个或者多个列,并在该表的列定义中分别进行定义,可以定义除了NOT NULL的任何约束。

-- 先创建列,再定义约束 CREATE TABLE TEST_2 ( ID NUMBER(6), FIRST_NAME VARCHAR2(50), CONSTRAINT TEST_2_ID_PK PRIMARY KEY (ID));

非空约束的定义

CREATE TABLE NAME ( FIELD_NAME TYPE NOT NULL);

或者

CREATE TABLE NAME( FIELD_NAME TYPE CONTRAINT TABLE_COLNAME_NN NOT NULL);

CREATE TABLE TEST_4 ( ID NUMBER NOT NULL , NAME VARCHAR2(40) CONSTRAINT NAME_NN NOT NULL);

唯一键UNIQUE约束

CREATE TABLE NAME ( FIELD_NAME TYPE UNIQUE);

或者

CREATE TABLE NAME( FIELD_NAME TYPE CONTRAINT NAME_UK UNIQUE);

CREATE TABLE TEST_5( ID NUMBER UNIQUE, NAME VARCHAR2(50) CONSTRAINT TABLE_COLNAME_UK UNIQUE);

主键PRIMARY KEY约束

CREATE TABLE NAME ( FIELD_NAME TYPE PRIMARY KEY);

或者

CREATE TABLE NAME( FIELD_NAME TYPE CONTRAINT TABLE_COLNAME_PK PRIMARY KEY);

CREATE TABLE TEST_6 ( ID NUMBER CONSTRAINT TEST_6_ID_PK PRIMARY KEY);

外键FOREIGN KEY约束

外键将定义一个列或者列的组合作为外键,并建立与同一个表或不同表的主键之间的关系。 被引用、提供主键的表称为父表。参考父表的主键来定义外键的表称为子表。

CONSTRAINT 外键名 FOREIGN KEY (子表的列) REFERENCES 父表名(父表的主键列));

这种如果子表有对应数据,删除主表的纪录会把子表中对应的记录级联删除。 CONSTRAINT 外键名 FOREIGN KEY (子表的列) REFERENCES 父表名(父表的主键列) ON DELETE CASCADE);

这种如果子表有对应数据,删除主表的纪录会把子表中对应的记录设置为NULL。 CONSTRAINT 外键名 FOREIGN KEY (子表的列) REFERENCES 父表名(父表的主键列) ON DELETE SET NULL);

CREATE TABLE TEST_DEPT( ID NUMBER PRIMARY KEY, DEPT_NAME VARCHAR2(50) NOT NULL ); CREATE TABLE TEST_EMP( ID NUMBER PRIMARY KEY, EMP_NAME VARCHAR2(50) NOT NULL, DEPT_ID NUMBER, CONSTRAINT TEST_EMP_DEPT_FK FOREIGN KEY (DEPT_ID) REFERENCES TEST_DEPT(ID));

外键的值可以为空,也可以重复。

INSERT INTO TEST_DEPT VALUES (1, 'IT'); INSERT INTO TEST_DEPT VALUES (2, 'EO'); INSERT INTO TEST_EMP VALUES (3, 'winston', NULL); INSERT INTO TEST_EMP VALUES (4, 'GRACE' , 2);

父表的主键的记录在子表中已经有对应的记录时,无法删除父表的记录。 父表的主键的记录在子表中没有对应的记录时,可以删除父表的记录。

DELETE FROM TEST_DEPT WHERE ID = 1; TRUNCATE TABLE TEST_DEPT; SQL Error: ORA-02292: integrity constraint (HR.TEST_EMP_DEPT_FK) violated - child record found 创建外键的时候,如果加上ON DELETE CASCADE,子表的数据直接被删除。 CREATE TABLE TEST_EMP1( ID NUMBER PRIMARY KEY, EMP_NAME VARCHAR2(50) CONSTRAINT TEST_EMP1_EMP_NAME_NN NOT NULL, DEPT_ID NUMBER, CONSTRAINT TEST_DEPT_EMP1_DEPT_ID_FK FOREIGN KEY (DEPT_ID) REFERENCES TEST_DEPT(ID) ON DELETE CASCADE); 创建外键的时候,如果加上ON DELETE SET NULL,子表的数据直接被赋值NULL。 CREATE TABLE TEST_EMP1( ID NUMBER PRIMARY KEY, EMP_NAME VARCHAR2(50) CONSTRAINT TEST_EMP1_EMP_NAME_NN NOT NULL, DEPT_ID NUMBER, CONSTRAINT TEST_DEPT_EMP1_ID_FK FOREIGN KEY (DEPT_ID) REFERENCES TEST_DEPT(ID) ON DELETE SET NULL);

CHECK约束

用于定义每行都必须满足的条件 对一下表达式不允许: 1. 对CURRVAL NEXTBAL LEVEL 和ROWNUM伪列调用不允许。 2. 对SYSDATE UID USER和USERENV函数调用也是不允许。 3. 涉及其他行中的其他值的查询也不允许。

CONSTRAINT 约束名 CHECK (表达式)

CREATE TABLE TEST_CHECK1( ID NUMBER, CONSTRAINT TEST_CHECK1_ID_MAX CHECK (ID


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3