mysql學習之check無效的解決及觸發器的使用
阿新 • • 發佈:2019-04-17
修改 情況 執行 col 語義 沒有 遇到 可用 觸發器 4.觸發事件(insert/update/delete)
而在MySQL中,分號是語句結束的標識符,遇到分號表示該段語句已經結束,MySQL可以開始執行了。因此,解釋器遇到statement_list 中的分號後就開始執行,然後會報出錯誤,因為沒有找到和 BEGIN 匹配的 END。
SQL的約束種類:
一、非空約束 not null
二、唯一約束 unique
三、主鍵約束
四、外鍵約束
五、check約束
該約束可用於列之間檢查語義限制的,實際應用過程中非常常用!!
然鵝,MySQL中的check約束是無效的,哭哭
好在,經過多方搜索,找到了另一種代替方法,簡單易學,上手好用。。。那就是觸發器,一起來學習學習嗷┗|`O′|┛ 嗷~~
- 觸發器的設置
觸發器(trigger):監視某種情況,並觸發某種操作。
觸發器創建語法四要素:1.監視地點(table) 2.監視事件(insert/update/delete) 3.觸發時間(after/before)
語法:
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 代表一個或多個語句的列表,列表內的每條語句都必須用分號(;)來結尾。
這時就會用到 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無效的解決及觸發器的使用