快要疯了! MySQL更新不在一个表上工作,在另一个表上正常工作

时间:2017-02-23 13:31:45

标签: mysql database mariadb

没有明显的原因(对我来说......)我不能再在MySQL上对表进行更新了。版本是:

mysql  Ver 15.1 Distrib 10.0.29-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

我做的是以下内容: 我在现有数据库中添加了一个新表。该表如下所示:

CREATE TABLE `drawdata` (
  `year` int(11) NOT NULL,
  `left1` varchar(40) NOT NULL,
  `left2` varchar(40) NOT NULL,
  ...
  ...
  `left31` varchar(40) NOT NULL,
  `left32` varchar(40) NOT NULL,
  PRIMARY KEY (`year`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

当我在MySQL CLI中执行下一个查询时,我得到了

update drawdata set year=2017;

Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0

没有更新任何内容。 (一个SELECT证明了这一点)。无法使用phpMyAdmin进行此操作。 没有错误,没有警告。 mysql.log中也没有。

但是,我可以在另一个表上执行完全相同的语句,该表也将列年作为主键。

刚刚发现在桌子上进行INSERT工作,如果我在此之后进行更新,UPDATE也可以正常工作。
当我执行DELETE FROM drawdata,清除表中的所有数据,然后再次执行UPDATE语句时,同样的问题又回来了:0行受影响,0匹配。

所以,我想,最终的问题是:
为什么我不能在空表/列上执行UPDATE,而我可以在另一个表上执行此操作?

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

傻傻的我。

至少我的昵称被选中了......

在列年中插入值2017后,我能够对所有列执行UPDATE。按设计工作。现在我需要......

答案 1 :(得分:0)

您正在尝试更新空表。这就是你的UPDATE语句永远不会做任何事情的原因。

要记住的其他事项,您的UPDATE语句会尝试将所有年份列修改为2017年,但是这会将其列为PK。您将遇到PK冲突,请记住PK的定义:

  

PRIMARY KEY约束唯一标识a中的每条记录   数据库表。

     

主键必须包含UNIQUE值。

     

主键列不能包含NULL值。

     

大多数表应该有一个主键,每个表只能有   一键主键。