【问题标题】:MySQL Workbench Edit Table Data is read onlyMySQL Workbench 编辑表数据是只读的
【发布时间】:2012-06-04 14:44:16
【问题描述】:

在 MySQL Workbench 5.2.37 中尝试编辑表数据时,它处于只读模式。

只有当表有主键时才可编辑。

没有主键的表有什么解决办法吗??

谢谢

作为我尝试升级 WB 5.2.40 的建议之一。但是这个问题还是存在的。。 有没有人可以帮忙..

【问题讨论】:

  • 建议的问题都不起作用。我无法添加列然后将其删除。迁移到 phpMyadmin 是我现在的选择。
  • 需要PK,这里有一个相关的FAQ -- dev.mysql.com/doc/workbench/en/…
  • 可能与通过网络搜索找到此线程的人相关的 MySQL Workbench 错误:views' result grids are not editable。请注意,此错误仅适用于满足“updatable”所需的所有其他约束并且可以使用直接 SQL 查询进行修改的 视图

标签: mysql mysql-workbench


【解决方案1】:

我假设表有一个主键。首先尝试运行解锁表命令,看看是否可以修复它。

如果所有其他方法都失败了,您可以更改表以创建具有自动增量的新主键列,这有望修复它。完成后,您应该能够毫无问题地删除该列。

与往常一样,您希望在更改表格之前进行备份。 :)

注意:如果这是您的问题,MySQL 工作台无法在没有主键的情况下工作。但是,如果您有一个多对多表,您可以将两列都设置为主键,这样您就可以编辑数据。

【讨论】:

  • 其实我的问题本身就是我不想在我的表中有主键。请参阅此问题的其他答案。
  • 我认为您在 MYSQL 工作台中做不到,因为程序需要一个主键来确定您要编辑的行。
  • 好的。谢谢托马斯。我的表中包含了主键。
  • 我在使用 DBeaver 时遇到了同样的问题。断开再连接就解决了!
  • 断开连接并再次连接也为我解决了这个问题!
【解决方案2】:

如果表没有定义主键或唯一的不可为空,则 MySql 工作台无法编辑数据。

【讨论】:

  • 我想没有办法解决这个问题。
  • 这是最好的答案。如果你可以改变表格,你可以设置PK允许编辑!
【解决方案3】:

如果您为数据库连接设置默认架构,则 Select 将以只读模式运行,直到您明确设置架构

USE mydb;
SELECT * FROM mytable

这也将在编辑模式下运行:

SELECT * FROM mydb.mytable 

(MySql 5.2.42 / MacOsX)

我希望这会有所帮助。

【讨论】:

    【解决方案4】:

    这是 MySQLWorkbench 中的Known limitation(您无法在没有 PK 的情况下编辑表):

    编辑表格:

    方法 1:(在某些情况下方法不起作用)
    右键单击对象浏览器中的表,然后从那里选择编辑表数据选项。

    方法二:
    我宁愿建议您添加主键:

    ALTER TABLE `your_table_name` ADD PRIMARY KEY (`column_name`);
    

    你可能想先删除现有的行:

    Truncate table your_table_name
    

    【讨论】:

    • MySQL Workbench 的最新版本(我的是 6.3)没有“编辑表数据”选项。
    【解决方案5】:

    将鼠标悬停在 mysql 工作台中的“只读”图标上会显示一个工具提示,解释为什么它不能被编辑。就我而言,它说只能编辑具有主键或唯一不可为空列的表。

    【讨论】:

    • 你说的这个图标在哪里?
    • 回答我自己:它位于工作台 6.3 上结果的下方和右侧
    【解决方案6】:

    即使我在选择主键时也遇到了只读问题。我最终发现这是一个外壳问题。显然,PK 列的大小写必须与表中定义的相同。使用:windows上的workbench 6.3

    只读

    选择leadid,firstname,lastname,datecreated FROMlead;

    允许编辑

    SELECT LeadID,firstname,lastname,datecreated FROM Lead;

    【讨论】:

      【解决方案7】:

      在 MySQL Workbench 中,您需要一个 INDEX 来编辑,不需要它是 PK(尽管添加 PK 也是一种解决方案)。

      您可以创建常规 INDEX 或复合 INDEX。这就是 MySQL WB 修复只读问题所需的全部内容(我有 v. 6.2 和 MariaDB v. 10.1.4):

      只需右键单击表格,选择“更改表格...”,然后转到“索引”选项卡。在左侧窗格中为您的索引输入一个自定义名称,并在中间窗格中选中一个(确保值是唯一的)或多个字段(只需确保组合是唯一的)

      【讨论】:

        【解决方案8】:

        根据this bug 的说法,该问题已在 Workbench 5.2.38 中对某些人进行了修复,对于其他人来说可能是 5.2.39 — 您可以将 upgrade 更新到最新版本 (5.2.40) 吗?

        或者,可以使用以下解决方法:

        SELECT *,'' FROM my_table
        

        【讨论】:

        • 感谢您这么快的回复..备用 SELECT 不起作用..但我可以升级..将升级并检查..非常感谢 egyal...
        • @EscalinNancy:该错误报告中的另一个人评论说,另一种解决方法是使用函数,例如SELECT *, CONCAT('','') FROM my_table。也许这对你有用?
        • 不..它不起作用..我将 concat(''.'') 作为结果集中的另一列,但数据仍然是只读的..现在正在升级 WB
        • @EscalinNancy:我很遗憾听到这个消息 :( 这里的其他人可能更了解问题所在 - 但如果你不接受,他们更有可能会看到这个问题我的回答。
        • 5.2.44也是一样的情况。该数据库是一个高效的数据库,在以前版本的工作台中运行良好。
        【解决方案9】:

        如果您的表处于只读模式,则首先检查的是主键。如果没有定义主键,添加如下,

        ALTER TABLE scema_here.table_name_here 添加主键 (your primary key here);

        干杯! :)

        【讨论】:

          【解决方案10】:

          在 Manitoba 的帖子的指导下,我找到了另一种解决方案。总而言之,解决方案是:

          1. 使用 USE 命令

            USE mydb;
            SELECT * FROM mytable
            
          2. 带有显式架构前缀:

            SELECT * FROM mydb.mytable
            
          3. 图形界面

            在对象浏览器的“SCHEMAS”窗格中,如果您遇到相同的问题,所有数据库图标最初都不会突出显示。所以你可以右键点击你想成为默认的数据库图标,选择“设置为默认模式”。

          【讨论】:

            【解决方案11】:

            1.)您必须使主键唯一,然后您应该可以进行编辑。

            在“蓝色”模式中右键单击您的表 -> ALTER TABLE,查找您的primert key (PK),然后只需选中复选框,UN,AI 应该已经被选中。之后只需应用,您应该就可以编辑表格数据了。

            2.)您还需要在您的选择语句中包含初级键

            Nr 1 并不是真正必要的,而是一种好的做法。

            【讨论】:

              【解决方案12】:

              如果您的查询有任何 JOIN,Mysql Workbench 将不允许您更改表,即使您的结果都来自单个表。

              例如下面的查询

              SELECT u.* FROM users u JOIN passwords p ON u.id=p.user_id WHERE p.password IS NULL;
              

              将不允许您编辑结果或添加行,即使结果仅限于一个表。您必须专门执行以下操作:

              SELECT * FROM users WHERE id=1012;
              

              然后您可以编辑该行并将行添加到表中。

              【讨论】:

              • 我不明白为什么第一个查询不起作用,但至少以下查询有效。您可以编辑以下查询有效。 SELECT u.* FROM users u WHERE u.id IN (SELECT user_id FROM passwords WHERE p.password IS NULL);
              【解决方案13】:

              当您通过连接两个表进行获取时,MySQL 将以只读模式运行,并且两个表中的列包含在结果中。那么你就不能直接更新值了。

              【讨论】:

                【解决方案14】:

                是的,我发现 MySQL 也无法编辑结果表。通常,连接其他表的结果表没有主键。我听说其他人建议将结果表放在另一个表中,但更好的解决方案是使用可以编辑结果表的 Dbeaver。

                【讨论】:

                  【解决方案15】:

                  取消选中标记的复选,它将启用网格编辑

                  【讨论】:

                  • 取消选中标记的检查,它将启用网格编辑:不工作 - Workbench 8.0
                  猜你喜欢
                  • 2014-03-26
                  • 2018-07-18
                  • 2016-03-04
                  • 1970-01-01
                  • 2016-01-16
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-08-27
                  • 1970-01-01
                  相关资源
                  最近更新 更多