there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT
来源:互联网 发布:通过销售数据进行分析 编辑:程序博客网 时间:2024/06/12 06:59
Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause解决:
执行的建表语句:
CREATE TABLE `parameter` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '资源ID,自增主键', `parameter_key` varchar(64) NOT NULL COMMENT 'KEY值', `parameter_name` varchar(64) NOT NULL COMMENT '属性NAME', `parameter_value` varchar(512) NOT NULL COMMENT 'VALUE值', `created_tm` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `modify_tm` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='parameter';
[Err] 1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
问题描述:
定义表的时候出现问题,是创建新表的时候出错了。报错的意思就是只能有一个类型为CURRENT_TIMESTAMP的列存在。`created_tm` timestamp 和 `modify_tm`都是TIMESTAMP类型。
原因:
使用的mysql版本是5.5的,5.5版本不支持在一个表里存在2个TIMESTAMP 类型的列。如果有两个TIMESTAMP 类型的列,当你给一个timestamp设置为CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP的时候,其他的TIMESTAMP 字段需要显式设定default值。
解决方案:
1.将自己的mysql版本升级到5.6以上。
2. 只给一个列设置TIMESTAMP 类型。
CREATE TABLE `parameter` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '资源ID,自增主键', `parameter_key` varchar(64) NOT NULL COMMENT 'KEY值', `parameter_name` varchar(64) NOT NULL COMMENT '属性NAME', `parameter_value` varchar(512) NOT NULL COMMENT 'VALUE值', `created_tm` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', `modify_tm` VARCHAR(14) NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '修改时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='parameter';
3.除了第一个TIMESTAMP 类型的字段外,其他的TIMESTAMP 字段需要显式设定default值。
CREATE TABLE `parameter` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '资源ID,自增主键', `parameter_key` varchar(64) NOT NULL COMMENT 'KEY值', `parameter_name` varchar(64) NOT NULL COMMENT '属性NAME', `parameter_value` varchar(512) NOT NULL COMMENT 'VALUE值', `created_tm` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', `modify_tm` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '修改时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='parameter';4.如果不是必须使用TIMESTAMP类型,可以使用 datetime
DROP TABLE IF EXISTS `parameter`;CREATE TABLE `parameter` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '资源ID,自增主键', `parameter_key` varchar(64) NOT NULL COMMENT 'KEY值', `parameter_name` varchar(64) NOT NULL COMMENT '属性NAME', `parameter_value` varchar(512) NOT NULL COMMENT 'VALUE值', `created_tm` datetime NOT NULL COMMENT '创建时间', `modify_tm` datetime NOT NULL COMMENT '修改时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='parameter';
拓展:TIMESTAMP VS datetime
datatime:
1. 占用8个字节
2. 允许为空值,可以自定义值,系统不会自动修改其值。
3. 实际格式储存
4. 与时区无关
5. 不可以设定默认值,所以在不允许为空值的情况下,必须手动指定datetime字段的值才可以成功插入数据。6. 可以在指定datetime字段的值的时候使用now()变量来自动插入系统的当前时间。
结论:datetime类型适合用来记录数据的原始的创建时间,需要手动更新时间,否则datetime字段的值都不会改变。
timestamp:
1. 占用4个字节
1. 占用4个字节
2. 允许为空值,但是不可以自定义值,所以为空值时没有任何意义。
3. TIMESTAMP值不能早于1970或晚于2037。例如'1968-01-01',对于TIMESTAMP值却无效,如果分配对象,时间将被转换为0。
3. TIMESTAMP值不能早于1970或晚于2037。例如'1968-01-01',对于TIMESTAMP值却无效,如果分配对象,时间将被转换为0。
4.值以UTC格式保存。(YYYYMMDD T HHMMSS Z(或者时区标识)。例如,20100607T152000Z,表示2010年6月7号15点20分0秒,Z表示是标准时间,如果表示北京时间,那么就是:20100607T152000+08,其中 “+08” 表示东八区。)
5.时区转化 ,存储时对当前的时区进行转换,检索时再转换回当前的时区。
6. 默认值为CURRENT_TIMESTAMP(),即当前的系统时间。7. 数据库会自动修改其值,所以在插入记录时不需要指定timestamp字段的名称和timestamp字段的值,你只需要在设计表的时候添加一个timestamp字段即可,插入后该字段的值会自动变为当前系统时间。
8. 以后任何时间修改表中的记录时,对应记录的timestamp值会自动被更新为当前的系统时间。
结论:timestamp类型适合用来记录数据的最后修改时间,因为只要你更改了记录中其他字段的值,timestamp字段的值都会被自动更新。
阅读全文
1 0
- there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
- there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
- there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT
- 数据库建表 there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
- error : Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in
- MySQL 5.4.6之前有关timestamp设置current_timestamp时报错there can be only one TIMESTAMP column with CURRENT_TI
- [Err] 1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTA
- Mysql 1293 - Incorrect table definition; there can be only one TIMESTAMP column with C
- mysql单表多timestamp报错#1293 - Incorrect table definition; there can be only one TIMESTAMP column with C
- MYSQL错误TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE的解决方案
- mysql报there can be only one auto column的问题原因
- [Err] 1075 - Incorrect table definition; there can be only one auto column and it must be defined as
- 1075 - Incorrect table definition;there can be only one auto column and it must be defined as a key
- Incorrect table definition; there can be only one auto column and it must be defined as a key
- [Err] 1075 - Incorrect table definition; there can be only one auto column and it must be defined as
- MySQL 数据表创建报错:there can be only one auto column and it must be defined as a key
- 1075-Incorrect table definition;there can be only one auto column and it must be defined as a key
- ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be def
- 通过 HTTP 协议做 Web 缓存
- 排序
- 接口测试指导之必收秘籍(内含用例及执行注意点)
- angularjs 动态控制添加 元素 (动态添加成员)
- 二级列表完美实现购物车
- there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT
- DB2语句优化
- Python小脚本——批量修改文件名与文件扩展名
- Setting property 'source' to 'org.eclipse.jst.jee.server:XX did not find a mat的解决办法
- DefaultHttpClient过时的替换
- [日推荐]『识花草』做个辛勤的小园丁
- 2017-9-17pat甲级 B
- 码云 IntelliJ IDEA 插件 Intellij-GitOSC
- dwr实现javaweb实时聊天通讯网页版常见问题及解决方案