创建触发器时出现MYSQL错误

创建触发器时出现MYSQL错误,mysql,sql,triggers,Mysql,Sql,Triggers,我有以下MySQL触发器查询: CREATE TRIGGER `after_insert_stock` AFTER INSERT ON `stock` FOR EACH ROW BEGIN IF NEW.deleted THEN SET @changetype = 'DELETE'; ELSE SET @changetype = 'NEW'; END IF; INSERT INTO stock_audit (s

我有以下MySQL触发器查询:

CREATE
TRIGGER `after_insert_stock` AFTER INSERT 
ON `stock` 
FOR EACH ROW BEGIN

    IF NEW.deleted THEN
        SET @changetype = 'DELETE';
    ELSE
        SET @changetype = 'NEW';
    END IF;
            INSERT INTO stock_audit (stock_id, commodity_name,commodity_id,delivery_no,supplier_name,batch_no,expiry_date,units_per_pack,no_of_packs,total_quantity,buying_price,selling_price,remarks,available_quantity,user_id,changetype) VALUES (NEW.stock_id,NEW.commodity_name,NEW.commodity_id,NEW.delivery_no,NEW.supplier_name,NEW.batch_no,NEW.expiry_date,NEW.units_per_pack,NEW.total_quantity,NEW.buying_price,NEW.selling_price,NEW.remarks,NEW.available_quantity,NEW.user_id, @changetype);

END$$
当我运行查询时,我得到以下MySQL错误:error

SQL查询:

CREATE TRIGGER `after_insert_stock` AFTER INSERT ON `stock_audit`
FOR EACH
ROW BEGIN
IF NEW.deleted
THEN
SET @changetype = 'DELETE';
MySQL说:文档

1064-您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解第7行“”附近要使用的正确语法

请找个人帮忙解决这个问题好吗

您错过了申报:

DELIMITER $$
CREATE
TRIGGER `after_insert_stock` AFTER INSERT 
ON `stock` 
FOR EACH ROW BEGIN

    IF NEW.deleted THEN
        SET @changetype = 'DELETE';
    ELSE
        SET @changetype = 'NEW';
    END IF;
            INSERT INTO stock_audit (stock_id, commodity_name,commodity_id,delivery_no,supplier_name,batch_no,expiry_date,units_per_pack,no_of_packs,total_quantity,buying_price,selling_price,remarks,available_quantity,user_id,changetype) VALUES (NEW.stock_id,NEW.commodity_name,NEW.commodity_id,NEW.delivery_no,NEW.supplier_name,NEW.batch_no,NEW.expiry_date,NEW.units_per_pack,NEW.total_quantity,NEW.buying_price,NEW.selling_price,NEW.remarks,NEW.available_quantity,NEW.user_id, @changetype);

END$$
试试这个:

试试这个简化的查询-

CREATE TRIGGER `after_insert_stock`
AFTER INSERT 
ON `stock` 
FOR EACH ROW
INSERT INTO
  stock_audit (stock_id, commodity_name,commodity_id,delivery_no,supplier_name,batch_no,expiry_date,units_per_pack,no_of_packs,total_quantity,buying_price,selling_price,remarks,available_quantity,user_id,changetype)
VALUES
  (NEW.stock_id,NEW.commodity_name,NEW.commodity_id,NEW.delivery_no,NEW.supplier_name,NEW.batch_no,NEW.expiry_date,NEW.units_per_pack,NEW.total_quantity,NEW.buying_price,NEW.selling_price,NEW.remarks,NEW.available_quantity,NEW.user_id, IF(NEW.deleted, 'DELETE', 'NEW'));

上面代码中的哪一行是第7行?P5Coder请查看以下内容:SET@changetype='DELETE'@用户689017。是否删除了表中的一列?从概念上讲,在插入触发器中有一个changetype的DELETE有点奇怪:p添加分隔符$$后,出现以下错误:#1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解每行使用的正确语法,即“ON
stock
”,如果是“NEW.deleted”,则设置@changetype=“DELETE”;ELSE'在第1行,在我的情况下,一切正常(即,我得到错误“Table'db.stock'不存在”,因此语法是正确的)。你能邮寄吗?
CREATE TRIGGER `after_insert_stock`
AFTER INSERT 
ON `stock` 
FOR EACH ROW
INSERT INTO
  stock_audit (stock_id, commodity_name,commodity_id,delivery_no,supplier_name,batch_no,expiry_date,units_per_pack,no_of_packs,total_quantity,buying_price,selling_price,remarks,available_quantity,user_id,changetype)
VALUES
  (NEW.stock_id,NEW.commodity_name,NEW.commodity_id,NEW.delivery_no,NEW.supplier_name,NEW.batch_no,NEW.expiry_date,NEW.units_per_pack,NEW.total_quantity,NEW.buying_price,NEW.selling_price,NEW.remarks,NEW.available_quantity,NEW.user_id, IF(NEW.deleted, 'DELETE', 'NEW'));