oracle外來鍵約束的總結
外來鍵約束的建立方法
tes1的建表語句為create table test1 (hid number primary key,hname varchar2(10));
1、建立表的同時建立外來鍵約束
1.1、列級別
create table test2 (hid1 number(10) REFERENCES test1(hid),hname1 varchar2(10));--系統自動生成約束名
create table test2 (hid1 number(10) constraint hid_pk REFERENCES test1(hid),hname1 varchar2(10));
1.2、表級別
create table test2 (hid1 number(10) ,hname1 varchar2(10),foreign key (hid1) REFERENCES test1(hid));--系統自動生成約束名
create table test2 (hid1 number(10) ,hname1 varchar2(10),constraint hid_pk foreign key (hid1) REFERENCES test1(hid));
2、表建立後再建立外來鍵約束
ALTER TABLE test2 ADD FOREIGN KEY (hid1) REFERENCES test1 (hid);--系統自動生成約束名
ALTER TABLE test2 ADD CONSTRAINT hid_pk FOREIGN KEY (hid1) REFERENCES test1 (hid);
子表操作會遇到的報錯
不能修改值為父表不存在的記錄
不能插入父表不存在的記錄
create table test1 (hid number primary key,hname varchar2(10));
create table test2 (hid1 number(10) constraint hid_pk REFERENCES test1(hid),hname1 varchar2(10));
insert into test1 values(1,'1');
insert into test2 values(1,'100');
update test2 set hid1=2 where hid1=1;--報錯ORA-02291: 違反完整約束條件 (HR.HID_PK) - 未找到父項關鍵字
insert into test2 values(2,'100');--報錯ORA-02291: 違反完整約束條件 (HR.HID_PK) - 未找到父項關鍵字
drop table test2;
drop table test1;
父表操作遇到的報錯
create table test1 (hid number primary key,hname varchar2(10));
create table test2 (hid1 number(10) constraint hid_pk REFERENCES test1(hid),hname1 varchar2(10));
insert into test1 values(1,'1');
insert into test2 values(1,'100');
delete from test1;--報錯ORA-02292: 違反完整約束條件 (HR.HID_PK) - 已找到子記錄
truncate table test1;--報錯ORA-02266: 表中的唯一/主鍵被啟用的外來鍵引用
drop table test1;--報錯ORA-02449: 表中的唯一/主鍵被外來鍵引用
update test1 set hid=2 where hid=1;--報錯ORA-02292: 違反完整約束條件 (HR.HID_PK) - 已找到子記錄
create table test1 (hid number primary key,hname varchar2(10));
create table test2 (hid1 number(10) constraint hid_pk REFERENCES test1(hid),hname1 varchar2(10));
insert into test1 values(1,'1');
truncate table test1;
drop table test1;--報錯ORA-02266: 表中的唯一/主鍵被啟用的外來鍵引用
create table test1 (hid number primary key,hname varchar2(10));
create table test2 (hid1 number(10) constraint hid_pk REFERENCES test1(hid),hname1 varchar2(10));
drop table test1;--報錯ORA-02266: 表中的唯一/主鍵被啟用的外來鍵引用
delete報錯的解決方法
解決方法1
delete from test2;
delete from test1;
解決方法2(不保留子表記錄)
alter table test2 drop constraint hid_pk;
ALTER TABLE test2 ADD CONSTRAINT hid_pk FOREIGN KEY (hid1) REFERENCES test1 (hid) ON DELETE CASCADE;
delete from test1;
解決方法3(保留子表記錄,但是字表對應欄位值變成null,如下test2的hid1為null了)
alter table test2 drop constraint hid_pk;
ALTER TABLE test2 ADD CONSTRAINT hid_pk FOREIGN KEY (hid1) REFERENCES test1 (hid) ON DELETE SET NULL;
delete from test1;
truncate報錯的解決方法
drop table test2;
truncate table test1;
或
alter table test1 disable primary key cascade;
truncate table test1;
或
alter table test1 disable primary key cascade;
truncate table test2;
truncate table test1;
採用如下一樣會報錯
truncate table test2;
truncate table test1;--繼續報錯ORA-02266: 表中的唯一/主鍵被啟用的外來鍵引用
drop報錯的解決方法
drop table test1 cascade constraints;
或
drop table test2;
drop table test1;
採用如下一樣會報錯
alter table test1 disable primary key cascade;
truncate table test2;
drop table test1;
tes1的建表語句為create table test1 (hid number primary key,hname varchar2(10));
1、建立表的同時建立外來鍵約束
1.1、列級別
create table test2 (hid1 number(10) REFERENCES test1(hid),hname1 varchar2(10));--系統自動生成約束名
create table test2 (hid1 number(10) constraint hid_pk REFERENCES test1(hid),hname1 varchar2(10));
1.2、表級別
create table test2 (hid1 number(10) ,hname1 varchar2(10),foreign key (hid1) REFERENCES test1(hid));--系統自動生成約束名
create table test2 (hid1 number(10) ,hname1 varchar2(10),constraint hid_pk foreign key (hid1) REFERENCES test1(hid));
2、表建立後再建立外來鍵約束
ALTER TABLE test2 ADD FOREIGN KEY (hid1) REFERENCES test1 (hid);--系統自動生成約束名
ALTER TABLE test2 ADD CONSTRAINT hid_pk FOREIGN KEY (hid1) REFERENCES test1 (hid);
子表操作會遇到的報錯
不能修改值為父表不存在的記錄
不能插入父表不存在的記錄
create table test1 (hid number primary key,hname varchar2(10));
create table test2 (hid1 number(10) constraint hid_pk REFERENCES test1(hid),hname1 varchar2(10));
insert into test1 values(1,'1');
insert into test2 values(1,'100');
update test2 set hid1=2 where hid1=1;--報錯ORA-02291: 違反完整約束條件 (HR.HID_PK) - 未找到父項關鍵字
insert into test2 values(2,'100');--報錯ORA-02291: 違反完整約束條件 (HR.HID_PK) - 未找到父項關鍵字
drop table test2;
drop table test1;
父表操作遇到的報錯
create table test1 (hid number primary key,hname varchar2(10));
create table test2 (hid1 number(10) constraint hid_pk REFERENCES test1(hid),hname1 varchar2(10));
insert into test1 values(1,'1');
insert into test2 values(1,'100');
delete from test1;--報錯ORA-02292: 違反完整約束條件 (HR.HID_PK) - 已找到子記錄
truncate table test1;--報錯ORA-02266: 表中的唯一/主鍵被啟用的外來鍵引用
drop table test1;--報錯ORA-02449: 表中的唯一/主鍵被外來鍵引用
update test1 set hid=2 where hid=1;--報錯ORA-02292: 違反完整約束條件 (HR.HID_PK) - 已找到子記錄
create table test1 (hid number primary key,hname varchar2(10));
create table test2 (hid1 number(10) constraint hid_pk REFERENCES test1(hid),hname1 varchar2(10));
insert into test1 values(1,'1');
truncate table test1;
drop table test1;--報錯ORA-02266: 表中的唯一/主鍵被啟用的外來鍵引用
create table test1 (hid number primary key,hname varchar2(10));
create table test2 (hid1 number(10) constraint hid_pk REFERENCES test1(hid),hname1 varchar2(10));
drop table test1;--報錯ORA-02266: 表中的唯一/主鍵被啟用的外來鍵引用
delete報錯的解決方法
解決方法1
delete from test2;
delete from test1;
解決方法2(不保留子表記錄)
alter table test2 drop constraint hid_pk;
ALTER TABLE test2 ADD CONSTRAINT hid_pk FOREIGN KEY (hid1) REFERENCES test1 (hid) ON DELETE CASCADE;
delete from test1;
解決方法3(保留子表記錄,但是字表對應欄位值變成null,如下test2的hid1為null了)
alter table test2 drop constraint hid_pk;
ALTER TABLE test2 ADD CONSTRAINT hid_pk FOREIGN KEY (hid1) REFERENCES test1 (hid) ON DELETE SET NULL;
delete from test1;
truncate報錯的解決方法
drop table test2;
truncate table test1;
或
alter table test1 disable primary key cascade;
truncate table test1;
或
alter table test1 disable primary key cascade;
truncate table test2;
truncate table test1;
採用如下一樣會報錯
truncate table test2;
truncate table test1;--繼續報錯ORA-02266: 表中的唯一/主鍵被啟用的外來鍵引用
drop報錯的解決方法
drop table test1 cascade constraints;
或
drop table test2;
drop table test1;
採用如下一樣會報錯
alter table test1 disable primary key cascade;
truncate table test2;
drop table test1;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2152987/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 外來鍵約束
- Javaweb-約束-外來鍵約束JavaWeb
- 約束外來鍵筆記筆記
- 關於外來鍵約束
- 聊聊Oracle外來鍵約束(Foreign Key)的幾個操作選項Oracle
- 教你mysql如何增加外來鍵約束MySql
- AppBoxFuture(七): 分散式外來鍵約束APP分散式
- SQL外來鍵約束的含義及建立SQL
- Laravel 學習總結二:get () 和 first () 的區別、@each () 的用法和新增外來鍵約束Laravel
- mysql不能新增外來鍵約束怎麼辦MySql
- mysql~資料完整性考慮~外來鍵約束MySql
- 生成指令碼,得到所有表的外來鍵約束,然後刪除並重建這些約束指令碼
- Mysql-基本練習(06-唯一約束、外來鍵約束、新增、刪除單列)MySql
- MariaDB資料庫的外來鍵約束例項程式碼介紹詳解資料庫
- 批量刪除MSSQL 中主外來鍵約束SQL
- 資料遷移無法新增外來鍵約束,錯誤程式碼 1215
- 10、Oracle中的約 束constraintOracleAI
- 主鍵約束、唯一約束和唯一索引索引
- oracle 註釋和約束Oracle
- 【MySQL】MySQL進階(外來鍵約束、多表查詢、檢視、備份與恢復)MySql
- [資料庫]資料庫中為什麼不推薦使用外來鍵約束資料庫
- 《資料庫系統概論》5.0——常見約束 大學生學習筆記(主鍵 外來鍵)資料庫筆記
- [20180423]關於閃回表與主外來鍵約束.txt
- Mysql關於資料庫是否應該使用外來鍵約束詳解說明創磅MySql資料庫
- 【SQL】15 SQL 約束(Constraints)、NOT NULL 約束、UNIQUE 約束、PRIMARY KEY 約束、FOREIGN KEY 約束、CHECK 約束、DEFAULT約束SQLAINull
- Oracle如何管理帶約束的B樹索引Oracle索引
- MYSQL的外來鍵MySql
- 外來鍵的變種
- 主鍵和外來鍵
- sqlserver外來鍵SQLServer
- 約束
- indexedDB 內鍵與外來鍵Index
- 新的主鍵和外來鍵的語法
- 10.30 索引,外來鍵索引
- MySQL學習筆記之資料定義表約束,分頁方法總結MySql筆記
- MySQL 約束MySql
- 03約束
- SQL約束SQL