原因:
表中已经存在数据的情况下,增加了字段,而且不能为空,需要都初始化
字段内容从已存在字段可以得到,其实就是按行进行有条件的复制1. 简单表结构如下:
CREATE TABLE `t1` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID' ,
`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '时间' ,
`year` smallint(5) UNSIGNED NOT NULL ,
`mon` tinyint(3) UNSIGNED NOT NULL ,
PRIMARY KEY (`id`)
)2. time字段已存在, year/mon是新增字段
从time字段读出年写入year,读出month写入mon3. 貌似在sql server中支持CTE特性,可以解决;据说mysql8.0开始支持CTE, 可惜都救不了我用的mysql 5.64. 用CTE貌似这么写:
WITH A AS (SELECT id, year(time) as yy from t1)
UPDATE t1 set t1.year=A.yy
WHERE A.id=t1.id5. 请问在mysql5.6中怎么解决?
非常感谢
表中已经存在数据的情况下,增加了字段,而且不能为空,需要都初始化
字段内容从已存在字段可以得到,其实就是按行进行有条件的复制1. 简单表结构如下:
CREATE TABLE `t1` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID' ,
`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '时间' ,
`year` smallint(5) UNSIGNED NOT NULL ,
`mon` tinyint(3) UNSIGNED NOT NULL ,
PRIMARY KEY (`id`)
)2. time字段已存在, year/mon是新增字段
从time字段读出年写入year,读出month写入mon3. 貌似在sql server中支持CTE特性,可以解决;据说mysql8.0开始支持CTE, 可惜都救不了我用的mysql 5.64. 用CTE貌似这么写:
WITH A AS (SELECT id, year(time) as yy from t1)
UPDATE t1 set t1.year=A.yy
WHERE A.id=t1.id5. 请问在mysql5.6中怎么解决?
非常感谢
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货