MySQL 一个表两个 timestamp 字段到底该如何定义才正确啊

2016-03-20 16:51:06 +08:00
 patrickstar
CentOS 7 + MySQL 5.7 community

基本没接触数据库,网上的看了半天也没太看懂
我需要用别人写的 sql 在 MySQL 中建立一个表,但是这段语句 accessed 字段死活报错

CREATE TABLE IF NOT EXISTS access_address (
user varchar(255) default NULL,
address varchar(255) default NULL,
netmask varchar(255) default 'FF.FF.FF.FF',
updated timestamp NOT NULL,
accessed timestamp NOT NULL default CURRENT_TIMESTAMP
) ENGINE=MyISAM;
6008 次点击
所在节点    MySQL
12 条回复
GTim
2016-03-20 16:58:08 +08:00
我这里没报错,你把错误贴出来
kn007
2016-03-20 17:02:07 +08:00
我记得 5.7 的 SQLMODE 默认禁用了不安全的 TIMESTAMP
kn007
2016-03-20 17:02:36 +08:00
比如 0000-00-00 00:00:00 这种。
重定义下 sqlmode 就行了
patrickstar
2016-03-20 17:31:06 +08:00
@GTim 'create_db_tables.sql': Invalid default value for 'accessed'
pubby
2016-03-20 18:05:12 +08:00
设置 sql_mode NO_ENGINE_SUBSTITUTION 试试

my.cnf 加上
sql-mode="NO_ENGINE_SUBSTITUTION"
patrickstar
2016-03-20 18:10:13 +08:00
@kn007 改成 accessed timestamp NOT NULL default '0000-00-00 00:00:00' 也不行,看来得配置 sql-mode 试一下
patrickstar
2016-03-20 18:11:19 +08:00
@pubby 谢谢,我晚上回去试一下
kn007
2016-03-20 18:12:00 +08:00
@patrickstar 。。。肯定不是这样啊,我晕。

禁用了不安全的 TIMESTAMP ,比如 0000-00-00 00:00:00 这种。

句子要这样看,不好意思。。

定义下 sqlmode 为: sql_mode="ONLY_FULL_GROUP_BY,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
wingyiu
2016-03-20 18:19:42 +08:00
CREATE TABLE IF NOT EXISTS access_address (
user varchar(255) default NULL,
address varchar(255) default NULL,
netmask varchar(255) default 'FF.FF.FF.FF',
updated int(11) NOT NULL,
accessed int(11) NOT NULL
) ENGINE=MyISAM;

INSERT ... ... VALUES( ...., UNIX_TIMESTAMP())
soli
2016-03-20 19:33:41 +08:00
好像只能第一个 timestamp 类型是 『 default CURRENT_TIMESTAMP 』。

不过我这里如下定义是没问题的:

CREATE TABLE xxx (
...

ctime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
mtime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
Schaffer
2016-03-20 19:39:06 +08:00
`create_time` timestamp not null default current_timestamp,
`update_time` timestamp not null default current_timestamp on update current_timestamp

mysql 版本:
mysql Ver 14.14 Distrib 5.7.11, for osx10.11 (x86_64) using EditLine wrapper
patrickstar
2016-03-20 22:01:03 +08:00
@kn007 增加了 sql_mode 就可以了,谢谢
@soli 明天我再试一下修改字段属性的办法

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/264938

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX