什么是约束
约束是表级的强制规定
有以下五种约束:
- NOT NULL : 非空约束
- UNIQUE :唯一约束
- PRIMARY KEY:主键
- FOREIGN KEY:外键
- CHECK:检查条件
1、非空约束只能定义在列上。
例 :
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 //这里使用constraint 后面emp_hire_date_nn 这个就是自定义的命名
NOT NULL,
)
2、UNIQUE :唯一约束
列级约束:
CREATE TABLE emp3(
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,
)
表级约束:
在emp3表中 email 列加上唯一约束
CREATE TABLE emp3(
CONSTRAINT emp_email_uk UNIQUE(email));
)
3、PRIMARY KEY:主键
CREATE TABLE emp4(
employee_id NUMBER(6) primary key,
last_name VARCHAR2(25) UNIQUE,
email VARCHAR2(25),
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
hire_date DATE NOT NULL,
)
表级约束:
在emp4表中 employee_id 列加上主键
CREATE TABLE emp4(
CONSTRAINT emp_email_uk primary key(employee_id);
)
4、FOREIGN KEY:外键约束
CREATE TABLE employees(
CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)
REFERENCES departments(department_id),
)
emp_dept_fk:约束名
FOREIGN KEY:外键约束
作用在列:department_id 上
references: 联系另外一张表(父表)
departments:另一张表的表名
department_id:另一张表的主键
FOREIGN KEY 约束的关键字:
FOREIGN KEY: 在表级指定子表中的列
REFERENCES: 标示在父表中的列
ON DELETE CASCADE(级联删除): 当父表中的列被删除时,子表中相对应的列也被删除
ON DELETE SET NULL(级联置空): 子表中相应的列置空
5、CHECK: 约束
CREATE TABLE emp4(
employee_id NUMBER(6) primary key,
salary NUMBER(8,2) CHECK (salary > 2000),
)
意思就是 salary 数值必须大于2000才可以。
6、添加约束
添加 NOT NULL 约束要使用 MODIFY 语句
例:把emp5表中salary 字段改为非空。
alert table emp5
modify (salary number(10,2) not null)
添加别的用 add constraint
ALTER TABLE emp5
add constraint emp5_name_uk unique(name);
emp5_name_uk :约束名
name:列名
emp5:表名
7、删除约束
ALTER TABLE emp5
DROP CONSTRAINT emp_manager_fk;
emp5是表名。
emp_manager_fk是约束名。
8、无效化约束
在ALTER TABLE 语句中使用 disable 子句将约束无效化
ALTER TABLE emp5
disable constraint emp_emp_id_pk;
emp5:表名
emp_emp_id_pk:约束名
9、激活约束
enable子句可将当前无效的约束激活
ALTER TABLE emp5
enable constraint emp_emp_id_pk
10、job :定时任务
1、定时执行:
select sysdate+1/270 from dual;
这就是 每隔1/270天会执行。
2、定点执行:
select trunc(sysdate)+1+9/24 from dual
每天的9点执行。