1

我在 MySQL 表中有字段,我将其设置为默认值作为时间戳,当我第一次更新它时它会更新到当前时间戳,当我第二次更新它时,当我更新相同的第三个时它也会更新到当前时间戳 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 中插入所需的值,在 MOD_EID 中插入 0。当我第二次更新时,我正在用所需的值更新 MOD_EID。在这两种情况下,我都能在 EXIT_TIME 中获得 current_timestamp。但是当我在分钟或一天后再次使用相同的值更新 MOD_EID 字段时,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 回答