本文目錄一覽:
- 1、mysql 5.1 一個觸發器 更新多個表
- 2、求助mysql的觸發器更新..
- 3、mysql 觸發器 update
- 4、mysql 觸發器 if 語句 update
- 5、mysql 實現每月更新一次的觸發器問題
mysql 5.1 一個觸發器 更新多個表
樓主寫的觸發器明顯錯了嗎,既然你是想通過更新mst_officecurrency表來達到更mst_office表的目的,那麼首先下面語句是多餘的,它應該是等你建好了觸發器之後再在SQL窗口中寫的:
update `mst_generalsetup` set `CurrencyName`=NEW.OfficeCurrencyName where `CurrencyName`=OLD.OfficeCurrencyName;
而且如果是在SQL窗口中那這樣寫就錯了,你應該寫成例如:
update mst_generalsetup set OfficeCurrencyName=新值 where OfficeCurrencyName=原來的值;
你得提供一個新值和舊值啊,不然你寫了那麼多new,old值,人家電腦知道你new值為多少,old值又為多少啊,所以正確的觸發器是下面的寫法:
create trigger t_AfterUpdate_on_mst_officecurrency
after update on mst_officecurrency
for each row
begin
update mst_office set Currency=:new.OfficeCurrencyName where Currency=:old.OfficeCurrencyName;
end;
/
創建完觸發器之後再寫SQL語句對mst_generalsetup表進行更新:
SQLupdate mst_generalsetup set OfficeCurrencyName=新值 where OfficeCurrencyName=原來的值;
總體上就是這樣,還有就是創建觸發器的時候你在表名和列名前面不要加單引號,會報錯的,如果還有什麼問題再追問我就好了。
求助mysql的觸發器更新..
delimiter |
create trigger trg_table1_name after update on table1 for each row
begin
update table2 set name=NEW.name where table1_id=NEW.id;
end;
|
delimiter ;
mysql 觸發器 update
有兩種方法,一種方法使用mysql的check table和repair table 的sql語句,另一種方法是使用MySQL提供的多個myisamchk, isamchk數據檢測恢復工具。前者使用起來比較簡便。推薦使用。
1. check table 和 repair table
登陸mysql 終端:
mysql -uxxxxx -p dbname
check table tabTest;
如果出現的結果說Status是OK,則不用修復,如果有Error,可以用:
repair table tabTest;
進行修復,修復之後可以在用check table命令來進行檢查。在新版本的phpMyAdmin裡面也可以使用check/repair的功能。
2. myisamchk, isamchk
其中myisamchk適用於MYISAM類型的數據表,而isamchk適用於ISAM類型的數據表。這兩條命令的主要參數相同,一般新的系統都使用MYISAM作為預設的數據表類型,這裡以myisamchk為例子進行說明。當發現某個數據表出現問題時可以使用:
myisamchk tablename.MYI
進行檢測,如果需要修復的話,可以使用:
myisamchk -of tablename.MYI
關於myisamchk的詳細參數說明,可以參見它的使用幫助。需要注意的時在進行修改時必須確保MySQL伺服器沒有訪問這個數據表,保險的情況下是最好在進行檢測時把MySQL伺服器Shutdown掉。
-----------------------------
另外可以把下面的命令放在你的rc.local裡面啟動MySQL伺服器前:
[ -x /tmp/mysql.sock ] /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI
其中的/tmp/mysql.sock是MySQL監聽的Sock文件位置,對於使用RPM安裝的用戶應該是/var/lib/mysql/mysql.sock,對於使用源碼安裝則是/tmp/mysql.sock可以根據自己的實際情況進行變更,而pathtochk則是myisamchk所在的位置,DATA_DIR是你的MySQL資料庫存放的位置。
需要注意的時,如果你打算把這條命令放在你的rc.local裡面,必須確認在執行這條指令時MySQL伺服器必須沒有啟動!檢測修復所有資料庫(表)
mysql 觸發器 if 語句 update
@sqlz =’select asd from flkg’;
EXECUTE(@sqlz);
———-
首先,mysql下動態語句不是這樣寫的,另外,觸發器里不能允許返回結果集的.
這裡我是希望他能中斷更新!
———————
你的意思是不是要中斷後面的
“
SET amount =@amountmm
WHERE CODE=new.code AND whcode = new.whcode ;
“
這部分?
如果是的話,那這樣改下:
DELIMITER $$
USE `eerp`$$
DROP TRIGGER /*!50032 IF EXISTS */ `material_update`$$
CREATE TRIGGER `material_update` AFTER UPDATE ON `sf_material`
FOR EACH ROW BEGIN
IF new.auditing = ‘Y’ THEN
SET @amountmm = (SELECT amount-new.amount FROM warehouse WHERE CODE=new.code AND whcode = new.whcode);
IF @amountmm =0 THEN
UPDATE warehouse
SET amount =@amountmm
WHERE CODE=new.code AND whcode = new.whcode ;
END IF ;
END IF;
END;
$$
DELIMITER ;
“我是要中斷更新。。不是後面。。。嚴格說就是這個表sf_material更新和後面的那個表warehouse更新也一起中斷!”
—————————————————————
因為mysql下觸發器內不支持rollback,所以,變換一個方式來處理,如下:
那觸發器部分這麼寫(注意:一定要使表TB_error_rollback在你的庫中不允許存在):
CREATE TRIGGER `material_update`
BEFORE UPDATE
ON `sf_material`
FOR EACH ROW
BEGIN
IF new.auditing = ‘Y’ THEN
SET @amountmm = (SELECT amount- new.amount FROM warehouse WHERE CODE=new.code AND whcode = new.whcode);
IF @amountmm 0 THEN
update TB_error_rollback set name=1;
END IF;
UPDATE warehouse
SET amount =@amountmm
WHERE CODE=new.code AND whcode = new.whcode;
END IF;
END;
mysql 實現每月更新一次的觸發器問題
1、觸發器是update後激發的,我想你需要的是mysql計劃任務。
2、計劃任務狀態
show variables like ‘%event%’;
3、使用下列的任意一句開啟計劃任務:
SET GLOBAL event_scheduler = ON;
SET @@global.event_scheduler = ON;
SET GLOBAL event_scheduler = 1; — 0代表關閉
SET @@global.event_scheduler = 1;
4、創建event語法
help create event
5、實例
實例0:
每5分鐘刪除sms表上面ybmid為空白且createdate距現時間超過5分鐘的數據。
USE test;
CREATE EVENT event_delnull
ON SCHEDULE
EVERY 5 MINUTE STARTS ‘2012-01-01 00:00:00’ ENDS ‘2012-12-31 00:00:00’
DO
DELETE FROM sms WHERE ybmid=” AND TIMEDIFF(SYSDATE(),createdate)’00:05:00′;
實例1:
每天調用存儲過程一次:
mysql delimiter //
mysql create event updatePTOonSunday
– on schedule every 1 day
– do
– call updatePTO();
– //
Query OK, 0 rows affected (0.02 sec)
這裡updatePTO()是資料庫里自定義的存儲過程
6、查看任務計劃:
SELECT * FROM mysql.event\G
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/303131.html