1

MySQLテーブルにフィールドがあり、タイムスタンプとしてデフォルト値に設定します。最初に更新すると現在のタイムスタンプに更新され、2回目に更新すると同じ3番目に更新すると現在のタイムスタンプbtに更新されます列のタイムスタンプ フィールドに同じ値を持つ時刻は、現在のタイムスタンプに更新されません。

私のテーブル構造は次のとおりです。

+-----------+-----------+------+-----+-------------------+-----------------------------+
| Field     | Type      | Null | Key | Default           | Extra                       |
+-----------+-----------+------+-----+-------------------+-----------------------------+
| EID       | int(11)   | NO   | PRI | 0                 |                             |
| MOD_EID   | int(11)   | YES  |     | NULL              |                             |
| EXIT_TIME | timestamp | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-----------+-----------+------+-----+-------------------+-----------------------------+

初めて更新するとき、必要な値を EID に挿入し、0 を MOD_EID に挿入します。2 回目の更新時に、必要な値で MOD_EID を更新しています。どちらの場合も、EXIT_TIME で current_timestamp を取得できました。しかし、MOD_EID フィールドを 1 分または 1 日後に同じ値で再度更新すると、EXIT_TIME フィールドは current_timestamp に更新されませんか? どうしたの

アップデートのコードは

String vexit=request.getParameter("string");

StringTokenizer tok=new StringTokenizer(vexit,"");

String sql,query,query2;
int count2=0;


    while(tok.hasMoreTokens())
    {
            String ide=tok.nextToken();
sql="SELECT count(EID) FROM tm_exit where EID='"+ide+"' ";
            ResultSet rs=st.executeQuery(sql);
            while(rs.next())
            {
            count2=rs.getInt(1);
}
        if(count2 >0)
            {
query="UPDATE tm_exit set MOD_EID='"+ide+"' WHERE EID='"+ide+"'";
int flag=st.executeUpdate(query);
}
        else
            {
query2="INSERT INTO tm_exit (EID,MOD_EID)values('"+ide+"',0)";
int flag2=st.executeUpdate(query2);
}
    }
4

1 に答える 1

0

TIMESTAMP 列は、他の列の値が変更された場合にのみ自動的に更新されます。MOD_EID を同じ値に設定すると、TIMESTAMP は更新されません。なぜそれがあなたのために働いていたのかわかりません。ドキュメントには次のように書かれています:

列が自動更新されている場合、行内の他の列の値が現在の値から変更されると、現在のタイムスタンプに自動的に更新されます。他のすべての列が現在の値に設定されている場合、列は変更されません。他の列が変更されたときに列が更新されないようにするには、明示的に現在の値に設定します。他の列が変更されていない場合でも列を更新するには、明示的に値を設定します (たとえば、CURRENT_TIMESTAMPに設定します)。

于 2012-09-26T05:48:17.027 に答える