MySQL中的额外列,我可以删除它吗?

Posted

技术标签:

【中文标题】MySQL中的额外列,我可以删除它吗?【英文标题】:extra column in MySQL, can I drop it? 【发布时间】:2015-04-01 01:01:29 【问题描述】:

我正在创建一个数据库,并与 mysql 中的另一个表建立了一对一的连接,下面是一个屏幕截图。我的问题是我可以删除建立连接时创建的额外列(装配厂 ID)吗?我只想要一个(factory_id)这会弄乱我建立的连接吗?我应该放弃(factory_id)并让连接保持不变吗? 我是菜鸟,谢谢!

【问题讨论】:

【参考方案1】:

我假设您的评论“但我应该放下桌子吗?”真正的意思是“但我应该删除该列吗?”。

简短的回答:如果它是安全的,您应该删除该列 - 没有理由让它混淆数据库和未来开发人员的思想。

长答案:如何确定它是否安全:如果 1) factory_id 中的值是并且始终与程序集 factory_id 相同,例如,它们是彼此的重复值,并且 2) 没有其他表或程序代码参考程序集 factory_id,可以放心删除程序集 factory_id。

但是,如果它们有任何可能意味着不同的东西(不仅仅是 20 行左右的样本),则不能删除它。见小提琴:http://sqlfiddle.com/#!9/0bf17/1

如果它们始终相同,但部分数据库或代码引用了程序集 factory_id,您可以重构这些数据库或代码部分以引用 factory_id,然后删除程序集 factory_id。

当做这样的事情时,你应该做一些测试来验证查询和程序在更改后的状态是否与更改前的状态相同。

【讨论】:

非常感谢!这就是我需要的答案!是的,我的意思是列,而不是表:)【参考方案2】:

您可以使用 Alter 语句删除额外的列。

ALTER TABLE table_name DROP COLUMN factory_id;

也可以参考http://docs.oracle.com/cd/E18283_01/server.112/e17118/statements_3001.htm#i2103683 (特别是删除列子句)

编辑: 就连接而言,Alter 语句转储到临时表,然后在不丢失任何连接的情况下重建。请参阅此document

中的存储、性能和并发注意事项部分

【讨论】:

但我应该放下桌子吗?那是我的问题。 :) 因为我建立了一个 1 对 1 的连接,所以它添加了额外的列,如果我去掉“factory_id”会改变什么吗?

以上是关于MySQL中的额外列,我可以删除它吗?的主要内容,如果未能解决你的问题,请参考以下文章

休眠:加入带有额外列的表,从一侧删除子项

我可以暂停 ECS 服务而不是删除它吗?

mysql 5.6:删除显式列整理

如何从 Python 中的数据中删除多余的逗号

GKE 需要 prometheus-to-sd 吗?我可以删除它吗?

当我在 c# 中显示从查询生成的 SQL 时,最后一部分是啥?我可以删除它吗?