2012-10-08 48 views
1

我正在開發一個swing應用程序,在測試過程中,我遇到了一些更新數據的問題。MySQL自動更新日期字段

我有一個稱爲 '劑量' 表:

create table Dose (id_dose int auto_increment primary key , 
     id_cmd varchar(50), 
     t_inj TimeStamp, 
     a_inj int, 
     id_e_d int, 
     id_dose_inc varchar(50), 
     poid int , 
     Constraint fkk_et_doses foreign key (id_e_d) references Etat_dose (id_e_d), 
     Constraint fkk_et_cmds foreign key (id_cmd) references Commande (id_cmd)ON DELETE CASCADE); 

id_e_d字段引用在etat_dose表id_e_d:

create table Etat_dose (id_e_d int primary key, 
        libele varchar(50)); 

,當我將數據插入到它,一切正常,因爲我使用查詢:

Methodes.UpdateData("insert into Dose(id_cmd,t_inj,a_inj,id_e_d,id_dose_inc,poid) values (?,?,?,?,?,?)", dose, 6); 

但是當我更新id_e_d時,Dose表中的T_inj自動更改爲系統日期。例如:

當我插入前:

insert into doses values(1,'CMFDG121031-1',' 2012-10-02 10:30:55',400,1,'CMFDG121031-1-1',30) 

當我編輯我得到:

mysql> select * from dose where id_dose=1; 
    +---------+---------------+---------------------+-------+--------+-----------------+------+ 
    | id_dose | id_cmd  | t_inj    | a_inj | id_e_d | id_dose_inc  | poid 
    +---------+---------------+---------------------+-------+--------+-----------------+------+ 
    |  1 | CMFDG121031-1 | 2012-10-02 10:30:55 | 400 |  1 | CMFDG121031-1-1 | 30 | 
    +---------+---------------+---------------------+-------+--------+------------------------- 
在更新

我執行:

update dose set id_e_d=2 where id_dose=1 

我得到:

mysql> select * from dose where id_dose=1; 
    +---------+---------------+---------------------+-------+--------+-----------------+------+ 
    | id_dose | id_cmd  | t_inj    | a_inj | id_e_d | id_dose_inc  | poid 
    +---------+---------------+---------------------+-------+--------+-----------------+------+ 
    |  1 | CMFDG121031-1 | 2012-10-08 16:15:11 | 400 |  2 | CMFDG121031-1-1 | 30 | 
    +---------+---------------+---------------------+-------+--------+------------------------- 

正如你所看到的的值T_inj已被自動更改。我能做些什麼來追蹤這個錯誤。

+0

那就是(第一)'timestamp'表的列的默認行爲。 –

回答

4

作爲Automatic Initialization and Updating for TIMESTAMP下記載:

TIMESTAMP數據類型提供自動初始化和更新爲當前日期和時間(即,當前的時間戳)。您可以選擇是否使用這些屬性和欄應該有他們:

[ deletia ]

  • 如果列是自動更新,它會自動更新爲當前時間戳當任何其他列的值該行將從其當前值更改。如果所有其他列都設置爲其當前值,則該列保持不變。要防止其他列更改時更新列,請明確將其設置爲其當前值。即使其他列不更改,也要更新列,明確地將其設置爲它應具有的值(例如,將其設置爲CURRENT_TIMESTAMP)。

[ deletia ]

以下規則描述了用於在一個表中與當前時間戳限定第一TIMESTAMP列兩者的默認和自動更新值,對於一個的可能性,但沒有其他的,或用於既:

[ deletia ]

  • 隨着DEFAULT條款,但沒有ON UPDATE CURRENT_TIMESTAMP條款中,C olumn具有給定的默認值,不會自動更新爲當前時間戳。

    默認取決於DEFAULT子句是指定CURRENT_TIMESTAMP還是常數值。使用CURRENT_TIMESTAMP時,默認值是當前時間戳。

    CREATE TABLE t1 (
        ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP 
    );

    使用常數,默認值是給定值。在這種情況下,該列根本沒有自動屬性。

    CREATE TABLE t1 (
        ts TIMESTAMP DEFAULT 0 
    );
+0

非常感謝您的幫助和信息,問題解決:) –

1

這是一個表的第一列timestamp的默認行爲。見MySQL的文檔:Automatic Initialization and Updating for TIMESTAMP

你可以改變它:

ALTER TABLE Dose 
    MODIFY COLUMN t_inj TIMESTAMP NULL 
      DEFAULT CURRENT_TIMESTAMP ; 

或:

ALTER TABLE Dose 
    MODIFY COLUMN t_inj TIMESTAMP NULL 
      DEFAULT NULL ; 
+0

非常感謝您的幫助和信息,解決問題:) –