【发布时间】:2017-02-23 13:31:44
【问题描述】:
没有明显的原因(对我来说..)我不能再在 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 中执行下一个查询时,我得到 p>
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 匹配。
所以,我想,最终的问题是:
为什么我不能在空表/列上执行更新,而我可以在另一个表上执行此操作?
有什么建议吗?
【问题讨论】:
-
@Mureinik
year=2017不是条件。这是要做的更新。 -
你想更新一个空表?如果它不为空,那么它将失败.. PK 位于您想用 2017 年更新表中所有行的年份列(如果有)。仅当表格中有一行时才有效。你能给我们举一个表中数据的例子吗?
-
我不明白你的意图。我在您的 SQL 查询中没有看到任何过滤器,为什么不使用“WHERE”语句?我的意思是,我会做 'UPDATE drawdata SET left1="something" WHERE year=2017'
-
“刚刚发现在表上执行 INSERT 是可行的,如果我在此之后执行 UPDATE,则 UPDATE 也可以。”............你回答了你自己的问题我想。
-
我认为 OP 在数据库方面是新的并且不知道这些概念。这里有很多问题。我建议 OP 阅读一个好的教程,而不是他现在使用的那个。