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. 35.分组聚合操作—bucket+metric

    主要知识点: bucket+metric 计算分种颜色的电视的平均价格     语法: GET /tvs/sales/_search { "size" : 0, "agg ...

  2. 新浪微博API生成短链接

    通过新浪微博API,生成短链接,支持一次性转多个长链接 什么是短链接 短链接,通俗来说,就是将长的URL网址,通过程序计算等方式,转换为简短的网址字符串. 短链接服务 国内各大微博都推出了自己的短链接 ...

  3. 1、ceph-deploy之部署ceph集群

    环境说明 server:3台虚拟机,挂载卷/dev/vdb 10G 系统:centos7.2 ceph版本:luminous repo: 公网-http://download.ceph.com,htt ...

  4. hdu 4786 最小生成树与最大生成树

    /* 题意 :有一些边权值为1和0,判断是否存在一个生成树使得他的总权值为一个斐波那契数. 解法:建立一个最小生成树向里面加权值为1的边替换为0的边,保证原来的联通.因为权值为1,可直接求出最大生成树 ...

  5. U-Boot> help, 命令集

    U-Boot> help ?       - alias for 'help' base    - print or set address offset boot    - boot defa ...

  6. 使用c3p0与DBCP连接池,造成的MySql 8小时问题解决方式

    本文提供了对c3p0与DBCP连接池连接MySql数据库时. 8小时内无请求自己主动断开连接的解决方式.首先介绍一下我在项目(c3p0连接池)中遇到的问题,后面还提供了使用DBCP连接池的解决方式. ...

  7. ubuntu中eclipse无法识别android手机问题

    1.问题: 在ubuntu中eclipse中用真机来调试androi程序时,发现无法识别手机,例如以下图显示2.37一栏之前显示全是乱码.这是解决后截的图. 2.问题原因: 在window下我们能够通 ...

  8. 弹出框中选项卡的运用(easyUI)

    先看一下页面效果: 此处有两个知识点:一个是弹出框的运用,一个是选项卡的运用 分析一下该HTML代码,最外面一个div是弹出框的,默认是关闭状态,可通过ID来控制弹出框的开关,该div的样式是easy ...

  9. inux内核模块编程入门

    linux内核模块编程入门 2013-07-06 23:59:54 分类: LINUX 原文地址:linux内核模块编程入门 作者:s270768095 模块编程属于内核编程,因此,除了对内核相关知识 ...

  10. 使用ALSA编写自己的音频程序【转】

    本文转载自:http://blog.csdn.net/beyondioi/article/details/6994548 Alsa是Linux高级音频接口.面对众多的音频设备,Alsa为Linux音频 ...