当前位置: 代码迷 >> MySQL >> MYSQL设计表时,需 两个TIMESTAMP 字段的情况
  详细解决方案

MYSQL设计表时,需 两个TIMESTAMP 字段的情况

热度:181   发布时间:2016-05-05 16:38:25.0
MYSQL设计表时,需要 两个TIMESTAMP 字段的情况

有时候,数据库表有这样的需求,要一个记录创建时间,一个记录修改时间。?

理想中的设计是这样的,更新时间的初始值和创建时间一样:?

Java代码??收藏代码
  1. CREATE?TABLE?`test_table`?(??
  2. `id`?INT(?10?)?NOT?NULL,??
  3. `create_time`?TIMESTAMP?NOT?NULL?DEFAULT?CURRENT_TIMESTAMP,??
  4. `update_time`?TIMESTAMP?NOT?NULL?DEFAULT?CURRENT_TIMESTAMP?ON?UPDATE?CURRENT_TIMESTAMP??
  5. )?ENGINE?=?INNODB;??



或者是这样的,更新时间初始值为空,只有在更新的时候才有值:?

Java代码??收藏代码
  1. CREATE?TABLE?`test_table`?(??
  2. `id`?INT(?10?)?NOT?NULL,??
  3. `create_time`?TIMESTAMP?NOT?NULL?DEFAULT?CURRENT_TIMESTAMP,??
  4. `update_time`?TIMESTAMP?ON?UPDATE?CURRENT_TIMESTAMP??
  5. )?ENGINE?=?INNODB;??


这样的建表SQL,是执行不了的,执行时报错,估计这个很多人遇到过吧:?

Java代码??收藏代码
  1. Incorrect?table?definition;?there?can?be?only?one?TIMESTAMP?column?with?CURRENT_TIMESTAMP?in?DEFAULT?or?ON?UPDATE?clause??



网上找到个解决方法(只适用于更新时间的初始值和创建时间一样,当然这个也说得过去):?

Java代码??收藏代码
  1. CREATE?TABLE?`test_table`?(??
  2. `id`?INT(?10?)?NOT?NULL,??
  3. `create_time`?TIMESTAMP?NOT?NULL?DEFAULT?0,??
  4. `update_time`?TIMESTAMP?NOT?NULL?DEFAULT?CURRENT_TIMESTAMP?ON?UPDATE?CURRENT_TIMESTAMP??
  5. )?ENGINE?=?INNODB;??



INSERT语句这样写:?

Java代码??收藏代码
  1. INSERT?INTO?test_table?(id,?create_time,?update_time)?VALUES?(1,?NULL,?NULL);??



或者这样写(注意,没有写create_time):?

Java代码??收藏代码
  1. INSERT?INTO?test_table?(id,?update_time)?VALUES?(1,?NULL);??



UPDATE语句正常写法(假设test_table.id可以修改):?

Java代码??收藏代码
  1. UPDATE?test_table?(id)?VALUES?(2);??
  相关解决方案