约束:(什么叫约束)
概念:1.约束是表级强制执行的规则2.当表中数据有相互依赖性时,可保护数据不被删除
Oracle 有如下类型的约束:
NOT NULL—非空约束
UNIQUE Key—唯一性约束
PRIMARY KEY—主键约束
FOREIGN KEY—外键约束
Check-约束
约束概况:
Oracle使用 SYS_Cn 格式命名约束.
创建约束的方式-两种:
1.在建表的同时创建
2.建表后创建
可定义列级或表级约束.
可通过数据字典表查看约束
创建约束的方式:
CREATE TABLE [schema.]table
(column datatype [DEFRAULT expr]
[column_constraint],
[table_constraint];
)
语法格式:ALTER TABLE命令
ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束内容。
实例:
创建表的时候创建约束:
CREATE TABLE emp
(emptno NUMBER(4),
ename VARCHAR2(10),
deptno NUMBER(7,2) NOT NULL,
CONSTRAINT emp_empno_pk PRIMARY KEY (empno));
列级约束:
Column [constraint constraint_name] constraint_type,
表级约束:
Column,…
[constraint constraint_name] constraint_type(column,…),
非空约束(not null)
定义列级约束:
SQL> CREATE TABLE emp(
empno NUMBER(4),
ename VARCHAR2(10) NOT NULL,
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(7,2) NOT NULL);
唯一性约束(unique)
SQL> CREATE TABLE dept(
deptno NUMBER(2),
dname VARCHAR2(14),
loc VARCHAR2(13),
CONSTRAINT dept_dname_uk UNIQUE(dname));
主键约束(PRIMARY KEY)
SQL> CREATE TABLE dept(
deptno NUMBER(2),
dname VARCHAR2(14),
loc VARCHAR2(13),
CONSTRAINT dept_dname_uk UNIQUE(dname),
CONSTRAINT dept_deptno_pk PRIMARY KEY(dept_no));
外键约束(FOREIGN KEY)
SQL> CREATE TABLE emp(
empno NUMBER(4),
ename VARCHAR2(10) NOT NULL,
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(7,2) NOT NULL,
CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno)
REFERENCES dept (deptno));
外键约束的关键字
Foreign key :定义子表的哪一列作为外键的约束。
References:指示主表和参照的列
ON DELETE CASCADE:删除子表时将子表的相关记录删除
ON DELETE SET NULL:将外键引用置为空值
Check约束
定义每一记录都要满足的条件
条件表达式不允许有:currval,nextval,level,rownum
Sysdate,uid,user,userenv 函数
参照其他记录的值
..., deptno NUMBER(2),
CONSTRAINT emp_deptno_ck
CHECK (DEPTNO BETWEEN 10 AND 99),...
加约束
可加或删除约束,但是不能修改
可以使约束生效和失效
使用modify子句可加not null约束
ALTER TABLE table
ADD [CONSTRAINT constraint] type (column);
实例:增加外键约束到EMP表
SQL> ALTER TABLE emp
ADD CONSTRAINT emp_mgr_fk
FOREIGN KEY(mgr) REFERENCES emp(empno);
删除约束:
删除约束emp_mgr_fk
SQL> ALTER TABLE emp
DROP CONSTRAINT emp_mgr_fk;
结果:Table altered.
删除主键约束和相关的外键约束.:
SQL> ALTER TABLE dept
DROP PRIMARY KEY CASCADE;
使约束失效:
在ALTER TABLE 语句中执行DISABLE子句可使完整性约束失效
使用 CASCADE 选项可使依赖的完整约束失效
SQL> ALTER TABLE emp
DISABLE CONSTRAINT emp_empno_pk CASCADE;
使约束生效
使用ENABLE子句将失效的约束生效.
SQL> ALTER TABLE emp
ENABLE CONSTRAINT emp_empno_pk;
结果:Table altered.
当使UNIQUE 或 PRIMARY KEY约束生效时,会自动创建 UNIQUE 或
PRIMARY KEY 索引.
查看约束:
通过查看 USER_CONSTRAINTS 表可得到用户的所有约束.
SQL> SELECT constraint_name, constraint_type,
search_condition
FROM user_constraints
WHERE table_name = 'EMP';--‘EMP’表名必须是大写
查看约束建立在哪些列:
通过查询USER_CONS_COLUMNS 视图可获得约束建立在哪些列上
SQL> SELECT constraint_name, column_name
FROM user_cons_columns
WHERE table_name = 'EMP';
约束的种类:not null ,unique key,primary key,foreign key,check
查询有关约束的数据字典表