[20121020]主外來鍵約束以及NULL問題.txt
[20121020]主外來鍵約束以及NULL問題.txt
主外來鍵約束可以一定程度保證資料完整性,但是如果外來鍵輸入的是NULL,情況會如何呢?
SQL> select * from v$version ;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
1.測試1:
drop table t1 purge;
drop table t2 purge;
create table t1( id number, name varchar2(10));
alter table t1 add constraint pk_t1 unique (id, name);
SQL> desc t1;
Name Null? Type
------ -------- ----------------
ID NUMBER
NAME VARCHAR2(10)
create table t2( id2 number ,id number, name varchar2(10));
alter table t2 add constraint fk_t2 foreign key(id, name) references t1(id, name);
insert into t1 values(1,'test');
commit ;
insert into t2 values(1,2,'test');
insert into t2 values(2,1,'aaaa');
*
ERROR at line 1:
ORA-02291: integrity constraint (SCOTT.FK_T2) violated - parent key not found
--但是當我們插入空值時:
insert into t2 values(3,1,null);
insert into t2 values(4,2,null);
insert into t2 values(5,null,'aaaa');
insert into t2 values(6,null,'bbbb');
insert into t2 values(7,null,null);
commit ;
SQL> set NULL NULL
SQL> select * from t2;
ID2 ID NAME
---------- ---------- ----------
3 1 NULL
4 2 NULL
5 NULL aaaa
6 NULL bbbb
7 NULL NULL
2.測試2:
drop table t1 purge;
drop table t2 purge;
create table t1( id number, name varchar2(10));
alter table t1 add constraint pk_t1 primary key (id, name);
SQL> desc t1
Name Null? Type
------ -------- -------------
ID NOT NULL NUMBER
NAME NOT NULL VARCHAR2(10)
create table t2( id2 number ,id number, name varchar2(10));
alter table t2 add constraint fk_t2 foreign key(id, name) references t1(id, name);
insert into t1 values(1,'test');
commit ;
insert into t2 values(1,2,'test');
insert into t2 values(2,1,'aaaa');
*
ERROR at line 1:
ORA-02291: integrity constraint (SCOTT.FK_T2) violated - parent key not found
--但是當我們插入空值時:
insert into t2 values(3,1,null);
insert into t2 values(4,2,null);
insert into t2 values(5,null,'aaaa');
insert into t2 values(6,null,'bbbb');
insert into t2 values(7,null,null);
commit ;
SQL> set NULL NULL
SQL> select * from t2;
ID2 ID NAME
---------- ---------- ----------
3 1 NULL
4 2 NULL
5 NULL aaaa
6 NULL bbbb
7 NULL NULL
3.總結:
所以要保證完整性,還要定義外來鍵NOT NULL.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-746820/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20180423]關於閃回表與主外來鍵約束.txt
- 批量刪除MSSQL 中主外來鍵約束SQL
- Javaweb-約束-外來鍵約束JavaWeb
- 外來鍵約束
- [20190218]延遲約束問題2.txt
- 【SQL】15 SQL 約束(Constraints)、NOT NULL 約束、UNIQUE 約束、PRIMARY KEY 約束、FOREIGN KEY 約束、CHECK 約束、DEFAULT約束SQLAINull
- 關於外來鍵約束
- 約束外來鍵筆記筆記
- 求主外來鍵的關係
- AppBoxFuture(七): 分散式外來鍵約束APP分散式
- oracle外來鍵約束的總結Oracle
- 教你mysql如何增加外來鍵約束MySql
- [20240228]約束novalidate.txt
- oracle 主外來鍵關係及實驗Oracle
- 資料庫的主外來鍵關係資料庫
- SQL外來鍵約束的含義及建立SQL
- mysql不能新增外來鍵約束怎麼辦MySql
- 主鍵約束、唯一約束和唯一索引索引
- EntityFramework Core 遷移忽略主外來鍵關係Framework
- [20191206]nvl與非空約束.txt
- TreeSet的null值與元素型別的約束Null型別
- Mysql-基本練習(06-唯一約束、外來鍵約束、新增、刪除單列)MySql
- 淺談Oracle 主外來鍵刪除語法格式Oracle
- mysql~資料完整性考慮~外來鍵約束MySql
- 生成指令碼,得到所有表的外來鍵約束,然後刪除並重建這些約束指令碼
- [20231115]建立enable novalidate約束2.txt
- [20201201]約束大寫與查詢.txt
- MySQL建立資料表並建立主外來鍵關係MySql
- [20210520]關於主鍵索引問題.txt索引
- 聊聊Oracle外來鍵約束(Foreign Key)的幾個操作選項Oracle
- EF Code First中的主外來鍵約定和一對一、一對多關係的實現
- iOS Autolayout 修改約束優先順序崩潰問題iOS
- MYSQL timestamp NOT NULL插入NULL的報錯問題MySqlNull
- 資料遷移無法新增外來鍵約束,錯誤程式碼 1215
- 約束
- [20231109]bash shell快捷鍵alt+number的問題.txt
- MariaDB資料庫的外來鍵約束例項程式碼介紹詳解資料庫
- [資料庫]資料庫中為什麼不推薦使用外來鍵約束資料庫
- 【MySQL】MySQL進階(外來鍵約束、多表查詢、檢視、備份與恢復)MySql