我无法解决[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 |
+--------+---------------------+-----------------------------------------+
答案 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, "]", ".")
)
;