2017-02-23 35 views
0

因为没有明显的原因(对我来说)我无法在MySQL上对表进行更新。版本是:已解决。疯狂! 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,UPDATE也可以。
当我执行DELETE FROM drawdata时,清除表中的所有数据,然后再次执行UPDATE语句,同样的问题又回来了:0行受影响,0匹配。

所以,我想,最终的问题是:
为什么我不能做一个更新的一个空表/列,而我可以做到这一点的另一个表?

有什么建议吗?

+1

@Mureinik'year = 2017'不是一个条件。这是要做的更新。 –

+2

你想更新一个空表?如果它不是空的,那么它会失败.. PK是在年份列上,您希望在表中的所有行(如果有)在2017年更新。只有在表中有一行时,这才有效。你可以给我们一个表中的数据的例子吗? –

+0

我不明白你的意图是什么。我在你的SQL查询中没有看到任何过滤器,为什么不使用'WHERE'语句?我的意思是,我会'更新drawdata SET left1 =“something”WHERE year = 2017' – russellhoff

回答

0

傻了。

至少选择我的昵称以及....

插入列一年价值2017年后,我能够做的所有列的更新。按设计工作。现在我需要...

0

您正在尝试更新空表。这就是为什么你的UPDATE语句从不做任何事情。

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

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

主键必须包含UNIQUE值。

主键列不能包含NULL值。

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

+0

我明白了。我发表的声明只是(错误地)打算填补PK。 – notaverygoodprogrammer

相关问题