我在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);
}
}
答案 0 :(得分:0)
只有当某些其他列的值发生更改时,才会自动更新TIMESTAMP列。如果将MOD_EID设置为与已有的值相同,则不会更新TIMESTAMP。我不知道为什么它曾经适合你,这是documentation所说的:
如果该列自动更新,则会自动更新为 当行中任何其他列的值为时的当前时间戳 改变了它的当前价值。如果全部,列保持不变 其他列设置为其当前值。防止列 从其他列更改时更新,显式设置为其 当前值。即使其他列没有,也要更新列 更改,显式将其设置为应具有的值(例如, 将其设置为CURRENT_TIMESTAMP)。