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 表示式,用於指定需要檢查...