如何在mysql中的触发器中声明一个值?

时间:2014-05-04 22:34:31

标签: mysql triggers declare

我正在尝试使用mysql和phpmyadmin为我的数据库编写一个触发器。我有一个数据库,其中包含一个客户信息表,我在其中存储了一个信用卡号和一个酒店预订表,我存储了客户的付款方式。我希望我的触发器在客户端信息更新后激活,如果信用卡号被删除以改变付款方式。问题是phpmyadmin没有编译它。

CREATE TRIGGER after_credit_card_update
AFTER UPDATE  
ON client
for each row
BEGIN
       declare cl_id int;
       IF ( (new.Credit_Card_Number = " ") or (new.Credit_Card_Number is null)) then
select into cl_id
                select reservation.Client_Id from 
reservation where ((reservation.Client_Id = new.Client_Id) and (reservation.Payment = 'Credit')) 
limit 1 ;
    update reservation
    set reservation.Payment = "NOT PAID"
    where reservation.Client_Id = cl_id;
END IF;
END$$

我认为问题出在我宣布我的价值时:cl_id

  

1064 - 您的SQL语法出错;查看与您的MySQL服务器版本对应的手册,以获得正确的语法,使用在'cl_id select reservation.Client_Id'预订位置'第8行

附近

固定:

DELIMITER $$
CREATE TRIGGER after_credit_card_update
AFTER UPDATE  
ON client
for each row
BEGIN
declare cl_id int;
IF ( (new.Credit_Card_Number = " ") or 
new.Credit_Card_Number is null)) then
 select reservation.Client_Id into cl_id from reservation 
here ((reservation.Client_Id = new.Client_Id) and 
reservation.Payment = 'credit')) 
limit 1 ;
update reservation
set reservation.Payment = "NOT PAID"
where reservation.Client_Id = cl_id;
END IF;
END$$

DELIMITER;

1 个答案:

答案 0 :(得分:0)

此处不再详述,但您需要在触发器之前和之后添加delimiter语句 - 因此MySQL将知道如何解析代码。例如:

DELIMITER $$

CREATE TRIGGER after_credit_card_update
AFTER UPDATE  
ON client
for each row
BEGIN
       declare cl_id int;
       IF ( (new.Credit_Card_Number = " ") or 
new.Credit_Card_Number is null)) then
select into cl_id
                select reservation.Client_Id from 
reservation where reservation.Client_Id = new.Client_Id 
limit 1 ;
    update reservation
    set reservation.Payment = "NOT PAID"
    where reservation.Client_Id = cl_id;
END IF;
END$$

DELIMITER ;