57. 定义非空约束
1). 非空约束只能定义在列级.
2). 不指定约束名
create table emp2 (
name varchar2(30) not null,
age number(3)
);
3). 指定约束名
create table emp3(
name varchar2(30) constraint name_not_null not null,
age number(3));
58. 唯一约束
1). 列级定义
①. 不指定约束名
create table emp2 (
name varchar2(30) unique,
age number(3)
);
②. 指定约束名
create table emp3 (
name varchar2(30) constraint name_uq unique,
age number(3)
);
2). 表级定义: 必须指定约束名
①. 指定约束名
create table emp3 (
name varchar2(30),
age number(3),
constraint name_uq unique(name)
);
58.1 主键约束:唯一确定一行记录。表明此属性:非空,唯一
59. 外键约束
1). 列级定义
①. 不指定约束名
create table emp2(
emp_id number(6),
name varchar2(25),
dept_id number(4) references dept2(dept_id))
②. 指定约束名
create table emp3(
emp_id number(6),
name varchar2(25),
dept_id number(4) constraint dept_fk3 references dept2(dept_id))
2). 表级定义: 必须指定约束名
①. 指定约束名
create table emp4(
emp_id number(6),
name varchar2(25),
dept_id number(4),
constraint dept_fk2 foreign key(dept_id) references dept2(dept_id))
60. 约束需要注意的地方
1). ** 非空约束(not null)只能定义在列级
2). ** 唯一约束(unique)的列值可以为空
3). ** 外键(foreign key)引用的列起码要有一个唯一约束
61. 建立外键约束时的级联删除问题:
1). 级联删除:
create table emp2(
id number(3) primary key,
name varchar2(25) unique,
dept_id number(3) references dept2(dept_id) on delete cascade)
2). 级联置空
create table emp3(
id number(3) primary key,
name varchar2(25) unique,
dept_id number(3) references dept2(dept_id) on delete set null)
1. 向表emp2的id列中添加PRIMARY KEY约束(my_emp_id_pk)
ALTER table emp2
ADD constraint my_emp_id_pk primary key(id);
2. 向表dept2的id列中添加PRIMARY KEY约束(my_dept_id_pk)
ALTER table dept2
ADD constraint my_dept_id_pk primary key(id)
3. 向表emp2中添加列dept_id,并在其中定义FOREIGN KEY约束,与之相关联的列是dept2表中的id列。
ALTER table emp2
ADD (dept_id number(10) constraint emp2_dept_id_fk references dept2(id));
准备工作:
create table emp2 as select employee_id id, last_name name, salary from employees
create table dept2 as select department_id id, department_name dept_name from departments