1 什么是约束(constraint)

数据库约束是对表中的数据进行进一步的限制,保证数据的正确性、有效性和完整性。

2 注意事项

  • 如果不指定约束名 ,Oracle server 自动按照 SYS_Cn 的格式指定约束名
  • 创建和修改约束:
  • 建表的同时
  • 建表之后
  • 可以在表级或列级定义约束
  • 可以通过数据字典视图查看约束

3 表级约束和列级约束

作用范围:

  • 列级约束只能作用在一个列上
  • 表级约束可以作用在多个列上(当然表级约束也可以作用在一个列上)
  • 定义方式:列约束必须跟在列的定义后面,表约束不与列一起,而是单独定义。
  • 非空(not null) 约束只能定义在列上

定义约束举例

语法

CREATE TABLE [schema.]table(column datatype [DEFAULT expr][column_constraint],...[table_constraint][,...]);

举例

CREATE TABLE employees(employee_id  NUMBER(6),first_name   VARCHAR2(20),...job_id       VARCHAR2(10) NOT NULL,CONSTRAINT emp_emp_id_pk PRIMARY KEY (EMPLOYEE_ID));

定义约束举例(列级)

语法

column [CONSTRAINT constraint_name] constraint_type,

举例

column,...[CONSTRAINT constraint_name] constraint_type(column, ...),

NOT NULL 约束

NOT NULL 约束举例

  • 保证列值不能为空
  • 只能定义在列级
CREATE TABLE employees(employee_id    NUMBER(6),last_name      VARCHAR2(25) NOT NULL,--系统命名salary         NUMBER(8,2),commission_pct NUMBER(2,2),hire_date      DATE CONSTRAINT emp_hire_date_nn--用户命名NOT NULL,

可以在PL/SQLDEV的My objects-Tables-employees-Check constraints中查看

UNIQUE 约束(唯一约束,允许出现多个空值:NULL。)

UNIQUE 约束(举例) 可以定义在表级或列级

CREATE TABLE employees(employee_id      NUMBER(6),last_name        VARCHAR2(25) UNIQUE,--系统命名email            VARCHAR2(25),salary           NUMBER(8,2),commission_pct   NUMBER(2,2),hire_date        DATE NOT NULL,
...  CONSTRAINT emp_email_uk UNIQUE(email));--用户命名可以声明在email后面:CONSTRAINT emp_email_uk UNIQUE,也可以如此末处声明。

PRIMARY KEY 约束

PRIMARY KEY 约束(举例)可以定义在表级或列级

CREATE TABLE   departments(department_id        NUMBER(4),department_name      VARCHAR2(30)CONSTRAINT dept_name_nn NOT NULL,manager_id           NUMBER(6),location_id          NUMBER(4),CONSTRAINT dept_id_pk PRIMARY KEY(department_id));

FOREIGN KEY 约束

FOREIGN KEY 约束(举例)可以定义在表级或列级:

CREATE TABLE employees(employee_id      NUMBER(6),last_name        VARCHAR2(25) NOT NULL,email            VARCHAR2(25),salary           NUMBER(8,2),commission_pct   NUMBER(2,2),hire_date        DATE NOT NULL,
...department_id    NUMBER(4),CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)REFERENCES departments(department_id),CONSTRAINT emp_email_uk UNIQUE(email));
FOREIGN KEY 约束的关键字
FOREIGN KEY 在表级指定子表中的列
REFERENCES 标示在父表中的列
ON DELETE CASCADE(级联删除) 当父表中的列被删除时,子表中相对应的列也被删除
ON DELETE SET NULL(级联置空) 子表中相应的列置空
CREATE TABLE emp(
id NUMBER(6) PRIMARY KEY,
name VARCAHER2(25) UNIQUE,
sal NUMBER(8,2),
dept_id number(4),
constraint dept_fk foreign key(dept_id) rederence dept(dept_id) on delete cascade
)

CHECK 约束(定义每一行必须满足的条件)

..., salary  NUMBER(2)CONSTRAINT emp_salary_min  CHECK (salary > 0),...
CREATE TABLE emp(
id NUMBER(6) PRIMARY KEY,
name VARCAHER2(25) UNIQUE,
sal NUMBER(8,2) CHECK(sal > 0 and sal < 1000000),
dept_id number(4),
constraint dept_fk foreign key(dept_id) rederence dept(dept_id) on delete set null
)

4 添加约束

  • 使用 ALTER TABLE 语句:
  • 添加或删除约束,但是不能修改约束
  • 有效化或无效化约束
  • 添加 NOT NULL 约束要使用 MODIFY 语句

添加约束的语法

ALTER TABLE   tableADD [CONSTRAINT constraint] type (column);

添加和删除约束

以create table emp as select * from employees;

Alter table emp modify(empname varchar2(50) not null);

添加约束

ALTER TABLE     employees
ADD CONSTRAINT  emp_manager_fk FOREIGN KEY(manager_id) REFERENCES employees(employee_id);
Table altered.

从表 EMPLOYEES 中删除约束

ALTER TABLE employees
DROP CONSTRAINT  emp_manager_fk;
Table altered.

在ALTER TABLE 语句中使用 DISABLE 子句将约束无效化。

ALTER TABLE  employees
DISABLE CONSTRAINT  emp_emp_id_pk;
Table altered.

ENABLE 子句可将当前无效的约束激活

ALTER TABLE  employees
ENABLE CONSTRAINT emp_emp_id_pk;
Table altered.

当定义或激活UNIQUE 或 PRIMARY KEY 约束时系统会自动创建UNIQUE 或 PRIMARY KEY索引

查询约束

查询数据字典视图 USER_CONSTRAINTS

SELECT   constraint_name, constraint_type,search_condition
FROM    user_constraints
WHERE   table_name = 'EMPLOYEES';

查询定义约束的列

查询数据字典视图 USER_CONS_COLUMNS

SELECT   constraint_name, column_name
FROM    user_cons_columns
WHERE   table_name = 'EMPLOYEES';

总结

约束的类型总结
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK

oracle之约束(constraint)相关推荐

  1. 默认约束 oracle,ORACLE约束(constraint):对象的强制规定

    ORACLE约束(constraint):对象的强制规定 5种约束: NOT NULL     非空 NN UNIQUE       唯一 UK PRIMARY KEY  主键 PK FOREIGN ...

  2. oracle删除unique key,概述Oracle Unique约束

    Oracle还是比较常用的,于是我研究了一下Oracle Unique约束,在这里拿出来和大家分享一下,希望对大家有用.如果某个约束只作用于单独的字段,即可以在字段级定义约束,也可以在表级定义约束,但 ...

  3. SQL基础--gt; 约束(CONSTRAINT)

    --============================= --SQL基础--> 约束(CONSTRAINT) --============================= 一.几类数据完 ...

  4. oracle数据库约束是什么意思,oracle数据库约束

    oracle数据库约束 约束用于确保数据库数满足业务规则. 约束包括:NOT NULL,UNIQUE,PRIMARY KEY,FOREIGN KEY以及CHECK等5种类型. 建立主键约束和唯一约束时 ...

  5. Oracle的约束和索引

    [导读]如果某个约束只作用于单独的字段,即可以在字段级定义约束,也可以在表级定义约束,但如果某个约束作用于多个字段 Oracle的约束 * 如果某个约束只作用于单独的字段,即可以在字段级定义约束,也可 ...

  6. oracle添加unique,Oracle unique约束的创建步骤

    以下的文章主要是讲述Oracle中创建unique***约束 (单列和多列)的实际操作方案,Oracle unique约束其实就是用来保证其表里的某一类,或是使表中的某一类组合起来时不重复的一种手段. ...

  7. oracle如何禁用主键约束,【oracle】约束之主键约束

    1.主键约束作用: 确保表中每一行数据是唯一的,要求非空且唯一 2.一张表中只能设置一个主键约束: 主键约束可以由多个字段构成(联合主键或复合主键). 1.在创建表时设置主键约束 CREATE TAB ...

  8. 创建和使用约束Constraint

    约束(Constraint)是Microsoft SQL Server 提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件(有关数据完整性的介绍请参见第9 章).在SQ ...

  9. 数据库 约束(Constraint)、多表关系和范式

    文章目录 约束 Constraint 分类 多表关系 范式 第一范式1NF. 第二范式2NF 第三范式3NF BCNF 约束 Constraint 概念: 对表中数据进行限制,保证数据正确性.有效性. ...

  10. [MySQL]约束(constraint)

    文章目录 1. 约束 1.1 数据的完整性 1.2 约束 1.3 约束的分类 2. 查看表中的约束 3. 非空约束(NOT NULL) 3.1 作用 3.2 特点 3.3 添加非空约束 3.3.1 建 ...

最新文章

  1. MVC身份验证及权限管理(转载)
  2. 003.linux开发环境配置及linux极速入门
  3. .net Core 2.*使用autofac注入
  4. wincc远程服务器配置,如何配置WINCC作为OPC服务器?
  5. 计算机仿真专业学什么,计算机科学与技术知识专业 计算机仿真技术知识课件.ppt...
  6. word2010中设置页码起始页从任意一页开始
  7. C++图书馆资料管理系统
  8. git代码从A库某分支迁到B库某分支(亲测有效)
  9. iPhoneX停产?对此不敢苟同
  10. 解决iOS6 Apple ID无法登录!十年了,爷青回!还是那个iPhone 4s,竟然能登陆成功!
  11. layUI前端框架使用详解_layUI前端框架视频教程
  12. OpenAI击败Dota 2世界冠军后记:如何训练你的AI
  13. java多线程过桥问题_(java)农夫过桥问题
  14. Office Visio简介
  15. SEO优化是什么意思,如何理解并学好它
  16. C++11 boost::spirit::qi简单的XML解析器示例
  17. 无线通信设计秘密四:唤醒下发算法
  18. 论文翻译——Facial Emotion Recognition using Deep Convolutional Networks
  19. 3种方法实现strlen函数
  20. mysql事物日志工具,数据库事务日志 active

热门文章

  1. 7-3 求整数的位数及各位数字之和(分数 15)
  2. Matlab中的histeq函数——图像灰度直方图均衡化
  3. Freeswitch显示变量与通道变量对应表
  4. 请确保swagger资源接口正确.
  5. ROS | URDF模型—阿克曼(Ackermann)四轮小车模型
  6. linux上SVN解决冲突命令
  7. echarts 饼图默认高亮
  8. scp命令默认传输速度多大_测试scp加速传输速度的方法
  9. 给 Java 学习者的超全教程整理
  10. (VS2010)C语言浅尝冒泡排序