【问题标题】:Conditionally add a column to a mysql table有条件地向mysql表中添加一列
【发布时间】:2013-04-25 16:54:47
【问题描述】:

我有一个项目,我希望能够在几个人的本地主机上管理同一数据库的多个实例。我希望每个开发人员都能够将他们的数据库重置回规范来源,无论他们的数据库进入什么状态。为此,我维护了一个标准的数据库文件。它使用CREATE TABLE table_name IF NOT EXISTS { 保存模式

但是,我希望能够在项目进行时根据需要添加到起始表结构中。为此,我希望能够执行以下ALTER TABLE table_name ADD COLUMN IF NOT EXISTS column_name 之类的操作,但这似乎不存在。我确实注意到互联网上浮动的存储过程解决了这个问题,但我想知道更简单的东西是否能够实现我的目标。感谢您的时间和帮助。

【问题讨论】:

标签: mysql database-design alter-table


【解决方案1】:

用普通的 SQL 是不可能的。存储过程应该工作得最好:读取 information_schema 并检查该列是否存在。如果不是 - 执行 alter 语句。

【讨论】:

  • @Max_dron 这似乎是答案。我希望有一个非 SP 解决方案,但你并不总能得到你想要的。
【解决方案2】:

一种选择是执行您的 ALTER 语句而不检查任何内容:

ALTER TABLE table_name ADD column_name VARCHAR(40);

(将VARCHAR(40)更改为您需要的任何内容)

如果该列不存在,则语句创建它。
如果该列已存在,则该语句不执行任何操作并返回错误。忽略错误并继续。

【讨论】:

  • 问题是,该语法不存在。也有充分的理由:想象自己添加了一个 int 类型的列,而 db 忽略了你的语句,因为已经有一个列,例如键入日期。 :-)
  • @Denis 感谢您指出我的错误。我知道语法错误,但完全忘记将其更改为有效语句。我更新了我的答案。
  • @Jocelyn 我打算忽略错误,但我觉得这是不好的做法,我不想养成忽略错误的习惯。我正在部署它以允许不是 DBA 的人尽可能无缝地使用数据库,而错误会破坏该流程。
  • 我通常不喜欢我的查询导致错误......但这里是一个特殊情况,我觉得可以例外。或者使用我在问题上方发布的链接中描述的方法。
猜你喜欢
  • 2020-03-18
  • 2021-11-20
  • 2016-04-26
  • 2016-10-01
  • 1970-01-01
  • 2014-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多