淺談Oracle 主外來鍵刪除語法格式

Tit先生發表於2020-11-14

Oracle

99語法

--表連線 99語法
--笛卡爾積 cross join
select * from emp,dept;
select * from emp cross join dept;

--等值連線 | 非等值連線 
--join ..on 
--等值
select empno,ename,emp.deptno,dname from emp join dept on emp.deptno = dept.deptno;

--30部門員工資訊 薪資等級資訊
select e.deptno,max(sal),count(grade) from emp e join salgrade s on sal between losal and hisal where e.deptno in( 10,30) group by e.deptno;


--查詢所有員工的員工資訊以及上級經理人資訊
select * from emp e1 join emp e2 on e1.mgr = e2.empno order by e1.empno;

--外連線 
--主表 : 無論是否滿足連線條件,都能顯示主表中的資料
--left join : 主表在左邊
--right join : 主表在右邊
select * from emp e1 left join emp e2 on e1.mgr = e2.empno order by e1.empno;
select * from emp e2 right join emp e1 on e1.mgr = e2.empno order by e1.empno;

select *
  from emp e
  join dept d
    on e.deptno = d.deptno
  join salgrade
    on sal between losal and hisal;

建立表結構

--在建立表的同時欄位後面新增約束,指定約束名
--資料型別(預設位元組)  如果想要以字元個數為單位 varchar2(5 char)
create table school(
       sid  number(5) constraints pk_school primary key,
       --唯一約束
       sname varchar2(5 char) constraints unique_sname unique, 
       --學校位置
       location varchar2(30),
       
       --表結構結束之前新增約束
       constraint loc_not_null check(location not null) 
)

主鍵:primary key —>外加起主鍵別名constraints

外來鍵:例如要在表結構裡面建立那麼使用:references 表名(表的主鍵),倘若在表結構外面那麼就用追加欄位:foreign key(外來鍵的主表id) —>外加起主鍵別名constraints

例如:

--DDL 
--新增結構中的外來鍵
alter table student add constraint FK_CID foreign key(cid) references clazz(cid);
--修改結構中的刪除約束  
alter table student drop constraints FK_CID;

刪除資料(delete)

  • 解說遇到的問題
/*刪除資料: 
 刪除的是從表中的資料->正常刪除
 刪除的是主表中的沒有被從表資料引用的主表資料的時候,可以直接刪除
 但是刪除的是主表中被從表資料所引用的主表資料的時候
  1) 先刪除從表中引用了當前主表資料的那些從表資料,然後再刪除當前主表資料
  2) 刪除主表資料的同時,為從表中引用了當前主表資料的外來鍵欄位設定為null    on delete set null
  3) 刪除主表資料的同時,刪除那些引用了當前主表資料的從表資料  on delete cascade
*/
 --外來鍵約束  
       cid number(5) constraint fk_cid  references class(cid) on delete cascade --on delete set null

相關文章