我正在嘗試在 PostgreSQL 中添加 NOT NULL 約束,但找不到正確的語法。這基本上是我想要做的:
ALTER TABLE olimpic.tb_athlete
ADD CONSTRAINT soloESP CHECK(country = 'ESP' AND substitute_id IS NOT NULL)
和我試圖修改的表:
CREATE TABLE olimpic.tb_athlete
(
athlete_id CHAR(7) PRIMARY KEY,
name VARCHAR(50) NOT NULL,
country CHAR(3) NOT NULL,
substitute_id CHAR(7),
FOREIGN KEY (substitute_id) REFERENCES olimpic.tb_athlete(athlete_id)
);
我已經洗掉或將默認值設定為值為“ESP”的列國家/地區,以下代碼為例:
DELETE FROM olimpic.tb_athlete
where substitute_id is NULL and country = 'ESP';
但我仍然收到以下錯誤:
錯誤:錯誤:某些行 SQL 狀態違反了表 tb_athlete 上的檢查約束“soloESP”:23514
您可以為我提供有關如何進行的任何幫助將不勝感激。
uj5u.com熱心網友回復:
您是否意識到您嘗試添加的約束不允許country除'ESP'? 你說你同時想要兩個條件(因為你使用了AND運算子):每一行必須有country = 'ESP' AND非空substitute_id
我相信你想要的是
ALTER TABLE olimpic.tb_athlete
ADD CONSTRAINT soloESP CHECK(country != 'ESP' OR substitute_id IS NOT NULL);
此約束將確保 if country = 'ESP'thensubstitute_id必須為非空。對于其他國家/地區, null 和非 null 值substitute_id都是有效的。
但以上只是猜測,因為您既沒有提供資料庫的架構,也沒有提供欄位的含義,也沒有提供英文的錯誤文本,也沒有提供資料庫中存盤的資料,以便我們可以分析您的案例中真正發生的情況。請考慮編輯問題以添加上述內容
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/352999.html
標籤:PostgreSQL
