MySQL檢查約束(CHECK)

2021-09-28 18:00:07 字數 1370 閱讀 2287

mysql 檢查約束(check)可以通過 create table 或 alter table 語句實現,根據使用者實際的完整性要求來定義。它可以分別對列或表實施 check 約束。

檢查約束使用check關鍵字,具體的語法格式如下:

check 《表示式》

其中:《表示式》指的就是 sql 表示式,用於指定需要檢查的限定條件。

若將 check 約束子句置於表中某個列的定義之後,則這種約束也稱為基於列的 check 約束。

在更新表資料的時候,系統會檢查更新後的資料行是否滿足 check 約束中的限定條件。mysql 可以使用簡單的表示式來實現 check 約束,也允許使用複雜的表示式作為限定條件,例如在限定條件中加入子查詢。

注意:若將 check 約束子句置於所有列的定義以及主鍵約束和外來鍵定義之後,則這種約束也稱為基於表的 check 約束。該約束可以同時對錶中多個列設定限定條件。

建立表時設定檢查約束的語法規則如下:

check(《檢查約束》)

【例項 1】在 test_db 資料庫中建立 tb_emp7 資料表,要求 salary 字段值大於 0 且小於 10000,輸入的 sql 語句和執行結果如下所示。

mysql> create table tb_emp7

-> (

-> id int(11) primary key,

-> name varchar(25),

-> deptid int(11),

-> salary float,

-> check(salary>0 and salary<100),

-> foreign key(deptid) references tb_dept1(id)

-> );

query ok, 0 rows affected (0.37 sec)

修改表時設定檢查約束的語法規則如下:

alter table tb_emp7 add constraint 《檢查約束名》 check(《檢查約束》)

【例項 2】修改 tb_dept 資料表,要求 id 字段值大於 0,輸入的 sql 語句和執行結果如下所示。

mysql> alter table tb_emp7

-> add constraint check_id

-> check(id>0);

query ok, 0 rows affected (0.19 sec)

records: 0 duplicates: 0 warnings: 0

修改表時刪除檢查約束的語法規則如下:

alter table 《資料表名》 drop constraint 《檢查約束名》;

MySQL中CHECK約束無效

今天才知道在mysql中check約束是無效的,例如下面一段 在建立表table1時新增了check約束,要求field1欄位的值大於零,隨後向field1欄位插入 1,這明顯違反check約束,但這段 在mysql中卻可以執行成功。create table table1 field1 int,ch...

Mysql筆記(二) check約束字

1 check約束 check約束用於限制列中的值的範圍。如果對單個列定義check約束,那麼該列只允許特定的值。如果對乙個表定義check約束,那麼此約束會在特定的列中對值進行限制。2 check在mysql中不會被呼叫,不同於sql,在 mysql中,check只是一段可呼叫但無意義的子句,my...

MySQL之檢查約束

定義 mysql檢查約束 check 可以通過 create table 或 alter table 語句實現,根據使用者實際的完整性要求來定義。它可以分別對列或表實施 check 約束。檢查約束使用check關鍵字,具體的語法格式如下 check 表示式 表示式即為sql 表示式,用於指定需要檢查...