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

最新文章

  1. 为什么全世界都对HTTPS抛出了橄榄枝,HTTPS到底有什么好?HTTPS如何配置?
  2. 怎样给Eclipse添加一个Xml模板
  3. 关于ubuntu下词典安装
  4. linux load average
  5. 简单快速的开发框架-SRF
  6. iOS导航栏-关闭半透明
  7. 让站长在SEO时更得心应手的六个细节
  8. 多线程与网络之NSURLConnection发送请求
  9. Python 自带IDLE中调试程序
  10. 【转】HTML5 API --- 页面可见性改变(visibilitychange)事件
  11. leetcode 104 Maximum Depth of Binary Tree二叉树求深度
  12. 基于H5的混合开发介绍(一)WebView
  13. C++输出九九乘法表
  14. mysql基本命令[转]
  15. [Week17] 个人阅读作业
  16. 【题解】 [SDOI2009] Elaxia的路线(最短路+拓扑排序)
  17. 【视频教学】如何利用高德地图IOS SDK进行开发?
  18. 移动端实现上拉加载更多(使用dropload.js vs js)
  19. Centos7 Zookeeper 集群安装
  20. Spring配置文件头信息

热门文章

  1. Django Template(模板系统)
  2. isinstance、issubclass、反射
  3. ZOJ 3199 Longest Repeated Substring
  4. (45). Spring Boot MyBatis连接Mysql数据库【从零开始学Spring Boot】
  5. noip模拟赛 c
  6. DOM对象属性(property)与HTML标签特性(attribute)
  7. mysql5.7 简易修改mysql密码
  8. 利用C语言中的函数指针实现c++中的虚函数
  9. MVC.Net:添加第三方类库的bundles引用
  10. HDU 2767-Proving Equivalences(强联通+缩点)