【问题标题】:Going crazy! MySQL update not working on one table, working fine on another快要疯了! MySQL 更新不能在一张表上工作,在另一张表上工作正常
【发布时间】: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 阅读一个好的教程,而不是他现在使用的那个。

标签: mysql database mariadb


【解决方案1】:

我真傻。

至少我的昵称选的不错....

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

【讨论】:

    【解决方案2】:

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

    要记住的另一件事是,您的 UPDATE 语句尝试将所有年份列修改为 2017 年,但此列是 PK。会有PK冲突,记住PK的定义:

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

    主键必须包含唯一值。

    主键列不能包含 NULL 值。

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

    【讨论】:

    • 我明白了。我展示的声明只是(错误地)打算只填充 PK。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多