-- 先建立父表:部門表:
create table department(
dno int(4) primary key auto_increment,
dname varchar(10) not null,
room char(4)
)
-- 注意:外來鍵約束只有表級約束,沒有列級約束:
-- 方法一:建立表的時候新增外來鍵約束
create table staff(
eid int(6) primary key auto_increment,
name varchar(5) not null,
department int(4),
-- 取值參考department表中的dno欄位,不要求欄位名字完全重複,但是型別長度定義 盡量要求相同。
constraint fk_staff_department foreign key (department) references department (dno)
);-- 方法二:建立完錶後新增外來鍵約束
create table staff(
eid int(6) primary key auto_increment,
name varchar(5) not null,
department int(4)
);-- 在建立表以後新增外來鍵約束:
alter table staff add constraint fk_staff_department foreign key (department) references department (dno)
-- 外來鍵策略 no action
delete from department where dno = 2;
-- > 1451 - cannot delete or update a parent row: a foreign key constraint fails (`mytestdb`.`staff`, constraint `fk_staff_department` foreign key (`department`) references `department` (`dno`))
-- 預設刪除的外來鍵策略是no action 如果刪除刪除有員工的部門的話,就會出錯,不讓直接刪除
-- 先刪除之前的外來鍵約束:
alter table staff drop foreign key fk_staff_department;
-- 重新新增外來鍵約束:
alter table staff add constraint fk_staff_department foreign key (department) references department (dno) on update cascade on delete cascade;
-- on update cascade 與 on delete cascade;
-- 表示修改,與刪除都設定為級聯策略
-- 那麼部門表中,更改了部門編號,子表中部門編號就跟著自動修改,
-- 要是刪除了某個部門,那麼這個部門的所有員工資訊也都降被刪除.
-- 先刪除之前的外來鍵約束:
alter table staff drop foreign key fk_staff_department;
-- 重新新增外來鍵約束:
alter table staff add constraint fk_staff_department foreign key (department) references department (dno) on update set null on delete set null;
-- on update set null 與 on delete set null;
-- 表示修改,與刪除都設定為set null策略
-- 那麼部門表中,更改了部門編號,子表中該部門員工的部門欄位都被修改為null,
-- 要是刪除了某個部門,那麼這個部門的所有員工部門欄位都被修改為null.
一般策略2與策略3搭配進行使用,修改的時候,級聯進行修改,刪除的時候set null
-- 先刪除之前的外來鍵約束:
alter table staff drop foreign key fk_staff_department;
-- 重新新增外來鍵約束:
alter table staff add constraint fk_staff_department foreign key (department) references department (dno) on update cascade on delete set null;
-- on update cascade on delete set null;
-- 表示修改使用級聯策略,刪除使用set null策略
-- 那那麼部門表中,更改了部門編號,子表中部門編號就跟著自動修改,
-- 要是刪除了某個部門,那麼這個部門的所有員工部門欄位都被修改為null.
表的完整性約束 外來鍵約束
先建立父表 部門表 create table department dno int 4 primary key auto increment,dname varchar 10 not null,room char 4 注意 外來鍵約束只有表級約束,沒有列級約束 方法一 建立表的時候新增外來鍵約束 c...
cascade 外來鍵完整性約束
其面我們介紹了 建立外來鍵約束時如果使用oracle預設的建立方式 在刪除被參照的資料時,將無法被刪除,這一點在oracle9i中給了我們更多靈活的選擇,我們可是使用on delete cascade和 on delete set null關鍵字來決定刪除被參照資料時是否要將參照這個資料的那些資料一...
完整性約束
create table student tb id int notnull 非空約束 資料不允許為空 name varchar 255 null 顯式指定允許為空 新增非空約束 alter table 表名 modify column 屬性名 屬性型別 not null alter table s...