mysql触发器update实例(帮忙写一个 mysql update 触发器)

本文目录
帮忙写一个 mysql update 触发器
1 DROP TRIGGER IF EXISTS t_update_on_st_shop_info;
2 CREATE TRIGGER t_update_on_st_shop_info
3 UPDATE ON st_shop_info
4 FOR EACH ROW
5 BEGIN
6 UPDATE st_shop_info SET open_flg=1 where shop_indate》0;
7 INSERT INTO st_shop(shop_id) VALUES (new.st_shop_info_shop_id);
8 END;
不知道这个行不行,你试试,最好你的表名少用下划线
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 触发器 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 update 触发器
我在我本地测试没有问题喔,你看:
mysql》 create table tb_11(id int,name varchar(20));
Query OK, 0 rows affected (0.01 sec)
mysql》 create table t11(id int,intime datetime);
Query OK, 0 rows affected (0.00 sec)
mysql》 drop trigger if exists tr_name11;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql》 delimiter //
mysql》 create trigger tr_name11
-》 before update
-》 on tb_11
-》 for each row
-》 begin
-》 if new.id=1 then
-》 update tb_uuuu set name=1;/*一定要确认表tb_uuuu在库中不存在*/
-》 end if;
-》 insert into t11 values(11,now());
-》 end;
-》 //
Query OK, 0 rows affected (0.00 sec)
mysql》 insert into tb_11 values(1,’gg’);
-》 //
Query OK, 1 row affected (0.00 sec)
mysql》 insert into tb_11 values(2,’gg’);
-》 //
Query OK, 1 row affected (0.00 sec)
mysql》 delimiter ;
mysql》 select * from tb_11;
+------+------+
| id | name |
+------+------+
| 1 | gg |
| 2 | gg |
+------+------+
2 rows in set (0.00 sec)
mysql》 update tb_11 set name=’hehe’ where id=2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql》 select * from tb_11;
+------+------+
| id | name |
+------+------+
| 1 | gg |
| 2 | hehe |
+------+------+
2 rows in set (0.00 sec)
mysql》 select * from t11;
+------+---------------------+
| id | intime |
+------+---------------------+
| 11 | 2010-08-05 17:23:01 |
+------+---------------------+
1 row in set (0.00 sec)
mysql》 update tb_11 set name=’hehe’ where id=1;
ERROR 1146 (42S02): Table ’wei.tb_uuuu’ doesn’t exist
mysql》 select * from tb_11;
+------+------+
| id | name |
+------+------+
| 1 | gg |
| 2 | hehe |
+------+------+
2 rows in set (0.00 sec)
mysql》 select * from t11;
+------+---------------------+
| id | intime |
+------+---------------------+
| 11 | 2010-08-05 17:23:01 |
+------+---------------------+
1 row in set (0.00 sec)
mysql》

更多文章:
dropdownlist 绑定(DropDownList 绑定所有项 并 显示指定项)
2026年10月11日 08:50
易语言网页api接口怎么调用(易语言,怎么读取网页json的api)
2026年10月11日 08:00
majority of(the majority of 和 a majority of的区别以及用法例句)
2026年10月11日 07:40
another time(another time和other time的区别)
2026年10月11日 05:00






