MySQL Workbench编辑表数据是只读的


84

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

仅当表具有主键时,它才可编辑。

有没有表主键的修复程序?

谢谢

作为建议之一,我尝试升级WB 5.2.40。但是仍然存在此问题。任何人都可以帮忙吗。


建议的问题无济于事。我无法添加一列然后将其删除。现在选择phpMyadmin。
ophidion

PK是必需的,这是一个相关的常见问题解答–dev.mysql.com/doc/workbench/en/…–
Philip Olson

对于通过网络搜索找到该线程的人来说,可能是相关的MySQL Workbench错误:视图的结果网格不可编辑。请注意,此错误仅与满足“可更新”的所有其他约束的视图有关,并且可以使用直接SQL查询进行修改。
TheDudeAbides

Answers:


77

我假设表有一个主键。首先尝试运行一个解锁表命令以查看是否可以解决该问题。

如果所有其他方法均失败,则可以更改该表以创建具有自动增量的新主键列,并有望解决该问题。完成后,您应该可以删除该列,而不会出现任何问题。

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

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


5
实际上,我的问题本身就是我不想在表中拥有主键。有关此问题,请参阅其他答案。
EscalinNancy 2012年

2
我认为您无法在MYSQL工作台中执行任何操作,因为该程序需要一个主键来确定要编辑的行。
Thomas B

好的,谢谢托马斯。我已经在表中包含了主键。
EscalinNancy

我使用DBeaver时遇到了同样的问题。断开连接并再次连接解决了!
lafleur


14

如果您为数据库连接设置了默认模式,那么Select将以只读模式运行,直到您明确设置模式为止

USE mydb;
SELECT * FROM mytable

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

SELECT * FROM mydb.mytable 

(MySQL 5.2.42 / MacOsX)

我希望这有帮助。


9

这是MySQLWorkbench中的已知限制(您不能编辑不带PK的表):

要编辑表:

方法1 :( 在某些情况下该方法无法使用)
在对象浏览器中的表上单击鼠标右键,然后从中选择“编辑表数据”选项。

方法2:
我建议您添加主键,而不是:

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

并且您可能想先删除现有的行:

Truncate table your_table_name

1
MySQL Workbench的最新版本(我的版本是6.3)没有“编辑表数据”选项。
JonP

6

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


您说的这个图标在哪里?
布拉德·肯特

1
回答自己:它在工作台6.3上的结果的下方和右侧
Brad Kent

3

在MySQL Workbench中,您需要一个INDEX进行编辑,而不必将其作为PK(尽管添加PK也是一种解决方案)。

您可以制作常规INDEX或复合INDEX。这就是MySQL WB修复只读问题所需的全部内容(我在MariaDB v。10.1.4中具有6.2版本):

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


3

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

只读

SELECT Leadid,firstname,lastname,datecreated from lead;

允许编辑

SELECT LeadID,名字,姓氏,从lead创建的日期;


1

根据此错误,此问题已在Workbench 5.2.38中针对某些人解决,对于其他人而言可能为5.2.39,已解决—您能否升级到最新版本(5.2.40)?

或者,可以解决以下问题:

SELECT *,'' FROM my_table

谢谢您如此迅速的答复。.替代SELECT无法正常工作。.但是我可以升级..将升级并检查它。.非常感谢...
EscalinNancy 2012年

@EscalinNancy:该错误报告中的另一个人评论说,替代解决方法是使用功能,例如SELECT *, CONCAT('','') FROM my_table。也许这对您有用?
eggyal

不,..它无法正常工作。.正在将concat(''。'')作为结果集中的另一列,但仍是只读数据。.现在正在升级WB
EscalinNancy 2012年

@EscalinNancy:我很抱歉听到这个消息:(这有可能别人放在这里可能有更多的想法是什么问题-但它更可能他们会如果你看到这个问题取消接受我的答案。
eggyal

与5.2.44中的情况相同。该数据库是一个高效的数据库,在以前的工作台版本中可以正常工作。
地球引擎

0

在曼尼托巴省的职位指导下,我找到了另一种解决方案。作为总结,解决方案是:

  1. 使用USE命令

    USE mydb;
    SELECT * FROM mytable
    
  2. 具有明确的架构前缀:

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

    在对象浏览器“ SCHEMAS”窗格上,如果您遇到相同的问题,则最初不会突出显示所有数据库图标。因此,您可以右键单击要用作默认数据库的数据库图标,然后选择“设置为默认模式”。


0

1.)您必须使主键唯一,然后才能进行编辑。

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

2)您还需要在选择语句中包含入门密钥

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


0

如果查询中有任何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);
twk


0

当您通过联接两个表进行获取时,MySQL将以只读模式运行,并且结果中包括两个表中的列。这样就无法直接更新值。


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.