无法在mysql中创建触发器
嗨,我的桌子结构像无法在mysql中创建触发器,mysql,triggers,Mysql,Triggers,嗨,我的桌子结构像 CREATE TABLE IF NOT EXISTS `history` ( `order_product_id` varchar(20) NOT NULL, `Details` text NOT NULL, PRIMARY KEY (`order_product_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE IF NOT EXISTS `order_product` ( `order_pr
CREATE TABLE IF NOT EXISTS `history` (
`order_product_id` varchar(20) NOT NULL,
`Details` text NOT NULL,
PRIMARY KEY (`order_product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `order_product` (
`order_product_id` varchar(64) NOT NULL,
`porder_status` int(11) NOT NULL,
PRIMARY KEY (`order_product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `order_product` (`order_product_id`, `porder_status`) VALUES
('1339789127O532877', 11),
('1339789127O532933', 2),
('1339868495O010300', 2),
('1339868495O010342', 0),
('1339869923O564839', 0);
现在我想写一个触发器,在更新订单产品的值时触发。订单状态将插入/更新订单产品。订单状态将作为
DELIMITER $$
CREATE TRIGGER addtohistory
AFTER UPDATE ON order_product
FOR EACH ROW
BEGIN
INSERT INTO history (order_product_id,Details)
values
(NEW.order_product_id,CONCAT_WS(':',NEW.porder_status,CURRENT_TIMESTAMP))
ON DUPLICATE KEY UPDATE
Details =
CONCAT_WS(',',Details,CONCAT_WS(':',NEW.porder_status,CURRENT_TIMESTAMP));
END;$$
当我创建触发器时,它表示查询已成功执行,在执行SHOW triggers
时,result为Nothing,因此它得出结论,数据库中不存在触发器。我不知道我在哪里犯了错误。请帮我找出错误。我在MySQL服务器5.5上使用innodb引擎
提前谢谢
明白了
DROP TRIGGER IF EXISTS `addtohistory`;
DELIMITER $$
CREATE TRIGGER `addtohistory` AFTER UPDATE ON `order_product`
FOR EACH ROW BEGIN
INSERT INTO history (order_product_id,Details) values (NEW.order_product_id,CONCAT_WS(':',NEW.porder_status,CURRENT_TIMESTAMP)) ON DUPLICATE KEY UPDATE Details = CONCAT_WS(',',Details,CONCAT_WS(':',NEW.porder_status,CURRENT_TIMESTAMP));
END
$$
DELIMITER ;
我不明白,但我执行了上面的表达式&它可以工作。感谢您提供完整的模式代码 你说“触发器不在数据库中”是什么意思?我遵循您的代码,然后发布:
SHOW TRIGGERS \G
*************************** 1. row ***************************
Trigger: addtohistory
Event: UPDATE
Table: order_product
Statement: BEGIN INSERT INTO history (order_product_id,Details) values (NEW.order_product_id,CONCAT_WS(':',NEW.porder_status,CURRENT_TIMESTAMP)) ON DUPLICATE KEY UPDATE Details=CONCAT_WS(',',Details,CONCAT_WS(':',NEW.porder_status,CURRENT_TIMESTAMP));END
Timing: AFTER
Created: NULL
sql_mode:
Definer: root@localhost
character_set_client: latin1
collation_connection: latin1_swedish_ci
Database Collation: latin1_swedish_ci
因此,触发因素似乎就在那里
此外,它似乎正在发挥作用:
UPDATE order_product SET porder_status=123 WHERE order_product_id='1339869923O564839';
Query OK, 1 row affected (0.08 sec)
Rows matched: 1 Changed: 1 Warnings: 0
SELECT * FROM history;
+-------------------+-------------------------+
| order_product_id | Details |
+-------------------+-------------------------+
| 1339869923O564839 | 123:2012-07-14 15:33:05 |
+-------------------+-------------------------+
所以,一切似乎都很好!确切地说,您发出了什么不起作用的查询?我正在使用phpmyadmin执行此触发器,当我执行它时,它表示已成功执行,但触发器不存在,甚至在更新时也没有触发。是否对此进行了一些配置?请再次解释,您所说的“触发器不存在”是什么意思?我可以看到ypercube的编辑说您已经尝试了
SHOW TRIGGERS
。这并没有出现在最初的帖子中,我有理由怀疑这不是你采取的步骤。恕我直言,我认为编辑可能会误导答案,因为它没有反映问题。谢谢,我已经解决了它,但不明白我之前的触发器查询出了什么问题。