我的存储过程的基本结构是,
BEGIN
.. Declare statements ..
START TRANSACTION;
.. Query 1 ..
.. Query 2 ..
.. Query 3 ..
COMMIT;
END
Run Code Online (Sandbox Code Playgroud)
MySQL版本: 5.1.61-0ubuntu0.11.10.1-log
目前,如果'query 2'失败,则提交'query 1'的结果.
如何在同一个表上更新后更新触发器中的表列?
这是触发器:
CREATE TRIGGER upd_total_votes AFTER UPDATE ON products_score
FOR EACH ROW
UPDATE
products_score
SET
products_score.votes_total =
(SELECT
(votes_1 + votes_2 + votes_3 + votes_4 + votes_5)
FROM
products_score
WHERE
id = new.id)
现在当我更新表格时
UPDATE products_score SET votes_1 = 5 WHERE id = 0
这不起作用,因为我得到以下内容:
#1442 - Can't update table 'products_score' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
那么我怎么能让这个工作呢?
我有一张桌子,我跟踪特定项目的费用.这些费用可能会随着时间的推移而变化,所以我有两列(startDate,endDate),当前的费用总是在不久的将来有一个endDate.我已经有一个触发器用于对输入的新行进行一些计算,但我想要发生的是如果我输入一个已经有条目的项目我想将前一个条目的endDate设置为前一天新条目的startDate和新的endDate到预定的远期日期.这是我首先尝试的代码:
CREATE
DEFINER=`root`@`%`
TRIGGER `im`.`splitBeforeIns`
BEFORE INSERT ON `im`.`split`
FOR EACH ROW
BEGIN
SET NEW.tcPercent = (NEW.tcOfficeFee / NEW.globalFee) * 100 , NEW.proPercent = 100 - NEW.tcPercent, NEW.endDate = 20501231;
UPDATE im.split set endDate = ADDDATE(NEW.startDate, -1) where procKey = NEW.procKey AND endDate = 20501231;
END$$
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
ERROR 1442: Can't update table 'split' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Run Code Online (Sandbox Code Playgroud) 我有1个这样的表:
user
----------------------------------------
id | first_name | last_name | full_name
----------------------------------------
Run Code Online (Sandbox Code Playgroud)
我想编写一个触发器,它将first_name和last_name连接到full_name.
我试过下面的触发器:
delimiter |
create trigger fullname after insert on user
for each row
begin
update user set full_name=(select concat(first_name,last_name) from user where id=new.id)where id=new.id;
end;
|
Run Code Online (Sandbox Code Playgroud)
将数据插入用户表时显示此错误:
#1442 - Can't update table 'user' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
我有一个在tableA上写一个插入触发器.它将使用相同的表但不同的列执行更新.这样做我收到错误.我的触发器是
create or replace trigger trigger_A
after insert on table_A
begin
update table_A set col1=1 where col1 is null;
end;
Run Code Online (Sandbox Code Playgroud)
我有一个应用程序将执行col2单独插入,col1将保持为null.因此,一旦插入行,我的触发器将为col1赋值.但是当插入一行时,我收到错误说"触发器失败并且无效".这该怎么做.TIA.