CREATE TABLE Movie(
name VARCHAR(30),
year int,
CHECK ((name='one' AND year>1990) OR (name='two' AND year<1990))
);
我是 MySQL 的初學者,我的目標是限制 name='one' 和 name='two',以便它們的年份不能在 1990 年之后或之前插入值。該約束在“一”和“二”上運行良好,但是例如,當我嘗試添加 name='three' 時,它會引發錯誤,我無法弄清楚為什么因為 name='three' 不在約束中,并且不應該限制在任何一年。
mysql> INSERT INTO Movie values ('three', 1999);
ERROR 3819 (HY000): Check constraint 'movie_chk_1' is violated.
如果您有任何提示,請告訴我,因為我對資料庫沒有太多經驗。
uj5u.com熱心網友回復:
我懷疑您希望允許除此之外的任何名稱one并且two沒有其他限制。如果是這樣,那么您需要為檢查約束添加一個條件。
CREATE TABLE Movie (
name VARCHAR(30),
year INT,
CHECK (name = 'one' AND year > 1990 OR name = 'two' AND year < 1990 OR
name NOT IN ('one', 'two'));
所以這里的邏輯是允許:
- 名稱 = 1 和大于 1990 的年份
- 姓名 = 2 年,小于 1990 年
- 或任何一年以外的任何名稱
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/328740.html
標籤:mysql
上一篇:使用pagygem時#Array的未定義方法`model_name'
下一篇:欄位串列中的PHP未知列但表存在
