Mysql:update命令未更改
2017-05-30-->20170530Mysql:update命令未更改,mysql,sql,Mysql,Sql,2017-05-30-->20170530 SET SQL_SAFE_UPDATES = 0; UPDATE stations.attenuation_smoothed SET date = DATE_FORMAT(date, '%Y/%m/%d') WHERE counter = 1; SET SQL_SAFE_UPDATES = 1; 我也尝试过更新…复制 但是该表没有显示任何效果,查询运行时不会出错 0 row(s) affected Rows matched: 1 C
SET SQL_SAFE_UPDATES = 0;
UPDATE stations.attenuation_smoothed
SET date = DATE_FORMAT(date, '%Y/%m/%d')
WHERE counter = 1;
SET SQL_SAFE_UPDATES = 1;
我也尝试过更新…复制
但是该表没有显示任何效果,查询运行时不会出错
0 row(s) affected Rows matched: 1 Changed: 0 Warnings: 0
MySQL不会“统计”未被修改为“受影响”的行。也就是说,如果我们为导致行“无更改”的列指定值,则该行不包括在“受影响的行”计数中
问题没有指定名为
date
的列的数据类型
如果这是DATE
datatype,那么我们希望UPDATE
语句(如问题所示)不会修改任何行,并返回“0个受影响的行”
如果它是字符数据类型,并且如果列中已存储的值的格式为'YYYY/MM/DD'
表示有效的日期值,那么我们还希望返回“0行受影响”
演示为什么语句没有对行进行任何更改,请考虑此演示:
SELECT DATE_FORMAT('2018-04-12','%Y/%m/%d') AS str
, DATE_FORMAT('2018-04-12','%Y/%m/%d') + INTERVAL 0 DAY AS dt
返回:
str dt
---------- ----------
2018/04/12 2018-04-12
DATE
数据类型是一种内部表示形式。MySQL在从内部表示转换为字符串时使用标准格式
演示查询使用显式调用DATE\u FORMAT
将日期
(或日期时间
或时间戳
)值转换为指定格式的字符串表示形式
请注意,字符串表示形式中出现的破折号分隔符实际上不是日期
值的一部分,它们是字符串表示形式中出现的字符
当我们为日期列指定一个字符串时,该字符串会隐式转换为DATE
数据类型。MySQL在分隔符和格式方面相当宽松。考虑
SELECT DATE( '2018/4/12' ) AS dt1
, DATE( '2018.4+12' ) AS dt2
这演示如何将字符串值转换为DATE
数据类型
dt1 dt2
---------- ----------
2018-04-12 2018-04-12
为了在结果集中返回DATE
值,MySQL正在将DATE
值转换回字符串表示形式,然后再转换回字符串表示形式(MySQL默认格式)
为了说明在
date
是字符列的情况下为什么“没有变化”,请考虑:
SELECT DATE('2018/04/12') AS dt
, DATE_FORMAT( DATE('2018/04/12') ,'%Y/%m/%d') AS str
返回
dt str
---------- ----------
2018-04-12 2018/04/12
我不确定这是否回答了被问到的问题。我甚至不确定是否有人问过问题。post table schema
date
是保留字,应该在``中,如果字段是date
类型,则该操作将不执行任何操作日期列的数据类型是什么?@FlashThunder这是该规则的一个例外。否则OP会出错。@FlashThunder不,这不是版本相关的,请参阅Flash注释的重要部分:如果date
是date
数据类型,则赋值是重复的——它什么也不做。如果没有任何更改,MySQL不会更新行。