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