Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql:update命令未更改_Mysql_Sql - Fatal编程技术网

Mysql:update命令未更改

Mysql: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

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  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不会更新行。