【问题标题】:create table if not exists, insert columns if missing, best way如果不存在则创建表,如果缺少则插入列,最好的方法
【发布时间】:2013-11-11 04:49:48
【问题描述】:

如果表不存在,我需要创建一个表,如果表已经存在,我需要按正确的顺序添加缺失的列。

我知道如何处理大量查询以及 if 语句等,但我在这里要问的是最好的解决方案是什么。也许有一个特殊的查询可以做到这一点,或者一个聪明的方法.

我会这样做:

  • 如果不存在则创建表(所有列都应如此)

  • 比较所有列(如果缺少某些列,则添加,否则不添加)

这是最好的方法还是有更好的方法?


附加信息

需要在正确的位置添加列。我有一个以正确顺序表示所有列的字符串列表。使用 vb.net 我正在遍历这些字符串。

【问题讨论】:

  • 您有需要保留的数据吗?如果没有,请删除所有内容,然后添加它。

标签: mysql multiple-columns create-table


【解决方案1】:

例如查看this。它基本上是关于查询数据字典并仅在它们不存在时才添加列:

IF NOT EXISTS(SELECT NULL
                FROM INFORMATION_SCHEMA.COLUMNS
               WHERE table_name = 'tablename'
                 AND table_schema = 'db_name'
                 AND column_name = 'columnname') THEN

  ALTER TABLE `TableName` ADD `ColumnName` int(1) NOT NULL default '0';

END IF;

把它放在一个过程中会很方便。

p.s.关于列位置的注释:来自the docs

要在表格行中的特定位置添加列,请使用 FIRST 或在 col_name 之后。默认是最后添加列。你也可以 在 CHANGE 或 MODIFY 操作中使用 FIRST 和 AFTER 对列进行重新排序 在一个表中。

【讨论】:

  • 谢谢!这是否也将列添加到正确的位置?我的意思是,我有一个代表 vb.net 中列的字符串列表,并且需要以相同的顺序添加它们。所以可能是表格中间的一列丢失了..
  • 让我这样说:它可以! ;) 如果您按列的顺序调用您的AddCol(...) 过程 - 那么“是”。但是,如果您需要在其间插入一列,则必须使用AFTER 添加位置。查看文档了解详情:dev.mysql.com/doc/refman/5.1/en/alter-table.html
【解决方案2】:

您可以使用以下代码:

if not exists(select * from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'table_name' and COLUMN_NAME = 'column_name')

BEGIN
    ALTER TABLE table_name ADD
    ToUser uniqueidentifier NULL

END

【讨论】:

    猜你喜欢
    • 2021-04-01
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多