Oracle表的约束
表的约束
定义:表的约束是 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表的约束的更多相关文章
- Oracle表级约束和列级约束
Oracle表级约束和列级约束 1. 表级定义约束 指的是在定义完一个表所有列之后,再去定义所有相关的约束. 注意:not null 约束只能在列级上定义. 2. 列级定义约束 指的是在定义一个表的每 ...
- Oracle—表、约束、索引、表空间、分区、序列、统计信息
表.约束.索引.表空间.分区.序列.统计信息 一.表及其操作 1.创建表 create table 表名 ( 字段名1 字段类型 默认值 是否为空 , 字段名2 字段类型 默认值 是否为空, 字段名3 ...
- Oracle 表管理 约束 索引
表的约束与完整性: 1.实体完整性 主键唯一性 2.域完整性 不能向number中插入varchar 3.参照完整性 外键 以别的表的字段作为外键,再插入该表时所插入外键的值必须在被参照表中该字段有那 ...
- Oracle表与约束关系
手动回收表的存储方式: SQL> alter table aux_emp deallocate unused; //回收所有未使用的存储空间 表已更改. 回收aux_emp的存储空间,保留50K ...
- Oracle表名、列名、约束名的长度限制
Oracle数据库版本11.2.0.1.0 Oracle表名.列名.约束名的长度限制 1.查询用户所有的表 select * from USER_TABLES; 2.查询用户所有表的列 select ...
- oracle 表迁移方法 (二) 约束不失效
DB:11.2.0.3.0 在oracle 表迁移方法 (一)中,只是move了一张普通的表,如果表的字段带有主键约束呢 ? [oracle@db01 ~]$ sqlplus / as sysdba ...
- Oracle 关于定义约束 / 修改表结构 /修改约束
---约束分5种:主键 外键 唯一 非空 检查5类约束 Oracle中分列级别约束 与 表级别约束 列级别约束:在创建表时再列上面加约束 例如: create table table11( stuno ...
- Oracle day05 建表_约束
表的创建 标准的建表语法 : CREATE TABLE [schema.] table (column datatype [DEFAULT expr], ... ); 使用子查询创建表的语法 CREA ...
- oracle中,约束、表名、Index等的名称长度限制最大只能30个字符
oracle中,约束.表名.Index等的名称长度限制最大只能30个字符
随机推荐
- Kubernetes-Secret
1. 简介 Secret 是一种包含少量敏感信息例如密码.令牌或密钥的对象. 这样的信息可能会被放在 Pod 规约中或者镜像中. 使用 Secret 意味着你不需要在应用程序代码中包含机密数据. 由于 ...
- Nginx全面介绍 什么是Nginx?
目录 一:Nginx全面讲解 1.简介: 2.nginx的用武之地 3.关于代理(解析含义作用) 二:正向代理 三:反向代理 四:项目应用场景 五:正向代理与反向代理区别 1.正向代理 2.反向代理 ...
- mysql 相关练习题
/* 自己查询自己 把一张表看成是两张表. 表的设计. SELECT * FROM depart; SELECT d1. NAME '部门', d2. NAME '分部门' FROM depart d ...
- Flutter 2.10 更新详解
Flutter 2.10 版已正式发布!虽然⾃ 上次稳定版本发布 以来还不到两个⽉,即使在这么短的时间内,我们也已处理和关闭了 1843 个 Issue,合并了来⾃全球 155 位贡献者的 1525 ...
- ApacheCN 深度学习译文集 2020.9
协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 不要担心自己的形象,只关心如何实现目标.--<原则>,生活原则 2.3.c 在线阅读 ApacheCN 面试求职交流群 72418 ...
- 关于老Windows平板电脑睡眠状态下无法开机(睡死)的问题及解决方案
1.简述 前几天我从闲鱼上淘了一个二手Windows平板, 拿来上课记笔记用. 型号是联想的Thinkpad Helix 2nd, 2015年出产. cpu是酷睿m-5y71超低功耗处理器, TDP只 ...
- JAVA中获取不同系统的换行符和获取系统路径路径分割符
简介 JAVA具有多平台特征,一次开发,多平台运行,主要依据JVM,但是不同的操作系统中换行符和分割符不同,故需要根据不同的操作系统去获取不同的符号. JAVA代码 @Test public void ...
- SqlServer数据库表生成C# Model实体类SQL语句——补充
在sql语句最前边加上 use[数据库名] 原链接:https://www.cnblogs.com/jhli/p/11552105.html --[SQL骚操作]SqlServer数据库表生成C ...
- 调试程序Bug-陈棚
1.使用NSAssert 主要可以作为自定义bug的返回信息,对调试极为方便知道bug出现在哪 NSAssert()只是一个宏,用于开发阶段调试程序中的Bug,通过为NSAssert()传递条件表达式 ...
- redis集群升级,数据迁移及校验
本次由于安全漏洞原因,需要降redis3升级为redis6,涉及到数据迁移及校验等,用阿里redis-shake迁移工具迁移,并用阿里RedisFullCheck工具进行数据比对 一.新redis安装 ...