基础-oracle-约束
在关系型数据库中的完整性约束可以容易地且自动地在数据库表中实施重要的业务规则, 例如在人力资源的关系表中, 若没有为雇员指定一个管理员, 就不可能有该雇员。
在默认情况下Oracle允许所有列中有控制, 如果某列不允许有控制, 需要在指定该列时使用NOT NULL
约束, 可以在表创建过程中施加数据库约束。
可以对Oracle表施加几种类型的约束, 可以将约束分为以下5种类型
- 主键约束
- NOT NULL约束
- 检查约束
- 唯一约束
- 引用完整性约束
主键约束
主键是表的非常重要的一类约束, 如果一个列值要被唯一表示, 则可以为该列创建索引
CREATE TABLE dept
(dept_id number(9) PRIMARY KEY);
还可以用以下方法给已有表增加约束
ALERT TABLE dept
ADD PRIMETY KEY(dept_id);
由于约束没有分配名字, 因此Oracle将分配一个系统生成的约束名。
如果要自定义的一个约束名, 可以使用以下命令该约束为dept_pk
:
ALTER TABLE dept
ADD CONSTRAINT
dept_pk PRIMARY KEY(dept_id);
非空约束
一个表通常有一个或多个列不允许为空, 即没有值, 典型例子是Employee
表的last_name
列
可以在表的创建阶段使用NOT NULL选项, 强制用户必须为此列输入值
CREATE TABLE employee
(last_name VARCHAR(30) NOT NULL);
如果表已创建, 则可以使用以下语句
ALTER TABLE employee MODIFY last_name NOT_NULL;
检查约束
可以使用检查约束确保列中数据在某个指定的参数范围内, 例如: 某公司雇员薪水不能等于或超过100000元
CREATE TABLE employee(
employee_id NUMBER,
last_name VARCHAR2(30),
first_name VARCHAR2(30),
department_id NUMBER,
salary NUMBER CHECK(salary < 100000)
);
唯一约束
在关系型数据库中很常见, 确保了关系表中行的唯一性, 一个表中可以有多个唯一约束。例如, employee_id列的唯一约束确保任何一个雇员不会在employee表中出现两次
下列SQL中确保了组合dept_name和location列的唯一约束
CREATE TABLE dept(
dept_no NUMBER(3),
dept_name VARCHAR2(15),
location VARCHAR2(25),
CONSTRAINT dept_name_ukey UNIQUE(dept_Name, location)
);
应用完整约束(外键)
用于确保某些重要列值有意义, 假设有一个应用另一个表的父表, 如dept和employee表的情形, 如果某个部门不在部门表中, 就不能将雇员表的雇员分配给该部门
使用引用完整约束, 可以确保合法部门存在
CREATE TBALE employee
(
employee_id NUMBER(7),
last_name VARCHAR2(30),
first_name VARCHAR2(30),
job VARCHAR2(15),
dept_id NUMBER(3) NOT NULL
CONSTRAINT dept_fkey REFERENCES dept(dept_id)
);
数据库指出雇员表的dept_id列为外键, 这是因为它指向dept表中的dept_id列
参考
oracle database 11g
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性