MySQL中的check語句被用于約束表中某些數據的取值范圍。雖然check語句可以限制一個字段中的取值范圍,但是它卻不能被用作主鍵。下面我們來看一下原因。
CREATE TABLE test( id INT PRIMARY KEY, age INT, CHECK (age BETWEEN 18 AND 60) );
上述代碼中,我們定義了一個test表,其中id是主鍵,age字段使用check語句限制了它的取值范圍在18和60之間。但是,當我們執行以上代碼時,MySQL會提示一個錯誤:
ERROR 3814 (HY000): Check constraint 'test_chk_1' cannot be used as reference key constraint
數據表的主鍵必須是唯一的,而check語句并不能保證一個字段中的值唯一。因此,check語句不能被用作主鍵。
如果我們需要保證一個字段中的值唯一,我們需要使用UNIQUE約束。例如:
CREATE TABLE test( id INT PRIMARY KEY, age INT, UNIQUE (age) );
上述代碼中,我們使用UNIQUE約束保證了age字段中的值唯一,以達到主鍵的效果。
綜上所述,我們不能使用check語句作為主鍵。如果需要保證一個字段中的值唯一,我們需要使用UNIQUE約束。