- NOT NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- CHECK
一:查询约束
-- 查询表EMPLOYEES中的约束
SELECT CONSTRAINT_name,constraint_type,search_condition
FROM user_constraints
WHERE table_name = 'EMPLOYEES';
-- 查询某张表中约束名和列名
SELECT constraint_name,column_name
FROM user_cons_columns
WHERE table_name = 'EMPLOYEES'
二:创建约束
// CONSTRAINT 是约束的意思,若这里不写如数的名字EMP_ID_NN 则会自动生成一个
CREATE TABLE emp(
employee_id NUMBER(15) CONSTRAINT EMP_ID_NN NOT NULL,
last_name VARCHAR2(20) NOT NULL,
email VARCHAR2(20)
);
-- 约束可以写表级约束,也可以写列级约束
-- 可以自定义约束名,也可以自动生成
CREATE TABLE emp4(
-- 列级约束
-- ID NUMBER(20) UNIQUE
ID NUMBER(20),
-- NAME VARCHAR2(30) CONSTRAINT emp4_name_nn NOT NULL,自定义约束名
NAME VARCHAR2(30) NOT NULL,
salary NUMBER(10,2) CHECK(salary > 3000), -- check约束
email VARCHAR2(20),
department_id NUMBER(10),
-- 表级约束
CONSTRAINT emp4_id_pk PRIMARY KEY(ID),-- 主键约束
CONSTRAINT emp4_email_uk UNIQUE(email),
CONSTRAINT emp4_dept_id_fk FOREIGN KEY(department_id) REFERENCES departments(department_id)
-- CONSTRAINT emp4_dept_id_fk FOREIGN KEY(department_id) REFERENCES departments(department_id)
-- 级联删除:当主表中记录被删除时,该外键列中记录也被删除
-- CONSTRAINT emp4_dept_id_fk FOREIGN KEY(department_id) REFERENCES departments(department_id) -- 级联置空
-- 级联置空:当主表中记录被删除时,该外键列中记录被置空
)
三:修改约束
1)添加或删除,不能修改约束
-- 删除约束
ALTER TABLE emp4
DROP CONSTRAINT emp4_name_nn;
2)有效化或无效化
-- 无效化
ALTER TABLE emp4
DROP CONSTRAINT SYS_C007531;
无效化之后,约束变为灰色,即失效
有效化之后又生效
-- 有效化
ALTER TABLE emp4
ENABLE CONSTRAINT SYS_C007532
3)添加NOT NULL约束需要使用,MODIFY语句
ALTER TABLE emp4
MODIFY(email VARCHAR2(20) NOT NULL);