我正在尝试使用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;
答案 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 ;