首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL-5.1不使用简单的更新查询更新某些行。

MySQL-5.1不使用简单的更新查询更新某些行。
EN

Database Administration用户
提问于 2013-04-10 14:28:47
回答 1查看 2.6K关注 0票数 1

我试图将表中的列更新为与另一个表的列中的内容相同的列,作为数据仓库项目的非规范化过程的一部分。这些数据是保密的,所以为了给我提供一个例子,我将使用抽象表和列名。

我有三个表,称为A、B和C。A有15M行,是主要的数据立方体表,B和C是事实表,C是查找描述的表。表A的列dtype为1或0,其中1表示数据是实际的(来自实际事务的事实表),0表示数据是理论数据(来自预测)。如果我运行以下语句

代码语言:javascript
复制
UPDATE A SET desc = NULL; -- Just for clarity with regards to initial state

UPDATE A, B, C SET A.desc = C.desc WHERE B.id = A.b_id AND C.id = B.desc_id AND A.dtype=1
  -- produces many warnings the last 64 of which are data truncation warnings

SELECT count(*)
FROM 
  A
  JOIN B ON B.id = A.b_id
  JOIN C ON C.id = B.desc_id
WHERE 
  A.dtype = 1
  AND A.desc <> C.desc

最后一个select语句返回计数的200,000+。这怎麽可能?

我使用的是MySQL版本5.1.67-0ubuntu0.11.10.1。所有的表都是MyISAM。

EN

回答 1

Database Administration用户

发布于 2013-04-10 15:08:24

结果表明,对于A和B之间的联接,有许多重复的匹配,而MySQL是以一种未定义但一致的方式从重复的连接中选择C.desc。在执行更新时,它会选择一个副本,但是当SELECTing选择另一个副本时。因此,选择不同的行将返回结果,但更新行将表示没有更改。

故事的寓意:不要忘记检查副本,因为MyISAM没有。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/39650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档