mysql触发器如果某个字段被修改_mysql trigger触发器 一张表一个字段改变 更新另一张表对应字段...
觸發器語句先貼出來:
DELIMITER $$
CREATE TRIGGER goods_sku_shopprice_trigger AFTER UPDATE ON t_sku FOR EACH ROW
BEGIN
SET @oldPrice = (SELECT t_goods.shop_price FROM t_goods WHERE t_goods.goods_id=new.goods_id LIMIT 1);
IF new.shop_price
UPDATE t_goods SET t_goods.shop_price=new.shop_price WHERE t_goods.goods_id=new.goods_id;
END IF;
END $$
DELIMITER ;
注意點1:select t_goods.shop_price from t_goods where t_goods.goods_id=new.goods_id limit 1;不能直接用作表達式比較,因為語句很多可能返回多個值。應該將結果賦值給一個變量@oldPrice然后比較。
錯誤示范:new.shop_price
正確示范:new.shop_price
注意點2:給變量賦值時如果賦值結果是由sql語句查詢而來記得sql語句加括號,否則也會出錯。
錯誤示范:set @oldPrice = select t_goods.shop_price from t_goods where t_goods.goods_id=new.goods_id limit 1;
正確示范:set @oldPrice = (select t_goods.shop_price from t_goods where t_goods.goods_id=new.goods_id limit 1);
注意點3:begin 和 end之前是語句,就像其它編程語言一樣。因此每一句寫完記得加分號結尾。
注意點4:DELIMITER 后面注意只有一個空格。(這個坑我踩過,雖然只花了不到20分鐘,但是很難發現)
下面這個觸發器很簡單。當count=0時做插入操作。大于0時做修改操作。但是注意第一行的DELIMITER $$,中間是只能有一個空格的,多了一個空格的話,會報錯,并且是至少不止一個錯誤,應該是將空格當成結束符了。
DELIMITER $$
CREATE TRIGGER d_mmiddle_add_trigger AFTER INSERT ON t_middle FOR EACH ROW
BEGIN
SET @count = (SELECT COUNT(*) FROM t_mmiddle WHERE t_mmiddle.`m_pid`=new.m_pid AND t_mmiddle.`m_uid`=new.m_uid);
IF @count = 0 THEN
INSERT INTO t_mmiddle VALUES (new.m_uid,new.m_pid,new.m_id,new.chip_number,new.gz_type,
new.zw_type,new.bz_type,new.state,new.pack_info,new.is_black,
new.out_time,new.create_time,new.forbid_id,new.forbid_state,new.is_teach,
new.builder,new.accountId,'add');
ELSE
UPDATE t_mmiddle SET m_id=new.m_id,m_pid=new.m_pid, m_uid=new.m_uid,chip_number=new.chip_number,gz_type=new.gz_type,
zw_type=new.zw_type,bz_type=new.bz_type,state=new.state,pack_info=new.pack_info,is_black=new.is_black,
out_time=new.out_time,create_time=NOW(),forbid_id=new.forbid_id,forbid_state=new.forbid_state,is_teach=new.is_teach,
builder=new.builder,accountId=new.accountId,oper='upt' WHERE m_pid=new.m_pid AND m_uid=new.m_uid;
END IF;
END $$
DELIMITER ;
總結
以上是生活随笔為你收集整理的mysql触发器如果某个字段被修改_mysql trigger触发器 一张表一个字段改变 更新另一张表对应字段...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: zabbix监控mysql的性能_zab
- 下一篇: lepus mysql 复制监控_MyS