我想对一个表在进行插入操作之后进行自动进行一些计算,所以写了个触发器,但是创建时报错,请高手们帮忙看看。
源代码:USE slt;
DROP TRIGGER IF EXISTS tig_count;
CREATE TRIGGER tig_count
AFTER INSERT ON slt_bet_info
FOR EACH ROW
BEGIN
-- DECLARE v_account_id VARCHAR(20);
DECLARE @trade_back_water DECIMAL(9,5);
SET @account_id=NEW.account_id;
SET @bet_money=NEW.bet_money;
SET @bet_number=NEW.bet_number;
SELECT trade_back_water INTO @trade_back_water FROM slt_account_lottery_ticket_info WHERE account_id=@account_id;
UPDATE slt_bet_info SET back_water=@bet_money*@trade_back_water WHERE bet_number=@bet_number;
UPDATE slt_bet_info SET profit_loss=@bet_number-back_water WHERE bet_number=@bet_number;
END;报错描述:
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@trade_back_water DECIMAL(9,5);看看我到底哪里写错了???

解决方案 »

  1.   

    USE slt;
    DROP TRIGGER IF EXISTS tig_count;
    CREATE TRIGGER tig_count
    AFTER INSERT ON slt_bet_info
    FOR EACH ROW
    BEGIN
    -- DECLARE v_account_id VARCHAR(20);
    DECLARE v_trade_back_water DECIMAL(9,5);
    SET @account_id=NEW.account_id;
    SET @bet_money=NEW.bet_money;
    SET @bet_number=NEW.bet_number;
    SELECT trade_back_water INTO v_trade_back_water FROM slt_account_lottery_ticket_info WHERE account_id=@account_id;
    UPDATE slt_bet_info SET back_water=@bet_money*v_trade_back_water WHERE bet_number=@bet_number;
    UPDATE slt_bet_info SET profit_loss=@bet_number-back_water WHERE bet_number=@bet_number;
    END;
      

  2.   

    这句DECLARE v_trade_back_water DECIMAL(9,5);
    变量为啥不能用@trade_back_water,也就是带@号???
    但是 SET @account_id=NEW.account_id; 这个变量就可以用@号????
    版主请解答,谢谢!!
      

  3.   

    @var 是SESSION变量不是LOCAL变量。建议先浏览一遍MYSQL官方免费文档。