【SQL】约束
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】约束的更多相关文章
- SQL CREATE TABLE 语句\SQL 约束 (Constraints)\SQL NOT NULL 约束\SQL UNIQUE 约束
CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表. SQL CREATE TABLE 语法 CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据 ...
- SQL约束
SQL约束: 非空约束:就是不能为null: 主键约束(PK):唯一,不重复,并且不为空: 唯一约束:唯一,允许为空,但只能出现一次: 默认约束:如果不给值,默认值: 检查约束:范围以及格式限制: 外 ...
- Mysql笔记【3】-SQL约束
SQL 约束 约束用于限制加入表的数据的类型. 可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句). 我们将主要探讨以下几种约 ...
- SQL 约束解说
SQL 约束解说 2009-04-27 09:29 约束主要包含: NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK DEFAULT 1.not null : ...
- SQL 约束 (Constraints)
SQL 约束 约束用于限制加入表的数据的类型. 可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句). 我们将主要探讨以下几种约 ...
- SQL 约束(Constraints)
SQL 约束(Constraints) SQL 约束(Constraints) SQL 约束用于规定表中的数据规则. 如果存在违反约束的数据行为,行为会被约束终止. 约束可以在创建表时规定(通过 CR ...
- SQL-W3School-高级:SQL 约束(Contraints)
ylbtech-SQL-W3School-高级:SQL 约束(Contraints) 1.返回顶部 1. SQL 约束 约束用于限制加入表的数据的类型. 可以在创建表时规定约束(通过 CREATE T ...
- Bugku-CTF之login1(SKCTF) [SQL约束攻击]
Day26 login1(SKCTF) http://123.206.31.85:49163/flag格式:SKCTF{xxxxxxxxxxxxxxxxx}hint:SQL约束攻击 本题要点:SQL ...
- SQL——SQL约束
SQL约束 - 用于限制加入表的数据的类型 可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句). NOT NULL ...
- Bugku-login1(SKCTF)(SQL约束攻击)
原因 sql语句中insert和select对长度和空格的处理方式差异造成漏洞. select对参数后面的空格的处理方式是删除,insert只是取规定的最大长度的字符串. 逻辑 1.用 select ...
随机推荐
- 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 ...
- ZOJ 3233 Lucky Number
Lucky Number Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on ZJU. Original I ...
- 【ACM】nyoj_132_最长回文子串_201308151713
最长回文子串 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 输入一个字符串,求出其中最长的回文子串.子串的含义是:在原串连续出现的字符串片段.回文的含义是:正着看和 ...
- D - Cyclic Nacklace
CC always becomes very depressed at the end of this month, he has checked his credit card yesterday, ...
- spring历史背景
1.2004年spring出现第一版本spring frameworl1.0 2.写代码永远是最简单的,后续的运维工作才是让人感到无助的 3.spring boot在运维方面做了很多工作,部署,监控, ...
- springmvc 时间返回格式化
如果是@ResponseBody,可以通过@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")设置返回的样式: 如果是不是@ResponseBody ...
- 菜鸟nginx源代码剖析 配置与部署篇(一) 手把手实现nginx "I love you"
菜鸟nginx源代码剖析 配置与部署篇(一) 手把手配置nginx "I love you" Author:Echo Chen(陈斌) Email:chenb19870707@gm ...
- 基于Windows Azure 安装 SharePoint 2010简体中文语言包
在Windows Azure上安装的Windows Server默认是英文版本的,当时安装的SharePoint也是英文版的,为方便使用,决定安装中文的语言包,具体过程如下: 1. 安装 Window ...
- java wait 与 notify sleep
来自:http://blog.csdn.net/zyplus/article/details/6672775 有适当的代码修改. 在JAVA中,是没有类似于PV操作.进程互斥等相关的方法的.JAVA的 ...
- UVA LIVE 7146 Defeat the Enemy
这个题跟codeforces 556 D Case of Fugitive思路一样 关于codeforces 556 D Case of Fugitive的做法的链接http://blog.csdn. ...