在使用MySQL時,實現用戶定義完整性使用CHECK語句,結果發現最終插入、查詢時加不加check沒區別,所以從網上查找了下資料,發現MySQL目前不支持該語句,那麼就需要考慮是否可以有別的方法來實現類似的功能呢?
1、枚舉(限制範圍有限且不方便,不常用!!!)
最簡單粗暴的方式,在定義表結構時就將需要定義的限制條件寫進去,比如:
create table test(sno int,sname varchar(50),sgrade enum(1,2,3,4,5));
即要實現限制範圍,就把這個範圍內的所有數寫進枚舉,顯然,範圍小的時候可考慮,但不是通用的;
2、觸發器 !!!
【例題】
定義職工年齡(age)不得超過 60 歲。
【解釋】
當條件滿足if語句時,執行動作體,此時刪掉該條記錄即拒絕插入執行。
操作:
//不同 字段 和 表名只需更改 字段 和 表名 即可(此處爲 age 和 ploy)
create trigger age before insert
on ploy for each row
begin
if (new.age > 60) then
delete from ploy where age=new.age;
end if;
end;
(如果有多個條件用 and 連接)
如
begin
if (new.Price < 1 or new.Price>500) then
delete from t_product where Price=new.Price;
end if;
end
附加:
(如果涉及當前時間字段則爲current_timestamp)
效果
因爲一般涉及到一條信息要保證插入和更新時都要滿足字段範圍限制,則要加入兩個觸發器,至於觸發是before還是after,我不太清楚,網上是說優先before