NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK

如果不指定约束名 ,Oracle server 自动按照 SYS_Cn 的格式指定约束名

--指定约束名
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));
  • 非空(not null) 约束只能定义在列上
  • 唯一约束,允许出现多个空值:NULL。
  • primary key主键约束,既不能为空也不能重复。

一、外键约束

主表:在数据库中存在主键用于与其他表相关联
从表:以主表的主键作为外键的表。

create table employees(
--列级约束
id number(10),
name varchar2(20) constraint emp_name_nn not null,
email varchar2(20),
salary number(10,2) constraint emp_salary_min check (salary > 1500),
department_id number(10),
--表级约束
constraint emp_email_uk unique(email),
constraint emp_id_pk primary key(id),
constraint emp_dept_id_fk foreign key(department_id)
references departments(department_id ) ON DELETE CASCADE
)
  • FOREIGN KEY: 指定从表中的列
  • REFERENCES: 标示主表中的列
  • ON DELETE CASCADE(级联删除): 当主表中的列被删除时,从表中相对应的列也被删除
  • ON DELETE SET NULL(级联置空): 从表中相应的列置空

CHECK 约束

salary NUMBER(2) CONSTRAINT emp_salary_min CHECK (salary > 0)

二、添加和修改约束

  • 添加 NOT NULL 约束要使用 MODIFY 语句
Alter table emp modify(empname varchar2(50) not null);
  • 添加其他约束用ADD语句
ALTER TABLE employees
ADD CONSTRAINT emp_email_pk primary(employee_id)
  • 删除约束
ALTER TABLE employees DROP CONSTRAINT emp_email_uk;

三、查看约束

  • 查询数据字典视图 USER_CONSTRAINTS
SELECT    constraint_name, constraint_type, search_condition
FROM user_constraints
WHERE table_name = 'EMPLOYEES';
CONSTRAINT_NAME             CONSTRAINT_TYPE              SEARCH_CONDITION
-------------- ------------------------ --------------------
EMP_DEPT_FK R
EMP_JOB_FK R
EMP_MANAGER_FK R
EMP_LAST_NAME_NN C "LAST_NAME" IS NOT NULL
EMP_EMAIL_NN C "EMAIL" IS NOT NULL
EMP_HIRE_DATE_NN C "HIRE_DATE" IS NOT NULL
EMP_JOB_NN C "JOB_ID" IS NOT NULL
EMP_SALARY_MIN C salary > 0
EMP_EMAIL_UK U
EMP_EMP_ID_PK P
  • 查询定义约束的列,查询数据字典视图 USER_CONS_COLUMNS
SELECT    constraint_name, column_name
FROM user_cons_columns
WHERE table_name = 'EMPLOYEES';
CONSTRAINT_NAME                           COLUMN_NAME
--------------------- ---------------------
EMP_LAST_NAME_NN LAST_NAME
EMP_EMAIL_NN EMAIL
EMP_HIRE_DATE_NN HIRE_DATE
EMP_JOB_NN JOB_ID
EMP_SALARY_MIN SALARY
EMP_EMAIL_UK EMAIL
EMP_EMP_ID_PK EMPLOYEE_ID
EMP_DEPT_FK DEPARTMENT_ID
EMP_JOB_FK JOB_ID
EMP_MANAGER_FK MANAGER_ID

最新文章

  1. 介绍开源的.net通信框架NetworkComms框架 源码分析(十九 )ConnectionIncomingData
  2. Crowdsourcing(众包)
  3. ASP.NET MVC3 Model验证总结(转)
  4. [CareerCup] 8.5 Online Book Reader System 在线读书系统
  5. replication set复制集
  6. JavaScript 基础二
  7. Oracle ORA-01034,ORA-27101,ORA-00600
  8. Spring MVC 处理异常的3种方式
  9. Spring Boot快速入门(四):使用jpa进行数据库操作
  10. 简单实现ASP.Net MVC网页播放音乐
  11. C++/C实现各种排序算法(持续更新)--冒泡排序,选择排序,归并排序
  12. Mac下安装多版本python
  13. jetbrains的JetBrains PyCharm 2018.3.1破解激活到2100年(最新亲测可用)
  14. angular的异步处理$q的使用(promise)
  15. intellij idea14 +svn配置
  16. Spring简单获得实体类的实例, 使用ApplicationContext()方法的几点注意事项
  17. Mybatis之reflection包源代码解析(一)
  18. JavaScript总结(七)
  19. Elasticsearch技术解析与实战(四)shard&replica机制
  20. Apache Ant和Apache Maven的区别

热门文章

  1. Java-Runoob-高级教程:Java 发送邮件
  2. MapReduce启动的Map/Reduce子任务简要分析
  3. GRE and VXLAN with Open vSwitch
  4. Cinder Backup备份
  5. ThinkPHP自动令牌验证(附实例)
  6. IE6中PNG图片背景无法透明显示的最佳解决方案
  7. 使用Spring表达式语言进行装配
  8. 重写iframe内联框架中的内容
  9. msql修改密码
  10. Docker remote api 开启