oracle 5种约束条件使用方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 约束
约束是操作表数据的强制规定
有以下五种约束:
•NOT NULL ;非空约束
•UNIQUE :唯一值约束
•PRIMARY KEY:主键约束
•FOREIGN KEY:外键约束
•CHECK:检查约束
约束:建表的时候可以加约束,建表后也可加约束
注意事项
、如果不指定约束名 Oracle server 自动按照 S、YS_C n 的格式指定约束名
、在什么时候创建约束:
•建表的同时
•建表之后
、可以在表级或列级定义约束
、可以通过数据字典视图查看约束
create table newdept
as
select * from departments
create table newemp
as
select * from employees
2 定义约束
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr]
[column_constraint],
...
[table_constraint][,...]);
CREATE TABLE employees(
employee_id NUMBER(6),
first_name VARCHAR2(20),
...
job_id VARCHAR2(10) NOT NULL,
CONSTRAINT emp_emp_id_pk
P RIMARY KEY (EMPLOYEE_ID));
列级
column[CONSTRAINT constraint_name] constraint_type,
表级
column,...
[CONSTRAINT constraint_name] constraint_type (column, ...),
3 NOT NULL 约束
只能定义在列级:
保证列值不能为空:
修改first_name 非空
alter table newemp
modify (first_name NOT NULL)
取消非空约束
alter table newemp
modify (first_name NULL)
增加约束
定义每一行必须满足的条件
以下的表达式是不允许的:
•出现CURRVAL, NEXTVAL, LEVEL, 和ROWNUM 伪列
•使用 SYSDATE, UID, USER, 和 USERENV 函数
•在查询中涉及到其它列的值
..., salary NUMBER(2)
CONSTRAINT emp_salary_min
CHECK (salary > 0),...
限制工资不能少于2000
alter table newemp
ADD constraints newemp_salary_ck CHECK(salary>=2000)
添加约束的语法
使用 ALTER TABLE 语句:
添加或删除约束, 但是不能修改约束
有效化或无效化约束
添加 NOT NULL 约束要使用 MODIFY 语句
ALTER TABLE table
ADD [CONSTRAINT constraint] type (column);
添加约束
ALTER TABLE employees
ADD CONSTRAINT emp_manager_fk
FOREIGN KEY(manager_id)
REFERENCES employees(employee_id);
alter table表名
modify(自定义列名约束设置)
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,
4主键约束
限制列值不允许空值,且不能为空,一个表只有一个主键
只要主键都会Alter,一般主键是ID唯一的
alter table newemp
ADD constraints newemp_empid_pk primary key(employee_id)
删除主键约束
alter table newemp
drop constraints newemp_empid_pk;
复合主键(多个列设置为主键)
ALter table newemp
add constraint newemp_ename_pk primary key(first_name, last_name)
5唯一约束
唯一值约束,限制列值不允许重复,可以为空(不会限制空值),一个表可以有多个唯一值的约束,不允许insert into
可以定义在表级或列级:
设置唯一值约束
alter table newemp
ADD constraints newemp_email_uk UNIQUE(email)
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));
查约束,限制自定义条件,忽略空值
可以定义在表级或列级:
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,
...
CONSTRAINT emp_email_uk UNIQUE(email));