1. 程式人生 > >mysql學習之check無效的解決及觸發器的使用

mysql學習之check無效的解決及觸發器的使用

修改 情況 執行 col 語義 沒有 遇到 可用 觸發器

SQL的約束種類:

一、非空約束 not null

二、唯一約束 unique

三、主鍵約束

四、外鍵約束

五、check約束

該約束可用於列之間檢查語義限制的,實際應用過程中非常常用!!

然鵝,MySQL中的check約束是無效的,哭哭

好在,經過多方搜索,找到了另一種代替方法,簡單易學,上手好用。。。那就是觸發器,一起來學習學習嗷┗|`O′|┛ 嗷~~

  • 觸發器的設置

觸發器(trigger):監視某種情況,並觸發某種操作。

觸發器創建語法四要素:1.監視地點(table) 2.監視事件(insert/update/delete) 3.觸發時間(after/before)

4.觸發事件(insert/update/delete)

語法:

create trigger triggerName

after/before insert/update/delete on 表名

for each row   #這句話在mysql是固定的

begin

sql語句;

end;

  

註意一點哦

在MySQL中,BEGIN … END 語句的語法為:

BEGIN
[statement_list]
END

其中,statement_list 代表一個或多個語句的列表,列表內的每條語句都必須用分號(;)來結尾。

而在MySQL中,分號是語句結束的標識符,遇到分號表示該段語句已經結束,MySQL可以開始執行了。因此,解釋器遇到statement_list 中的分號後就開始執行,然後會報出錯誤,因為沒有找到和 BEGIN 匹配的 END。

這時就會用到 DELIMITER 命令(DELIMITER 是定界符,分隔符的意思),它是一條命令,不需要語句結束標識,語法為:
DELIMITER new_delemiter
new_delemiter 可以設為1個或多個長度的符號,默認的是分號(;),我們可以把它修改為其他符號,如:DELIMITER:DELIMITER
在這之後的語句,以分號結束,解釋器不會有什麽反應,只有遇到了$,才認為是語句結束。註意,使用完之後,我們還應該記得把它給修改回來。


最後來一個小例子:

delimiter $
create trigger S_P after insert on books for each row begin delete from books where sale_price < purchase_price;
#設置商品售價不得小於進貨價格 end$ #顯示插入成功後 Query OK, 0 rows affected (0.30 sec) delimiter ;

 希望可以幫助到大家哦 Thanks?(?ω?)

愛大家?(づ ̄3 ̄)づ╭?~

mysql學習之check無效的解決及觸發器的使用