Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在mysql中创建触发器_Mysql_Triggers - Fatal编程技术网

无法在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
。这并没有出现在最初的帖子中,我有理由怀疑这不是你采取的步骤。恕我直言,我认为编辑可能会误导答案,因为它没有反映问题。谢谢,我已经解决了它,但不明白我之前的触发器查询出了什么问题。