0

こんにちは私は次のようなテーブル構造を持っています

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;$$

トリガーを作成しているときは、クエリが正常に実行されたと言っていますSHOW triggers。結果の実行時にNothingであるため、データベースにトリガーが存在しないと結論付けます。どこを間違えているのかわかりません。バグを見つけるのを手伝ってください。MySQLServer5.5でinnodbenginを使用しています。

前もって感謝します。

とった。

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 ;

わかりませんが、上記の式を実行して動作します。

4

1 に答える 1

2

完全なスキーマ コードをありがとうございます。

「データベース内にトリガーが存在しない」とはどういう意味ですか? 私はあなたのコードに従って、発行しました:

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 |
+-------------------+-------------------------+

だから、すべてがうまくいくようです!正確には、機能しないクエリを発行しますか?

于 2012-07-14T12:34:58.087 に答える