本篇講述的是在已經創建好表且有數據的情況下,增加CHECK約束的報錯問題
一、問題
當我給數據庫中已經創建好的Student表,增加約束條件。
--增加student表的約束條件,要求性別只允許取“男”或“女”。
ALTER TABLE Student
ADD CONSTRAINT C_Student CHECK (sex IN ('男','女'))
語法沒錯,但是運行出現報錯。如圖:
消息 547,級別 16,狀態 0,第 41 行
ALTER TABLE 語句與 CHECK 約束"C_Student"衝突。該衝突發生於數據庫"ScoreDB",表"dbo.Student", column ‘sex’。
二、分析原因
正常情況下,我們創建好數據表,然後用該語法定義增加約束是沒問題的。
但是經本人研究發現,當數據表中有數據時,增加約束會出現該問題。
因爲該Student表中是有數據的,所以增加不了約束。
三、解決辦法
方法一
sql語句方式:
把相關數據表的數據刪除掉,再執行該語句。
如果刪除表數據還是有問題,建議重建數據庫,先建立好關係,再導入數據試試。
方法二
可視化嚮導方式:
把“在創建或重新啓動時檢查現有數據”改爲否。
- 找到Student表,右擊約束,點擊“新建約束”
- 左上角自動有一個約束,然後點擊圖中位置的省略號圖標
- 根據實際情況給它添加約束關係,直接在框中輸入或黏貼,定義完關係後點擊確定
- 把“在創建或重新啓動時檢查現有數據”改爲否!!!
注意:
如果數據表中都沒有數據,可以默認爲是。但是數據表中都有數據才創建約束,就要把這裏改爲否,才能創建成功。
- 最後關閉這個頁面,會出現是否保存數據,依次點是就行了。