概述
oracle-约束
- 什么是约束
- 注意事项
- 表级约束和列级约束
- 定义约束
- 列级约束
- 表级约束
- NOT NULL 约束
- UNIQUE 约束
- PRIMARY KEY 约束
- FOREIGN KEY 约束
- 外键约束中的关键字
- CHECK 约束
- 添加约束的语法
- 删除约束
- 无效化约束
- 激活约束
- 查询约束
- 查询定义约束的列
什么是约束
- 约束是表级的强制规定
- 有以下五种约束:
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
注意事项
- 如果不指定约束名 ,Oracle server 自动按照 SYS_Cn 的格式指定约束名
创建
和修改约束:- 建表的同时
- 建表之后
可以在表级
或列级
定义约束
可以通过数据字典视图查看约束
表级约束和列级约束
作用范围:
列级约束
只能作用在一个列上表级约束
可以作用在多个列上(当然表级约束也可以作用在一个列上)
定义方式:
列约束必须跟在列的定义后面,表约束不与列一起,而是单独定义。
非空(not null) 约束只能定义在列上
定义约束
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr]
[column_constraint],
...
[table_constraint][,...]);
列级约束
column [CONSTRAINT constraint_name] constraint_type
表级约束
column,…
[CONSTRAINT constraint_name] constraint_type (column, ...)
NOT NULL 约束
保证列值不能为空:
只能定义在列级:
CREATE TABLE employees(
employee_id NUMBER(6),
last_name VARCHAR2(25) NOT NULL,
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
hire_date DATE
CONSTRAINT emp_hire_date_nn
NOT NULL);
可以在PL/SQLDEV的My objects-Tables-employees-Check constraints中查看
UNIQUE 约束
唯一约束,允许出现多个空值:NULL
可以定义在表级或列级:
CREATE TABLE employees(
employee_id NUMBER(6),
last_name VARCHAR2(25) UNIQUE,--系统命名
email VARCHAR2(25),
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
hire_date DATE NOT NULL,
-- 可以声明在email后面:CONSTRAINT emp_email_uk UNIQUE,也可以如此末处声明。
CONSTRAINT emp_email_uk UNIQUE(email)--用户命名
);
PRIMARY KEY 约束
主键约束:不允许空值
可以定义在表级或列级:
CREATE TABLE departments(
department_id NUMBER(4),
department_name VARCHAR2(30)
CONSTRAINT dept_name_nn NOT NULL,--列级约束
manager_id NUMBER(6),
location_id NUMBER(4),
CONSTRAINT dept_id_pk PRIMARY KEY(department_id) -- 表级约束
);
FOREIGN KEY 约束
外键约束,不允许为空
可以定义在表级或列级:
CREATE TABLE employees(
employee_id NUMBER(6),
last_name VARCHAR2(25) NOT NULL,
email VARCHAR2(25),
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
hire_date DATE NOT NULL,
department_id NUMBER(4),
CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)
REFERENCES departments(department_id),
CONSTRAINT emp_email_uk UNIQUE(email)
);
外键约束中的关键字
FOREIGN KEY
: 在表级指定子表中的列
REFERENCES
: 标示在父表中的列
ON DELETE CASCADE
(级联删除): 当父表中的列被删除时,子表中相对应的列也被删除
ON DELETE SET NULL
(级联置空): 子表中相应的列置空
create table emp(
id number(6) primary key,
name varchar2(25) unique,
sal number(8,2),
dept_id number(4),
constraint dept_fk foreign key(dept_id) references dept(dept_id) on delete cascade
);
CHECK 约束
定义每一行必须满足的条件
create table emp(
id number(6) primary key,
name varchar2(25) unique,
sal number(8,2) check(sal >0 and sal<1000000),
dept_id number(4),
constraint dept_fk foreign key(dept_id)
references dept(dept_id) on delete cascade
);
添加约束的语法
使用 ALTER TABLE 语句:
- 添加或删除约束,但是不能修改约束
- 有效化或无效化约束
- 添加 NOT NULL 约束要使用 MODIFY 语句
ALTER TABLE 表名
ADD [CONSTRAINT 约束名 type (列名);
ALTER TABLE employees
ADD CONSTRAINT emp_manager_fk
FOREIGN KEY(manager_id)
REFERENCES employees(employee_id);
删除约束
从表 EMPLOYEES 中删除约束
ALTER TABLE employees
DROP CONSTRAINT emp_manager_fk;
无效化约束
在ALTER TABLE 语句中使用 DISABLE 子句将约束无效化
ALTER TABLE employees
DISABLE CONSTRAINT emp_emp_id_pk;
激活约束
ENABLE 子句可将当前无效的约束激活
ALTER TABLE employees
ENABLE CONSTRAINT emp_emp_id_pk;
当定义或激活UNIQUE
或 PRIMARY KEY
约束时系统会自动创建UNIQUE
或 PRIMARY KEY
索引
查询约束
查询数据字典视图 USER_CONSTRAINTS
SELECT constraint_name, constraint_type,
search_condition
FROM user_constraints
WHERE table_name = 'EMPLOYEES';
查询定义约束的列
查询数据字典视图 USER_CONS_COLUMNS
SELECT constraint_name, column_name
FROM user_cons_columns
WHERE table_name = 'EMPLOYEES';
最后
以上就是冷酷棒球为你收集整理的oracle-约束constraint什么是约束注意事项表级约束和列级约束定义约束添加约束的语法删除约束无效化约束激活约束查询约束查询定义约束的列的全部内容,希望文章能够帮你解决oracle-约束constraint什么是约束注意事项表级约束和列级约束定义约束添加约束的语法删除约束无效化约束激活约束查询约束查询定义约束的列所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复