我对MySQL中的触发器还很陌生,所以对于任何看起来“非常简单”的问题都感到抱歉。
我有两个表:orders和orders_log
orders:
order_id | (...) | product_id | (...) |
---|---|---|---|
201 | (...) | 103 | (...) |
oders_log:
日志ID | 操作 | 表名 | 操作时间 | 产品ID |
---|---|---|---|---|
NULL | NULL | NULL | NULL | NULL |
我想创建一个触发器,当我们向“orders”表中插入新行时,它将在orders_log中生成一行新记录,其中log_id = 1...2..3...等等;并且product_id = "orders"表中的product_id。这样,orders_log将如下所示:
日志ID | 操作 | 表名 | 操作时间 | 产品ID |
---|---|---|---|---|
1 | 插入 | orders | "now()" | 103 |
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'添加一行时,它会给我错误信息“无法添加或更新子行:外键约束失败”。
有人可以帮帮我吗?
*编辑: 日志表的创建:
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;
```*
log_id
INTEGER NOT NULL AUTO-INCREMENT”,但它仍然给我错误。应该使用“NEW.”还是不使用? - UserNameM