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

如何在mysql中声明触发器中的值?,mysql,triggers,declare,Mysql,Triggers,Declare,我正在尝试使用mysql和phpmyadmin为我的数据库编写触发器。我有一个数据库,其中有一个用于存储客户信息的表,其中存储了信用卡号码,还有一个用于存储酒店预订的表,其中存储了客户的付款方式。我想我的触发器激活后更新客户的信息,如果信用卡号被删除,以改变付款方式。问题是phpmyadmin没有编译它 CREATE TRIGGER after_credit_card_update AFTER UPDATE ON client for each row BEGIN declar

我正在尝试使用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服务器版本对应的手册,以了解第8行中“into cl_id select reservation.Client_id from reservation where”附近使用的正确语法 固定的:

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$$

定界符

这里不详细介绍,但您需要在触发器前后添加
分隔符
语句,以便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 ;