【CONSTRAINT】具有唯一性約束的列是否可以插入空值
請快速的回答這個問題:具有唯一性約束的列是否可以插入空值?
很多朋友看到這個問題後的反應過程一般是這樣的:
第一反應:這個問題實在是太過簡單啦!
進一步地反應:答案為“是”還是“否”呢?有點不太確定!
最後的行動:看看周圍有沒有朋友,不假思索地就問有沒有人知道正確答案!
這個問題我也被問到過多次!之所以在這裡談到這個“簡單問題”。只是想提醒大家:其實很多情況下僅需簡單動手測試一下,答案將來得更快更直接,印象也會更深!同時也能提高解決和分析問題的能力,何樂而不為呢?
我來記錄一下這個測試過程。
1.建立具有唯一約束的表T
sec@ora10g> create table t (x varchar2(8),constraint uniq_t unique(x));
Table created.
T表僅包含一列X,在X列上建立了唯一約束。
2.測試唯一約束的有效性
sec@ora10g> insert into t values ('secooler');
1 row created.
sec@ora10g> insert into t values ('secooler');
insert into t values ('secooler')
*
ERROR at line 1:
ORA-00001: unique constraint (SEC.UNIQ_T) violated
可見,當插入重複值“secooler”時提示違反了唯一約束條件。
3.驗證是否可以插入空值
嘗試兩種插入方法。
1)使用“null”插入
sec@ora10g> insert into t values (null);
1 row created.
2)使用“''”插入
sec@ora10g> insert into t values ('');
1 row created.
sec@ora10g> commit;
Commit complete.
結論已經非常明顯:具有唯一性約束的列是可以插入空值的!
4.驗證插入後的內容
為了方便檢視插入的空值,這裡使用兩種比較巧妙的方法進行體現。
sec@ora10g> select '>>'||x||'<
'>>'||X||'<<
------------
>>secooler<<
>><<
>><<
sec@ora10g> select nvl(x,'I am NULL value!') from t;
NVL(X,'IAMNULLVA
----------------
secooler
I am NULL value!
I am NULL value!
5.小結
我一貫主張的是“踐行出真知”。 很多朋友傾向於不加思考和動手便去發問。其實只要能靜下心來實際測試一下,便會獲得很多有趣的知識和快感,時間成本在這裡是微不足道的。如若你太過直接地知道了答案,很多精華也就變成了“情感上的垃圾” !
Good luck.
secooler
11.04.16
-- The End --
很多朋友看到這個問題後的反應過程一般是這樣的:
第一反應:這個問題實在是太過簡單啦!
進一步地反應:答案為“是”還是“否”呢?有點不太確定!
最後的行動:看看周圍有沒有朋友,不假思索地就問有沒有人知道正確答案!
這個問題我也被問到過多次!之所以在這裡談到這個“簡單問題”。只是想提醒大家:其實很多情況下僅需簡單動手測試一下,答案將來得更快更直接,印象也會更深!同時也能提高解決和分析問題的能力,何樂而不為呢?
我來記錄一下這個測試過程。
1.建立具有唯一約束的表T
sec@ora10g> create table t (x varchar2(8),constraint uniq_t unique(x));
Table created.
T表僅包含一列X,在X列上建立了唯一約束。
2.測試唯一約束的有效性
sec@ora10g> insert into t values ('secooler');
1 row created.
sec@ora10g> insert into t values ('secooler');
insert into t values ('secooler')
*
ERROR at line 1:
ORA-00001: unique constraint (SEC.UNIQ_T) violated
可見,當插入重複值“secooler”時提示違反了唯一約束條件。
3.驗證是否可以插入空值
嘗試兩種插入方法。
1)使用“null”插入
sec@ora10g> insert into t values (null);
1 row created.
2)使用“''”插入
sec@ora10g> insert into t values ('');
1 row created.
sec@ora10g> commit;
Commit complete.
結論已經非常明顯:具有唯一性約束的列是可以插入空值的!
4.驗證插入後的內容
為了方便檢視插入的空值,這裡使用兩種比較巧妙的方法進行體現。
sec@ora10g> select '>>'||x||'<
'>>'||X||'<<
------------
>>secooler<<
>><<
>><<
sec@ora10g> select nvl(x,'I am NULL value!') from t;
NVL(X,'IAMNULLVA
----------------
secooler
I am NULL value!
I am NULL value!
5.小結
我一貫主張的是“踐行出真知”。 很多朋友傾向於不加思考和動手便去發問。其實只要能靜下心來實際測試一下,便會獲得很多有趣的知識和快感,時間成本在這裡是微不足道的。如若你太過直接地知道了答案,很多精華也就變成了“情感上的垃圾” !
Good luck.
secooler
11.04.16
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-692682/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 約束CONSTRAINTAI
- constraint約束AI
- 10、Oracle中的約 束constraintOracleAI
- 唯一性約束和唯一性索引的區別索引
- MySQL——約束(constraint)詳解MySqlAI
- Sql Server 自定義約束 實現:某列 可空,但非空值唯一不重複SQLServer
- 如果INDEX表空間滿了,資料是否可以插入Index
- Oracle約束constraint的三個屬性應用OracleAI
- oracle 約束(constraint)的幾個引數的小研究OracleAI
- Oracle SQL細節總結之constraint約束OracleSQLAI
- Oracle約束Constraint對於CBO優化器的作用OracleAI優化
- 建約束(Constraint)時隱式建立索引(Index)及先建立索引後建立約束的區別AI索引Index
- Oracle資料庫中Constraint約束的四對屬性Oracle資料庫AI
- ORACLE 插入空值測試Oracle
- C# 泛型 引用型別約束 值型別約束C#泛型型別
- JS如何判斷一個陣列是否為空、是否含有某個值JS陣列
- ORA-01461: 僅可以為插入 LONG 列的 LONG 值賦值”解決辦法賦值
- 資料庫約束 主鍵-唯一性-Check-外來鍵資料庫
- 查詢(看)表的主鍵、外來鍵、唯一性約束和索引索引
- Logical Standby中為什麼要求表中資料的唯一性約束
- 【SQL】15 SQL 約束(Constraints)、NOT NULL 約束、UNIQUE 約束、PRIMARY KEY 約束、FOREIGN KEY 約束、CHECK 約束、DEFAULT約束SQLAINull
- TreeSet的null值與元素型別的約束Null型別
- Mybatis如何動態生成插入的列及批次插入值MyBatis
- 約束Constraint引起CBO執行計劃變化一例AI
- ORACLE: 查詢(看)表的主鍵、外來鍵、唯一性約束和索引Oracle索引
- 判斷物件值是否為空物件
- [20120410]9i下索引與空值查詢以及非空約束.txt索引
- 資料遷移判斷非空約束
- js如何判斷一個變數是否具有值JS變數
- oracle impdp的skip_constraint_errors選項跳過唯一約束錯誤OracleAIError
- Javaweb-約束-外來鍵約束JavaWeb
- Java判斷欄位是否為空,為空賦值 ?Java賦值
- PostgreSQL違反唯一約束的插入操作會產品HEAP垃圾嗎?SQL
- js判斷option項中是否含有具有給定value值的項JS
- rhel4 mysql5.1 索引index_約束constraint建立_刪除_查詢MySql索引IndexAI
- Oracle定義約束 外來鍵約束Oracle
- oracle中的約束Oracle
- Mysql-基本練習(06-唯一約束、外來鍵約束、新增、刪除單列)MySql