我对MySQL中的触发器还是个新手,所以对于那些看起来"非常简单"的问题,我很抱歉.
我有两个表:Orders和Orders_LOG
订单:
order_id | (...) | product_id | (...) |
---|---|---|---|
201 | (...) | 103 | (...) |
或日志(log)(_L):
log_id | action | table_name | action_time | product_id |
---|---|---|---|---|
NULL | NULL | NULL | NULL | NULL |
我想创建一个触发器,当我们在"Orders"表中插入新行时,它将在Orders_log中生成一个新行,其中log_id=1...2...3...以及表"Orders"中的product_id=to product_id.因此,ORDERS_LOG将如下所示:
log_id | action | table_name | action_time | product_id |
---|---|---|---|---|
1 | insert | orders | "now()" | 103 |
我正在try 执行以下代码:
DROP TRIGGER IF EXISTS addrowlog;
DELIMITER $$
CREATE TRIGGER addrowlog
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
insert into orders_log (`log_id`, `action`, `table_name`, `action_time`, `product_id`)
VALUES (NEW.log_id, 'insert', 'orders', NOW(), NEW.product_id);
END$$
DELIMITER;
但出现此错误:错误代码:1054.不知道‘new’中的‘log_id’列.
即使我只做这段代码:
DROP TRIGGER IF EXISTS addrowlog;
DELIMITER $$
CREATE TRIGGER addrowlog
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
insert into orders_log (`log_id`, `action`, `table_name`, `action_time`, `product_id`)
VALUES (log_id, 'insert', 'orders', NOW(), product_id);
END$$
DELIMITER;
当我试图将一行添加到‘Orders’中时,它会给出错误"无法添加或更新子行:外键约束失败".
有人能帮我吗?
*编辑: 创建日志(log)表:
CREATE TABLE `orders_log` (
`log_id` INTEGER NOT NULL,
`action` VARCHAR(255) DEFAULT NULL,
`table_name` VARCHAR(255) DEFAULT NULL,
`action_time` TIME DEFAULT NULL,
`product_id` INTEGER NOT NULL,
PRIMARY KEY (`log_id`)
);
(中间创建的触发器)
加
ALTER TABLE `orders_log`
ADD CONSTRAINT `fk_orders_log_3`
FOREIGN KEY (`product_id`)
REFERENCES `product` (`product_id`)
ON DELETE RESTRICT
ON UPDATE CASCADE;
```*