2015-11-17 125 views
1

我正在處理某些訂單的Web應用程序。表上的更新更改另一個表中的字段

  1. 的順序被插入與特定date_open和空sent_order_id與

    作爲

    CREATE TABLE sent_orders (
        id INT NOT NULL AUTO_INCREMENT, 
        code VARCHAR(45) NOT NULL, 
        date_open TIMESTAMP NOT NULL, 
        state VARCHAR(50) NOT NULL, 
        direction VARCHAR(45) NOT NULL, 
        PRIMARY KEY (id)) 
    
    
    CREATE TABLE orders (
        id INT NOT NULL AUTO_INCREMENT, 
        state_id INT(11) NOT NULL, 
        date_open TIMESTAMP NOT NULL, 
        date_processed TIMESTAMP NULL, 
        date_closed TIMESTAMP NULL, 
        sent_order_id INT(11) NULL, 
        PRIMARY KEY (id) , 
        INDEX fk_orders_3_idx (state_id ASC) , 
        INDEX fk_orders_5_idx (sent_order_id ASC) , 
        CONSTRAINT fk_orders_1 
        FOREIGN KEY (state_id) 
        REFERENCES order_states (id) 
        ON DELETE NO ACTION 
        ON UPDATE NO ACTION, 
        CONSTRAINT fk_orders_2 
        FOREIGN KEY (sent_order_id) 
        REFERENCES sent_orders (id) 
        ON DELETE NO ACTION 
        ON UPDATE NO ACTION) 
    

    訂單處理是由在不同時間的兩個步驟我已經定義的兩個表

    insert into orders (...,date_open,..) values(...,?,...) 
    
  2. sent_order被插入一個不同的date_open

    insert into sent_orders (...,date_open,..) values(...,?,...) 
    
  3. 的更新Orders表了添加在sent_orders

    update orders set sent_order_id = ? where id = ? 
    

外鍵的問題是,當我運行Orders表更新的訂單。 date_open字段隨當前日期更新。

另一個奇怪的事情是,調試問題,我添加了第二個日期字段「date_open2」 Orders表,然後我跑了大規模的更新爲:

alter table orders add date_open2 TIMESTAMP NOT NULL; 
update orders set date_open2 = date_open; 

,現在當我運行

select date_open,date_open2,id,sent_order_id from orders 

我有什麼是一樣的東西:

date_open    date_open2    id   sent_order_id 
2015-11-17 23:35:14.0 2015-11-17 23:34:27.0 8654  678 

凡date_open2是原廠l date_open,但它應該等於date_open字段!這意味着更新查詢得到正確的日期值,但是當我選擇它時,它是錯誤的。

MySQL實例:

  • bitnami wampstack-5.4.25-0與MySQL服務器5.5

回答

2

TIMESTAMP列在

11.3.5 Automatic Initialization and Updating for TIMESTAMP

描述被自動更新具體來說

既沒有DEFAULT CURRENT_TIMESTAMP也沒有ON UPDATE CURRENT_TIMESTAMP,它與指定DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP都是一樣的。

聽起來好像您要麼修改TIMESTAMP列的自動更新行爲,要麼改用DATETIME列。

相關問題