相关疑难解决方法(0)

MySQL:存储过程中的事务

我的存储过程的基本结构是,

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'的结果.

  • 如果任何查询失败,我该如何回滚事务?

mysql sql stored-procedures transactions

64
推荐指数
4
解决办法
8万
查看次数

在同一个表上更新后更新触发器中的表

如何在同一个表上更新后更新触发器中的表列?
这是触发器:


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.

那么我怎么能让这个工作呢?

mysql sql mysql-error-1442

15
推荐指数
2
解决办法
3万
查看次数

MySQL触发NEW行的设置值,并在同一个表中更新另一行

我有一张桌子,我跟踪特定项目的费用.这些费用可能会随着时间的推移而变化,所以我有两列(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)

mysql database-trigger

10
推荐指数
2
解决办法
3万
查看次数

如何创建触发器来进行字段连接

我有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.

mysql sql database sql-update

3
推荐指数
1
解决办法
1万
查看次数

在同一个表上使用插入触发器更新

我有一个在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.

sql oracle triggers

1
推荐指数
1
解决办法
2万
查看次数