不能在MySQL创建触发器
问题描述:
嗨,我有表结构像不能在MySQL创建触发器
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);
现在我想写的时候触发对更新的order_product.porder_status &值将插入/更新order_product触发。 porder_status值历史记录表作为
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;$$
当我创建触发器跟它查询执行成功,论执行结果是Nothing,因此它总结出数据库中没有触发器。我不知道我在哪里犯错。请帮我找出错误。我使用MySQL Server 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: [email protected]
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来执行这个触发器,当我执行它时它说执行成功,但触发器不存在那里,甚至没有在更新上发射。有这个配置吗? – Sumant 2012-07-14 13:04:14
请再次解释一下,“触发器不存在”是什么意思? – 2012-07-14 13:13:27
我可以看到ypercube编辑说你已经尝试过'SHOW TRIGGERS'。这不是原来的帖子,我有理由怀疑这不是你采取的一步。非常尊重,我认为编辑可能会误导答案,因为它不能反映问题。 – 2012-07-14 17:01:30