1. 添加约束

1)使用ALTER TABLE语句

•添加或删除约束,不会修改其结构

•启用和禁用约束

•通过使用MODIFY子句添加NOTNULL约束

ALTER TABLE <table_name> ADD [CONSTRAINT <constraint_name>]type (<column_name>);

例如:

alter table emp modify empno primary key;

alter table empadd constraint fk_deptno foreign key(deptno) references dept(deptno);

2)ON DELETE子句

•使用ON DELETE CASCADE子句级联删除

alter table empadd constraint fk_deptno foreign key (deptno)references dept(deptno) on delete cascade;

•使用ON DELETE SET NULL当父节点记录删除时子节点记录置空

alter table empadd constraint fk_deptno foreign key (deptno) references dept(deptno)on delete set null;

2. 延迟约束延迟约束有以下属性

•DEFERRABLE(延迟)或NOT  DEFERRABLE(不延迟)

•INITIALLY  DEFERRED(事务结束后验证)或INITIALLY  IMMEDIATE(语句执行时立即验证)

1)创建约束时添加

ALTER TABLE dept ADD CONSTRAINT dept_id_pk PRIMARY KEY (department_id) DEFERRABLE INITIALLY DEFERRED;

2)改变指定约束的属性

SET CONSTRAINT dept_id_pk IMMEDIATE

3)改变会话级别的约束

ALTER SESSION SET CONSTRAINTS=IMMEDIATE

CREATE TABLE emp_new_sal (salary NUMBER CONSTRAINT sal_ck CHECK (salary > 100) DEFERRABLE INITIALLY IMMEDIATE,bonus NUMBER CONSTRAINT bonus_ck CHECK (bonus > 0 )DEFERRABLE INITIALLY DEFERRED );

3.删除约束

•删除emp表的 fk_deptno约束

alter table emp drop constraint fk_deptno ;

•删除dept表的PRIMARY KEY 约束并删除相关联的FOREIGN KEY约束

ALTER TABLE dept DROP PRIMARY KEY CASCADE;

4.禁用约束

•使用ALTERTABLE 语句的DISABLE子句禁用完整性约束。

•应用CASCADE选项禁用相关的完整性约束。

ALTER TABLE emp2 DISABLE CONSTRAINT emp_dt_fk;

5.启用约束

•使用ENABLE 子句激活当前禁用表中定义的完整性约束。

ALTER TABLE emp2 ENABLE CONSTRAINT emp_dt_fk;

6.级联约束

•CASCADE CONSTRAINTS 子句在DROP COLUMN 子句中使用。

•删除字段CASCADE CONSTRAINTS 指定子句,同时也将删除所有定义的多列约束。

•删除列上定义的PRIMARY和UNIQUE约束时指定CASCADE CONSTRAINTS 子句,则将删除所有引用它的完整性约束。

示例: ALTER TABLE emp2DROP COLUMN employee_id CASCADE CONSTRAINTS;

ALTER TABLE test1 DROP (col1_pk, col2_fk, col1) CASCADE CONSTRAINTS;

7.Cascade

•删除用户的时候级联删除对象 drop user test cascade;

•删表时级联删除约束 drop table test cascade constraints;

•删字段的时候,级联删除约束(pk,fk,.c) alter table test drop column (id) cascade constraints;  alter table test disable constraint pk_test cascade;

create table child (c1 number primary key,c2 number references parent(c1) on delete cascade);

8.重命名表的列和约束

•使用RENAME COLUMN子句的ALTER TABLE语句来重新命名表列。

ALTER TABLE marketing RENAME COLUMN team_idTO id;

•使用RENAME CONSTRAINT子句的ALTER TABLE语句来重命名表中任意已存在的约束。

ALTER TABLE marketing RENAME CONSTRAINT mktg_pkTO new_mktg_pk;

9.查看表上有什么约束

SQL> desc user_constraints;
 Name                               Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 OWNER                                VARCHAR2(30)
 CONSTRAINT_NAME                       NOT NULL VARCHAR2(30)
 CONSTRAINT_TYPE                        VARCHAR2(1)
 TABLE_NAME                           NOT NULL VARCHAR2(30)
 SEARCH_CONDITION                        LONG
 R_OWNER                            VARCHAR2(30)
 R_CONSTRAINT_NAME                        VARCHAR2(30)
 DELETE_RULE                            VARCHAR2(9)
 STATUS                             VARCHAR2(8)
 DEFERRABLE                            VARCHAR2(14)
 DEFERRED                            VARCHAR2(9)
 VALIDATED                            VARCHAR2(13)
 GENERATED                            VARCHAR2(14)
 BAD                                VARCHAR2(3)
 RELY                                VARCHAR2(4)
 LAST_CHANGE                            DATE
 INDEX_OWNER                            VARCHAR2(30)
 INDEX_NAME                            VARCHAR2(30)
 INVALID                            VARCHAR2(7)
 VIEW_RELATED                            VARCHAR2(14)

##查看EMPOYEES 表上面的约束

SQL> SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE FROM USER_CONSTRAINTS WHERE TABLE_NAME='EMPLOYEES';

CONSTRAINT_NAME                C
------------------------------ -
EMP_SALARY_MIN                 C
EMP_EMAIL_UK                   U
EMP_EMP_ID_PK                  P
EMP_DEPT_FK                    R
EMP_JOB_FK                     R
EMP_MANAGER_FK                 R
EMP_LAST_NAME_NN               C
EMP_EMAIL_NN                   C
EMP_HIRE_DATE_NN               C
EMP_JOB_NN                     C

10 rows selected.

## 约束类型字母代表含义

Type Code Type Description Acts On Level
C Check on a table Column
O Read Only on a view Object
P Primary Key Object
R Referential AKA Foreign Key Column
U Unique Key Column
V Check Option on a view Object

【SQL】约束的更多相关文章

  1. SQL CREATE TABLE 语句\SQL 约束 (Constraints)\SQL NOT NULL 约束\SQL UNIQUE 约束

    CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表. SQL CREATE TABLE 语法 CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据 ...

  2. SQL约束

    SQL约束: 非空约束:就是不能为null: 主键约束(PK):唯一,不重复,并且不为空: 唯一约束:唯一,允许为空,但只能出现一次: 默认约束:如果不给值,默认值: 检查约束:范围以及格式限制: 外 ...

  3. Mysql笔记【3】-SQL约束

    SQL 约束 约束用于限制加入表的数据的类型. 可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句). 我们将主要探讨以下几种约 ...

  4. SQL 约束解说

    SQL 约束解说 2009-04-27 09:29 约束主要包含: NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK DEFAULT 1.not null : ...

  5. SQL 约束 (Constraints)

    SQL 约束 约束用于限制加入表的数据的类型. 可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句). 我们将主要探讨以下几种约 ...

  6. SQL 约束(Constraints)

    SQL 约束(Constraints) SQL 约束(Constraints) SQL 约束用于规定表中的数据规则. 如果存在违反约束的数据行为,行为会被约束终止. 约束可以在创建表时规定(通过 CR ...

  7. SQL-W3School-高级:SQL 约束(Contraints)

    ylbtech-SQL-W3School-高级:SQL 约束(Contraints) 1.返回顶部 1. SQL 约束 约束用于限制加入表的数据的类型. 可以在创建表时规定约束(通过 CREATE T ...

  8. Bugku-CTF之login1(SKCTF) [SQL约束攻击]

    Day26 login1(SKCTF) http://123.206.31.85:49163/flag格式:SKCTF{xxxxxxxxxxxxxxxxx}hint:SQL约束攻击  本题要点:SQL ...

  9. SQL——SQL约束

    SQL约束 - 用于限制加入表的数据的类型    可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句).    NOT NULL ...

  10. Bugku-login1(SKCTF)(SQL约束攻击)

    原因 sql语句中insert和select对长度和空格的处理方式差异造成漏洞. select对参数后面的空格的处理方式是删除,insert只是取规定的最大长度的字符串. 逻辑 1.用 select ...

随机推荐

  1. copy the content of a file muliptle times and save as ordered files:

    input: transient.case outputs: transient_1.case, transient_2.case,...transient_101.case ********** n ...

  2. ZOJ 3233 Lucky Number

    Lucky Number Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on ZJU. Original I ...

  3. 【ACM】nyoj_132_最长回文子串_201308151713

    最长回文子串 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 输入一个字符串,求出其中最长的回文子串.子串的含义是:在原串连续出现的字符串片段.回文的含义是:正着看和 ...

  4. D - Cyclic Nacklace

    CC always becomes very depressed at the end of this month, he has checked his credit card yesterday, ...

  5. spring历史背景

    1.2004年spring出现第一版本spring frameworl1.0 2.写代码永远是最简单的,后续的运维工作才是让人感到无助的 3.spring boot在运维方面做了很多工作,部署,监控, ...

  6. springmvc 时间返回格式化

    如果是@ResponseBody,可以通过@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")设置返回的样式: 如果是不是@ResponseBody ...

  7. 菜鸟nginx源代码剖析 配置与部署篇(一) 手把手实现nginx &quot;I love you&quot;

    菜鸟nginx源代码剖析 配置与部署篇(一) 手把手配置nginx "I love you" Author:Echo Chen(陈斌) Email:chenb19870707@gm ...

  8. 基于Windows Azure 安装 SharePoint 2010简体中文语言包

    在Windows Azure上安装的Windows Server默认是英文版本的,当时安装的SharePoint也是英文版的,为方便使用,决定安装中文的语言包,具体过程如下: 1. 安装 Window ...

  9. java wait 与 notify sleep

    来自:http://blog.csdn.net/zyplus/article/details/6672775 有适当的代码修改. 在JAVA中,是没有类似于PV操作.进程互斥等相关的方法的.JAVA的 ...

  10. UVA LIVE 7146 Defeat the Enemy

    这个题跟codeforces 556 D Case of Fugitive思路一样 关于codeforces 556 D Case of Fugitive的做法的链接http://blog.csdn. ...