约束:表级的强制规定
约束可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)。
列级约束只能作用在一个列上
表级约束可以作用在多个列上
NOT NULL (只能定义在列上)
约束强制列不接受 NULL 值。
约束强制字段始终包含值。
定义方式
CREATE TABLE employees(
employee_id NUMBER(6),
first_name VARCHAR2(20),
...
job_id VARCHAR2(10) NOT NULL,
CONSTRAINT emp_emp_id_pk
PRIMARY KEY (EMPLOYEE_ID));
列级:
column[CONSTRAINT constraint_name] constraint_type,
表级
column,...
[CONSTRAINT constraint_name] constraint_type
(column, ...),
UNIQUE 约束:唯一标识数据库表中的每条记录。
可以定义在表级或列级。
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY 拥有自动定义的 UNIQUE 约束。
每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
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,
...
CONSTRAINT emp_email_uk UNIQUE(email));
PRIMARY KEY 约束:唯一标识数据库表中的每条记录。
可以定义在表级或列级。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。
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 约束:一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY 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)
REFERENCESdepartments(department_id),
CONSTRAINT emp_email_uk UNIQUE(email));
FOREIGN KEY: 在表级指定子表中的列
REFERENCES: 标示在父表中的列
ON DELETE CASCADE(级联删除): 当父表中的列被删除时,子表中相对应的列也被删除
ON DELETE SET NULL(级联置空): 子表中相应的列置空
FOREIGN KEY 约束的关键字
SQL CHECK 约束:用于限制列中的值的范围。
对单个列定义 CHECK 约束,那么该列只允许特定的值。
对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。
...,
salaryNUMBER(2)
CONSTRAINT emp_salary_min
CHECK (salary > 0),
...
ALTER TABLE 语句
添加约束
添加或删除约束,但是不能修改约束
有效化或无效化约束
添加NOT NULL 约束要使用MODIFY 语句
ALTER TABLEtable
ADD[CONSTRAINTconstraint] type(column);
删除约束
alter tablemy_employee5
drop constraintmy_employee5_sal_ck;
无效化约束
在ALTER TABLE 语句中使用DISABLE 子句将约束无效化。
alter table my_employee5
disable constraint my_employee5_fir_name_uk;
激活约束
ENABLE 子句可将当前无效的约束激活
当定义或激活UNIQUE 或PRIMARY KEY 约束时系统会自动创建UNIQUE 或PRIMARY KEY索引
alter table my_employee5
enable constraint my_employee5_fir_name_uk;
查询约束
查询数据字典视图USER_CONSTRAINTS
SELECTconstraint_name, constraint_type,
search_condition
FROMuser_constraints
WHEREtable_name = 'EMPLOYEES';
查询定义约束的列
查询数据字典视图USER_CONS_COLUMNS
SELECTconstraint_name, column_name
FROMuser_cons_columns
WHEREtable_name= 'EMPLOYEES';