表的约束
定义:表的约束是 ORACLE 数据库中应用在表数据上的一系列强制性规则

按照约束用途分类:

  PRIMARY KEY:主键约束

  FOREIGN KEY:外键约束

  CHECK:检查约束

  UNIQUE:唯一约束

  NOT NULL:非空约束

创建约束:

--给已创建好的表添加约束
--语法结构:ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束内容;

约束的添加:

  约束可以在创建表的时候添加,也可以在表创建之后添加;

  在创建表时添加约束,系统会自动分配约束名称,在表创建之后添加约束,需要手动设置约束名称。

--约束也可以在创建表的时候添加
CREATE TABLE TEST_0916(
SNO NUMBER PRIMARY KEY,
SNAME VARCHAR2(100) UNIQUE,
SBIRTHDAY DATE NOT NULL,
SSEX VARCHAR2(10) CHECK(SSEX = '男' OR SSEX = '女'),
CLASS VARCHAR2(10),
SSAL NUMBER CHECK(SSAL >= 800 AND SSAL <= 5000)
);

主键约束:该字段非空,且唯一

--语法结构:ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY(字段名);

--给STUDENT表中的SNO字段添加主键约束
ALTER TABLE STUDENT ADD CONSTRAINT PK_STUDENT PRIMARY KEY(SNO); INSERT INTO STUDENT(SNO) VALUES('101');
INSERT INTO STUDENT(SNO) VALUES(NULL); --该条数据插入失败,主键不能为NULL
INSERT INTO STUDENT(SNO) VALUES('102');

删除约束

--语法结构:ALTER TABLE 表名 DROP CONSTRAINT 约束名;
ALTER TABLE STUDENT DROP CONSTRAINT PK_STUDENT;

复合主键/联合主键:由多个字段一起组合的主键

--创建复合主键、联合主键
ALTER TABLE STUDENT ADD CONSTRAINT PK_STUDENT PRIMARY KEY(SNO,SNAME); INSERT INTO STUDENT(SNO,SNAME) VALUES('101',NULL); --插入失败,主键不能为NULL
INSERT INTO STUDENT(SNO,SNAME) VALUES('101','李军');
INSERT INTO STUDENT(SNO,SNAME) VALUES('101','张三');
INSERT INTO STUDENT(SNO,SNAME) VALUES('102','张三');

外键约束:必须建立在另外一张表的主键字段上

--语法结构:ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY(字段名) REFERENCES 从表名(字段名);

--给EMP_BAK的EMPNO字段添加外键约束,依赖于EMP表的EMPNO字段
ALTER TABLE EMP_BAK ADD CONSTRAINT FK_EMPNO FOREIGN KEY(EMPNO) REFERENCES EMP(EMPNO);

非空约束:类似于主键约束,主键约束是非空且唯一,非空约束可以不唯一(允许重复),但是不能为null

--语法结构:ALTER TABLE 表名 MODIFY 字段名 NOT NULL;

--给STUDENT表的SSEX字段添加非空约束
ALTER TABLE STUDENT MODIFY SSEX NOT NULL; INSERT INTO STUDENT (SNO, SNAME, SSEX) VALUES('101','张三','男');

检查约束

--语法结构:ALTER TABLE 表名 ADD CONSTRAINT 约束名 CHECK(筛选条件);
--给STUDENT表的SSEX字段添加检查约束,只允许插入'男'或者'女'
ALTER TABLE STUDENT ADD CONSTRAINT CHK_SSEX CHECK(SSEX = '男' OR SSEX = '女'); --添加检查约束的字段,插入只能插约束内的筛选条件,或者不插入(NULL)
INSERT INTO STUDENT (SNO, SNAME, SSEX) VALUES('102','张三',NULL);

唯一约束

--语法结构:ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE(字段名);
--给STUDENT表中的SBIRTHDAY字段添加唯一约束
ALTER TABLE STUDENT ADD CONSTRAINT UNQ_STUDENT UNIQUE(SBIRTHDAY);

总结:

(1) 一张表只有一个主键,主键非空且唯一;
(2)外键只能依赖于另一张表的主键, 且两者的数据类型必须一致;
(3)约束不能修改,只能删除重建;
(4)约束也可以在创建表的时候添加。

Oracle表的约束的更多相关文章

  1. Oracle表级约束和列级约束

    Oracle表级约束和列级约束 1. 表级定义约束 指的是在定义完一个表所有列之后,再去定义所有相关的约束. 注意:not null 约束只能在列级上定义. 2. 列级定义约束 指的是在定义一个表的每 ...

  2. Oracle—表、约束、索引、表空间、分区、序列、统计信息

    表.约束.索引.表空间.分区.序列.统计信息 一.表及其操作 1.创建表 create table 表名 ( 字段名1 字段类型 默认值 是否为空 , 字段名2 字段类型 默认值 是否为空, 字段名3 ...

  3. Oracle 表管理 约束 索引

    表的约束与完整性: 1.实体完整性 主键唯一性 2.域完整性 不能向number中插入varchar 3.参照完整性 外键 以别的表的字段作为外键,再插入该表时所插入外键的值必须在被参照表中该字段有那 ...

  4. Oracle表与约束关系

    手动回收表的存储方式: SQL> alter table aux_emp deallocate unused; //回收所有未使用的存储空间 表已更改. 回收aux_emp的存储空间,保留50K ...

  5. Oracle表名、列名、约束名的长度限制

    Oracle数据库版本11.2.0.1.0 Oracle表名.列名.约束名的长度限制 1.查询用户所有的表 select * from USER_TABLES; 2.查询用户所有表的列 select ...

  6. oracle 表迁移方法 (二) 约束不失效

    DB:11.2.0.3.0 在oracle 表迁移方法 (一)中,只是move了一张普通的表,如果表的字段带有主键约束呢 ? [oracle@db01 ~]$ sqlplus / as sysdba ...

  7. Oracle 关于定义约束 / 修改表结构 /修改约束

    ---约束分5种:主键 外键 唯一 非空 检查5类约束 Oracle中分列级别约束 与 表级别约束 列级别约束:在创建表时再列上面加约束 例如: create table table11( stuno ...

  8. Oracle day05 建表_约束

    表的创建 标准的建表语法 : CREATE TABLE [schema.] table (column datatype [DEFAULT expr], ... ); 使用子查询创建表的语法 CREA ...

  9. oracle中,约束、表名、Index等的名称长度限制最大只能30个字符

    oracle中,约束.表名.Index等的名称长度限制最大只能30个字符

随机推荐

  1. Javascript之递归求裴波那契数

    一.遍历的方式性能更加,递归的方式代码利于阅读.简短,性能略差 二.裴波那契数定义: · 位置0的裴波那契数为0 · 1和2的裴波那契数为1 · n(n > 2)裴波那契数为 (n-1)的裴波那 ...

  2. vue v-model原理实现

    v-model的实现原理: 基础用法: v-model 本质上不过是语法糖,可以用 v-model 指令在表单 <input>.<textarea> 及 <select& ...

  3. CF Round #669 Div2

    A 可以发现不论往怎样一个串往后加上两个 \(0\) 或两个 \(1\) 其奇数位和偶数位上的差值都是相同的.因此我们两位两位考虑这个 \(01\) 串,对于相邻两位相同那么直接留下,否则留下 \(0 ...

  4. synchronized、ReentrantLock、volatile

    名词解释 synchronized 是Java中的关键字,是一种同步锁,可以修饰代码块,方法,静态的方法,类.synchronized(Object) 不能用String常量.Integer. Lon ...

  5. JAVA之容器(转)

    一.概览 容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表. Collection 1. Set TreeSe ...

  6. JScrollPane 自动跟进 自动到滚动到最底部

    感谢大佬:https://blog.csdn.net/csdn_lqr/article/details/51068423 注:以下方法为网上摘抄 1 . JTable( 放在JScrollPane中  ...

  7. 循环retian

    1.循环retian基本概念 循环retain的场景 比如A对象retain了B对象,B对象retain了A对象 循环retain的弊端 这样会导致A对象和B对象永远无法释放 循环retain的解决方 ...

  8. 一招教你IDEA中Java程序如何打包,以及打包后如何运行

    前言 编写程序 程序打包 测试运行 IDEA作为目前按最主流的Java程序项目编写工具,越来越受到开发人员的青睐.idea因为其五花八门的功能,让你在开发过程中效率显著提高.那么对于初学者来说,如何通 ...

  9. nginx中的模块分类及常见核心模块有哪些

    1.模块分类 核心模块:是 Nginx 服务器正常运行必不可少的模块,提供错误日志记录 .配置文件解析 .事件驱动机制 .进程管理等核心功能 标准HTTP模块:提供 HTTP 协议解析相关的功能,比如 ...

  10. Ubuntu18修改/迁移mysql5.7数据存放路径

    1.停止mysql服务 sudo service mysql stop 2.修改mysql配置文件,一般是 /etc/mysql/my.cnf,或者/etc/mysql/mysql.conf.d/my ...