MySQL Workbench编辑表数据是只读的

时间:2012-05-30 11:06:46

标签: mysql mysql-workbench

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

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

有没有修复来处理没有主键的表?

由于

作为建议之一,我尝试升级WB 5.2.40。但这个问题仍然存在.. 可以请任何人帮忙..

15 个答案:

答案 0 :(得分:60)

我假设桌子有一把主键。首先尝试运行unlock tables命令以查看是否修复了它。

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

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

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

答案 1 :(得分:26)

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

答案 2 :(得分:13)

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

USE mydb;
SELECT * FROM mytable

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

SELECT * FROM mydb.mytable 

(MySql 5.2.42 / MacOsX)

我希望这会有所帮助。

答案 3 :(得分:6)

这是MySQLWorkbench中的Known limitation(你无法编辑没有PK的表):

编辑表格:

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

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

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

您可能希望先删除现有行:

Truncate table your_table_name

答案 4 :(得分:3)

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

您可以制作常规INDEX或复合INDEX。这就是所有MySQL WB都需要修复只读的东西(我有使用MariaDB v.1.1.4的6.2版):

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

答案 5 :(得分:1)

根据this bug,问题已在Workbench 5.2.38中针对某些人修复,也许5.2.39针对其他人 - 您可以upgrade修改到最新版本(5.2.40)吗?

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

SELECT *,'' FROM my_table

答案 6 :(得分:1)

将鼠标悬停在mysql工作台中的“只读”图标上会显示一个工具提示,说明无法编辑的原因。在我的例子中,它说,只能编辑带有主键或唯一不可为空的列的表。

答案 7 :(得分:1)

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

只读

SELECT Leadid,firstname,lastname,date from FROM lead;

允许编辑

选择Lead的LeadID,名字,姓氏,创建日期;

答案 8 :(得分:0)

在马尼托巴的帖子的指导下,我找到了另一种解决方案。总之,解决方案是:

  1. 使用USE命令

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

    SELECT * FROM mydb.mytable
    
  3. GUI

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

答案 9 :(得分:0)

1.)您必须使主键唯一,然后您应该能够编辑。

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

2.)您还需要在选择语句中包含质数键

Nr 1并不是必需的,但这是一种很好的做法。

答案 10 :(得分: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;

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

答案 11 :(得分:0)

enter image description here

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

答案 12 :(得分:0)

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

答案 13 :(得分:0)

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

答案 14 :(得分:0)

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

<块引用>

ALTER TABLE scema_here.table_name_here ADD PRIMARY KEY (your primary key here);

干杯! :)