MySQL中字段CHECK約束不能用,使用觸發器!

在使用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

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章