本文目录一览:
- 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