mysql - 我正在尝试创建一个 mysql 触发器,但不能,不知道错误是什么
问题描述
这是触发查询
DELIMITER $$
CREATE TRIGGER adjust_ref_token
AFTER INSERT
ON transactions FOR EACH ROW
DECLARE token_ref integer;
SELECT ico_stages.sales_token INTO @token_ref WHERE ico_stages.start_date <= NOW() <= ico_stages.end_date;
IF NEW.tnx_type = 'referral' THEN
UPDATE ico_stages SET ico_stages.sales_token = (@token_ref - NEW.tokens) WHERE ico_stages.start_date <= NOW() <= ico_stages.end_date;
END IF;
END $$
错误显示是
CREATE TRIGGER adjust_ref_token
AFTER INSERT
ON transactions FOR EACH ROW
DECLARE token_ref integer;
SELECT ico_stages.sales_token INTO @token_ref WHERE ico_stages.start_date <= NOW() <= ico_stages.end_date;
IF NEW.tnx_type = 'referral' THEN
UPDATE ico_stages SET ico_stages.sales_token = (@token_ref - NEW.tokens) WHERE ico_stages.start_date <= NOW() <= ico_stages.end_date;
END IF;
END
MySQL 说:文档
#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'DECLARE token_ref integer; 附近使用的正确语法;
在第 4 行选择 ico_stages.sales_token INTO @token_ref WHER'
谁能告诉我错误是什么?
解决方案
DELIMITER $$
CREATE TRIGGER adjust_ref_token AFTER INSERT ON transactions
FOR EACH ROW
BEGIN
DECLARE token_ref integer;
SELECT ico_stages.sales_token INTO @token_ref WHERE ico_stages.start_date <= NOW() <= ico_stages.end_date;
IF NEW.tnx_type = 'referral' THEN
UPDATE ico_stages SET ico_stages.sales_token = (@token_ref - NEW.tokens) WHERE ico_stages.start_date <= NOW() <= ico_stages.end_date;
END IF;
END; $$
DELIMITER ;
基本上,如果要在触发器中执行多个语句,则必须使用BEGIN...END
构造。有关更多详细信息https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html
推荐阅读
- sql - 从包含空值的列中选择
- c# - 如何加入新指南列表?
- python - 使用模数进行循环排序
- php - 从 GCP Vision PDF 结果返回格式化文本
- ios - 用户与文本字段 swift 4 交互的最佳方式
- javascript - 我们是否应该开始始终使用反引号 (`) 将字符串括起来?
- javascript - 如何通过 ajax 传递“FormData”数组并在 Laravel 控制器中访问
- jenkins - 如何使用现有的 PVC 来掌舵安装 stable/jenkins
- python - 如何使用 webhook 将人员添加到 Google 群聊
- javascript - 将多个样式元素与样式组件相结合