MySQL 触发器 - 我哪里出错了

标签 mysql database

有人可以告诉我在 MySQL 中创建这个触发器时哪里出了问题吗?每次我尝试创建它时,它都会不断告诉我有错误。

USE `cl11-onestock`;

DELIMITER //

CREATE TRIGGER audit_insert
AFTER INSERT 
    ON stock_usage FOR EACH ROW
BEGIN
    SET uUid = (SELECT UUID());
    SET stockUsageId = (SELECT NEW.stock_usage_id);
    SET siteId = (SELECT NEW.site_id);
    SET date = (SELECT NEW.date);
    SET patientName = (SELECT NEW.patient_name);
    SET dentistDiscountId = (SELECT NEW.dentist_discount_id);
    SET itemId = (SELECT NEW.item_id);
    SET quantity = (SELECT NEW.quantity);
    SET priceIncDiscount = (SELECT NEW.price_inc_discount);
    SET vat = (SELECT NEW.vat);
    SET priceIncVat = (SELECT NEW.price_inc_vat);
    SET createdAt = (SELECT NEW.created_at);
    SET updatedAt = (SELECT NEW.updated_at);

    INSERT INTO stock_audit VALUES
    (uUid, stockUsageId, siteId, date, patientName, dentistDiscountId, itemId, quantity, priceIncDiscount, vat, priceIncVat, createdAt, updatedAt);

END; //

DELIMITER ;

最佳答案

您需要使用关键字new插入后访问字段值,而不是像 select 那样您可以直接在插入查询中使用

所以触发器应该是这样的

DELIMITER //

CREATE TRIGGER audit_insert
AFTER INSERT 
    ON stock_usage FOR EACH ROW
BEGIN
       INSERT INTO stock_audit VALUES
    (new.UUID, NEW.stock_usage_id, NEW.site_id, NEW.date, NEW.patient_name, NEW.dentist_discount_id, NEW.item_id, NEW.quantity, NEW.price_inc_discount, NEW.vat, NEW.price_inc_vat, NEW.created_at, NEW.updated_at);

END; //

DELIMITER ;

关于MySQL 触发器 - 我哪里出错了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28851121/

相关文章:

mysql - 如何在 jOOQ for MySQL 8 中实现 JSON_SET()

维护数据库结构的java库

database - 我应该将表名和列名始终小写吗?

php - 在 Laravel 中,统计用户并返回状态

php - MySQL PHP : PDO connection not working when getting credentials from file()

MySQL:如果表 1 中存在行,则在表 2 上插入行

mysql - mysql分区的自动化

Mysql:仅当日期不同时才计算每月不同的user_ids

database - 将 Cassandra 集群部署到一组 Linode VPS 实例中是否有任何 "gotchas"?

python - 在 MySQL Workbench 5.2.34 的 Python 脚本中,grt.root.wb 没有 physicalModels