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

WBOY
풀어 주다: 2016-06-07 16:27:10
원래의
1227명이 탐색했습니다.

MYSQL设计表时,需要 两个TIMESTAMP 字段的情况 有时候,数据库表有这样的需求,要一个记录创建时间,一个记录修改时间。 理想中的设计是这样的,更新时间的初始值和创建时间一样: CREATE TABLE `test_table` (`id` INT( 10 ) NOT NULL,`create_time` TIMEST

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

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

理想中的设计是这样的,更新时间的初始值和创建时间一样:
CREATE TABLE `test_table` (
`id` INT( 10 ) NOT NULL,
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE = INNODB;
로그인 후 복사


或者是这样的,更新时间初始值为空,只有在更新的时候才有值:
CREATE TABLE `test_table` (
`id` INT( 10 ) NOT NULL,
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE = INNODB;
로그인 후 복사

这样的建表SQL,是执行不了的,执行时报错,估计这个很多人遇到过吧:
Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
로그인 후 복사


网上找到个解决方法(只适用于更新时间的初始值和创建时间一样,当然这个也说得过去):
CREATE TABLE `test_table` (
`id` INT( 10 ) NOT NULL,
`create_time` TIMESTAMP NOT NULL DEFAULT 0,
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE = INNODB;
로그인 후 복사


INSERT语句这样写:
INSERT INTO test_table (id, create_time, update_time) VALUES (1, NULL, NULL);
로그인 후 복사


或者这样写(注意,没有写create_time):
INSERT INTO test_table (id, update_time) VALUES (1, NULL);
로그인 후 복사


UPDATE语句正常写法(假设test_table.id可以修改):
UPDATE test_table (id) VALUES (2);
로그인 후 복사


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!