哪些約束可以確保某列中輸入了一些值?我很困惑主鍵和非空約束。哪些約束可以確保某列中輸入了一些值?
回答
一個NOT NULL
約束。
參與PK的所有列也必須不允許NULL
,但PK約束保證了更多的唯一性 - 即表中沒有兩行可以具有相同的主鍵值。
在SQL Server中,即使語法上您可以在DDL中命名爲NOT NULL
約束,但它不同於其他約束,因爲實際上沒有爲約束本身存儲元數據(包括名稱)。
CREATE TABLE T
(
X INT CONSTRAINT NotNull NOT NULL
)
我們生活和學習:我從來沒有意識到'NOT NULL'在語法上是一個約束! – 2013-03-10 21:15:46
NOT NULL
是條件是一個字段具有一個值。您可以強制爲每個插入或更新的記錄始終輸入一個值,使表定義中的字段不爲NULL。
主鍵必須滿足這三個條件:
- 字段的值是NOT NULL。
- 這些值是唯一的。
- 的值是不可變的。
數據庫可以使用唯一索引(以及該字段上的非空條件)強制執行前兩個條件。
第三個條件沒有通常由數據庫執行。數據庫通常會允許更改主鍵字段,因此DBA可以「修復」它們。因此,第三個條件更具哲理性,因爲您同意使用密鑰進行身份識別,而不是編寫更改值的應用程序,除非旨在讓管理員修復密鑰。
我已經使用字段在這裏,但主鍵可以是一個複合主鍵,由滿足條件的字段的任意組合的。任何匹配前2個或全部3個條件的字段組合稱爲候選鍵。
只有一個候選鍵,可以使用作爲主鍵。哪一個只是一個任意的選擇。
SQL Server不強制您的列表中的項目3。 – 2013-03-10 21:11:15
@MartinSmith DB2,Oracle或MySQL都不是。我懷疑通常的做法是讓條件3不受數據庫的強制。然而,條件3是關係數據庫理論定義的一部分。 – 2013-03-10 21:17:42
我明白你的觀點,但穩定性似乎比不變性更廣泛地被引用。 [請參閱此處的示例答案](http://stackoverflow.com/q/3632726/73226) – 2013-03-10 21:22:20
還有一點,我沒有看到解決的:NULL
和空字符串是兩個完全不同的事情,但他們往往被社會的很大一部分認爲可以互換。
可以聲明一個varchar
列NOT NULL
但你仍然可以做到這一點:
DECLARE @x TABLE(y VARCHAR(32) NOT NULL);
INSERT @x(y) VALUES('');
所以,如果你的目標是確保有既不是NULL
也不零長度的有效值字符串,你也可以添加一個檢查約束,例如
DECLARE @x TABLE(y VARCHAR(32) NOT NULL CHECK (DATALENGTH(LTRIM(y)) > 0));
@MartinSmithTouché謝謝 – 2013-03-10 23:28:03
- 1. 確定哪些多行插入的值失敗外鍵約束
- 2. 哪些約束相沖突?
- 3. 序列化某些輸入
- 4. SQL可以確定一組可能列值中的哪些值不存在?
- 5. 在某些約束之後使datagrid列可見性爲假
- 6. 神經網絡:約束某些輸入節點對某些輸出節點的貢獻
- 7. 如何獲得一列中哪些列在Pandas中的某些值內?
- 8. 在data.table使用一些列的值,以確定哪些其餘列將用於
- 9. 哪些操作會使約束失效?
- 10. 需要幫助瞭解一些列約束行爲
- 11. 如何知道在哪些版本中引入了某一行?
- 12. 使用jquery將某些表單輸入設置爲某些值
- 13. 唯一約束 - 這些列當前沒有唯一值..?
- 14. 除了某些值以外的組
- 15. 我可以找到某個類違反了哪些CQL規則
- 16. 粘貼到某些輸入框的值,但在某些textarea中顯示值
- 17. MSBuild SvnInfo - 哪些目標輸入正確?
- 18. 某些字段是在回發約束力有些不
- 19. DirectShow有哪些許可證以及它可以處理哪些輸入和輸出?
- 20. 數組:某些值的位置輸入
- 21. 存在於其他表中的某些列值的外鍵約束
- 22. PHP - 確保多維數組中的某些值是唯一的
- 23. 添加約束到路由以排除某些關鍵字
- 24. 可以禁用android輸入中的一些輸入按鈕
- 25. 即使輸入了某些東西,TextBox.text的值也是空的
- 26. Python:使用輸入來確定保存哪些行
- 27. 哪些輸入例爲以下要求
- 28. 對錶單的SQL驗證以確保它具有某些值
- 29. 某些輸入未提交
- 30. HTML5佔位符屬性值可以保存哪些值類型?
Null是結構化查詢語言(SQL)中用於指示數據值不存在於數據庫中的特殊標記。有關更多詳細信息,請參閱此部分[空(SQL)](http://en.wikipedia。org/wiki/Null_(SQL)) – 2013-03-10 21:04:15
PRIMARY KEY約束唯一標識數據庫表中的每條記錄。主鍵必須包含唯一值。取自[SQL PRIMARY KEY Constraint](http://www.w3schools.com/sql/sql_primarykey.asp) – 2013-03-10 21:06:47
NOT NULL約束強制列不接受NULL值。取自[SQL NOT NULL Constraint](http://www.w3schools.com/sql/sql_notnull.asp) – 2013-03-10 21:09:11