约束的类型:

oracle数据库支持的约束类型包括:

1.unique 2.not null 3.primary key 4.foreignkey 5.check

约束都有名称。如果没有显示地给它们命名,oracle会生成名称。

1.唯一约束:要求表中的每一行的列(或者列的组合)的值必须不同。

索引会加强唯一约束。在定义唯一约束时,oracle会查找键列的索引,如果索引不存在,就会创建一个。

2.非空约束:要求输入键列的值。如果插入非空约束的列没有值,则会报错。

3.主键约束:定位表中单行的方法。

可以创建没有主键的表。但是不建议这么做。因为后续维护工作通常需要主键。

主键约束其实是:唯一约束和非空约束的联合。

键列必须有唯一值,它们不能为空。对于唯一约束而言,在约束的列上必须存在索引。如果不存在,那么在定义约束时会创建一个索引。

一个表只能有一个主键。但是一个表可以有许多唯一约束和非空列。

4.外键约束。在父-子关系的子表上定义外键约束。该约束要求子表中的列(或者列组合)对应父表中的主键列。这些列的名称不一定相同,但它们的数据类型必须相同。

通常唯一约束中的所有列和外键约束中的所有列最好使用非空约束定义。

如果在子表插入行,而在父表中没有匹配的行,会出错。如果删除父表中的行,而子表中有行在引用它,也会出错。

两中方法解决上面的问题:1.创建ON DELETECASCADE约束--->如果删除父表中的行,oracle会搜索子表。查找所有匹配行,并删除它们。这是自动进行。2.创建ON DELETE SET NULL约束---->如果删除父表中的行,oracle会搜索子表。查找所有匹配行,并将外键列设置为NULL。这意味着,子行依然存在。如果子表中的列也有非空约束。那么从父表中删除就会失败。

子表中的外键约束必须引用父表中唯一约束或者主键约束的列。

5.检查约束:强化简单规则。列中输入的值必须在某个范围之内。

create table dept1(

deptno number(2,0) constraint dept_deptno_pk  primary key

--deptno是数字类型,2位数,没有小数。是表的主键。约束被命名为dept_deptno_pk

constraint dept_deptno_ck check (deptno between 10 and 90),

--检查约束,将它限制为从10到90数字。约束命名为dept_deptno_ck

dname varchar2(20) constraint dept_dname_nn not null);

--dname为可变长度,约束dept_dname_nn 让它不能为空值

create table emp1(

empno number(4,0) constraint emp_empno_pk  primary key,

--empno数字类型,最大4位,没有小数,约束 emp_empno_pk标记为表的主键

ename varchar2(20) constraint emp_ename_nn not null,

--ename为可变长度字符,约束emp_ename_nn 不能为空值

mgr number(4,0) constraint emp_mgr_fk references emp (empno),

--mgr是员工经理,他自己也必须是员工,约束emp_mgr_fk 将empno定义为自引用外键

dob date,

hiredate date,

deptno number(2,0) constraint emp_deptno_fk references dept(deptno)

on delete set null,

--进一步将emp_depto_fk约束定义为 on delete set null ,因此如果删除dept中的父行,那么empno中所有匹配的子行都会将deptno 设置为null

email varchar2(30) constraint emp_email_uk unique,

--email 如果输入,就必须唯一也可以保留为空

constraint emp_hiredate_ck check (hiredate >= dob + 365*16),

--约束检查对童工的使用(dob 员工的生日,日期不在生日之后16年)

constraint emp_email_ck

check ((instr(email,'@')>0) and (instr(email,'.')>0))

--instr函数搜索符号@,和点(.)字符

);

--添加一个主键约束

alter table emp add constraint emp_pk primary key (empno);

--emp为父表,dept 为子表,添加一个链接表的外键约束

alter table emp add constraint dept_fk foreign key (deptno) references dept on delete set null;

oracle 怎么创建约束,Oracle创建约束相关推荐

  1. oracle字段加约束,Oracle数据库的字段约束创建和维护示例

    创建Oracle数据库的字段约束: 非空约束 唯一约束 对字段的取值的约束 默认值 外键约束 create table tab_class( class_id number primary key, ...

  2. oracle主键约束删除,oracle删除主键查看主键约束及创建联合主键

    oracle删除主键查看主键约束及创建联合主键 1,主键的删除 ALTER TABLE TABLENAME DROP PRIMARY_KEY 执行上面的SQL可以删除主键:如果不成功可以用 ALTER ...

  3. oracle中主键创建的语法,Oracle中主键、外键、索引、序列、唯一性约束的创建

    1.主键的创建 方法一:直接在sql语句中声明字段主键约束 create table table_name (id type[length] constraint pk_name primary ke ...

  4. oracle如何添加非空约束,oracle 怎么用sql删除非空约束?

    最近在学习oracle的闪回知识(oracle11g),也注意到了这个问题,经初步测试是结果是这样的: 首先确认一下,数据库是否打开了闪回特性: show parameter recyclebin; ...

  5. oracle创建 number,oracle创建表的方法和一些常用命令

    1.主键和外键 主键:关系型数据库中的一条记录中有若干个属性,若其中的某一个属性组(注意是组,可以是一个,也可以是多个)能唯一标识一条记录,那么该属性组就是主键 外键:关系型数据库表中的一列或者某几列 ...

  6. Oracle视图添加约束,Oracle的约束视图

    在Oracle中插入数据时,可能由于不符合约束而无法插入成功. 将报类似于如下的错误信息: SQL Error: ORA-02291: 违反完整约束条件 (TEST.FK_KB_TEST_ID) - ...

  7. oracle怎么关闭约束,Oracle约束enable/disablenovalidate

    oracle 对constraint的开启和关闭共有四种:enable validate;enable novalidate;disable validate;disable novalidate.启 ...

  8. MySQL如何创建表时指定约束

    一.MySQL中的约束类型 非空约束(not null): 唯一性约束(unique): 主键约束(primary key)PK: 外键约束(foreign key)FK: (检查约束(目前 ...

  9. oracle用命令方式创建表,oracle创建表的方法和一些常用命令

    1.主键和外键 主键:关系型数据库中的一条记录中有若干个属性,若其中的某一个属性组(注意是组,可以是一个,也可以是多个)能唯一标识一条记录,那么该属性组就是主键 外键:关系型数据库表中的一列或者某几列 ...

最新文章

  1. 解决:Error: Aesthetics must be either length 1 or the same as the data (5): fill
  2. 为什么Java大神,都在看Spring Boot和Spring Cloud的书?
  3. 代码中的各种时间格式
  4. Ubuntu18.04 安装Python2.7.6
  5. 电气论文:基于粒子群算法的梯级水火电力系统优化调度【有代码】
  6. c语言修仙受控可看吗,强推三本神奇到爆的小说,c语言修仙,程序员与修真会擦出什么火花...
  7. 整理几个常用的sql和其他代码
  8. jdk 9和jdk8_JDK 9是某些功能的终结
  9. java轮询文件停止线程,java 运行多线程轮询时,外部停止轮询
  10. Android笔记 - android 类型转化错误
  11. linux打开txt文件命令_「linux命令详解」lsof命令解析,教你一步打开所有文件
  12. 深入理解JVM(程序编译与代码优化篇)
  13. java sftp命令_linux下如何使用sftp命令
  14. 贝格尔编排法的PHP实现
  15. Python错误集锦:matplotlib legend提示:ValueError: Unrecognized location ‘upper’. Valid locations are
  16. 运行docker run显示is already in use by container
  17. Nuxt3稳定版+naive-ui项目开发
  18. python集合的概念_用Python中的集合Set讲解演示高一数学集合的概念
  19. Android SAF
  20. 金山快盘使用的一些注意

热门文章

  1. 分数等级_志愿填报丨填报公办普通高中志愿,分数成绩和等级成绩均需关注
  2. 小米5x_小米刷机大全(附教程)
  3. allow_unreachable flag
  4. 3d人脸重建 facescape 测试
  5. gradle build running很慢
  6. 目标检测优化2021
  7. Windows 软件推荐2020
  8. raspberry pi 3B 树莓派 安装tensorflow
  9. 介绍Python中的__future__模块
  10. vs2015 全局头文件 库文件引用设置方法