触发值,调用表列并保留文本

时间:2019-03-28 17:23:55

标签: mysql triggers

我无法解决[CREATE TRIGGER VALUE]需要调用表内容并与文本连接的问题。有关预期结果的详细信息,请参见下面的结果区域。

当前代码可以在一次执行中运行,可以按预期在account_log中创建2行。

我用[<-是否需要更新?]标记了我怀疑需要更新的行。

CREATE DATABASE IF NOT EXISTS test6;
USE test6;

DROP TABLE IF EXISTS account;
CREATE TABLE account
(
    `id` CHAR(4) PRIMARY KEY,
    `name` VARCHAR(25),
    `price` DECIMAL(4, 2)
);

DROP TABLE IF EXISTS account_log;
CREATE TABLE account_log
(
    `log_id` INTEGER PRIMARY KEY AUTO_INCREMENT,
    `timestamp` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `description` VARCHAR(60)
);


DELETE FROM account;
INSERT INTO account
VALUES
    ('1', 'Adam', 10),
    ('2', 'Eva', 7)
;

DROP PROCEDURE IF EXISTS product_update;

DELIMITER ;;

    CREATE PROCEDURE product_update()

    BEGIN
    UPDATE account
        SET
            name = "Ad"
        WHERE
            id = "1";
    END
    ;;

DELIMITER ;

DROP TRIGGER IF EXISTS after_account_update;

CREATE TRIGGER after_account_update
    AFTER UPDATE
    ON account
    FOR EACH ROW
    INSERT INTO
        account_log (`description`)
    VALUES
        ('Update detected: Productid: [product-1]') -- <-- Needs update?
;

-- ----------------------------
-- Provoke triggers to execute.
-- ----------------------------
CALL product_update();
CALL product_update();

SELECT * FROM account_log;

结果:

结果当前看起来像这样:

(描述内容为纯文本)。

+--------+---------------------+-----------------------------------------+
| log_id | timestamp           | description                             |
+--------+---------------------+-----------------------------------------+
|      1 | 2019-03-28 18:14:58 | Update detected: Productid: [product-1] |
|      2 | 2019-03-28 18:14:58 | Update detected: Productid: [product-1] |
+--------+---------------------+-----------------------------------------+

我需要结果看起来像这样

(其中表描述中的值1和2来自表帐户的[id]列):

+--------+---------------------+-----------------------------------------+
| log_id | timestamp           | description                             |
+--------+---------------------+-----------------------------------------+
|      1 | 2019-03-28 18:14:58 | Update detected: Productid: 1           |
|      2 | 2019-03-28 18:14:58 | Update detected: Productid: 2           |
+--------+---------------------+-----------------------------------------+

1 个答案:

答案 0 :(得分:0)

使用下面的TRIGGER VALUES CONCAT可以工作:

CREATE TRIGGER after_account_insert
    AFTER INSERT
    ON account
    FOR EACH ROW
    INSERT INTO
        account_log (`description`)
    VALUES
    (
    CONCAT("Update detected: Productid: ", "[", NEW.id, "]", ".")
    )
;