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


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 ̄)づ╭❤~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM