【问题标题】:Recreating UNI & MUL indexes in MySQL在 MySQL 中重新创建 UNI 和 MUL 索引
【发布时间】:2015-10-16 02:21:08
【问题描述】:

我正在做一个 MySQL 不同,以帮助将我的表从开发更新到生产,但我在索引方面遇到了一点问题。

我正在使用show full columns from table 获取表的索引/键并进行比较,然后构建必要的查询来更新第一个表。

我得到了主键,这是有效的。但是我一直在阅读,我仍然没有完全理解其他两种可能性,MULUNI

我阅读了手册页..

如果 Key 是 PRI,则该列是 PRIMARY KEY 或者是列之一 在多列 PRIMARY KEY 中。

如果 Key 为 UNI,则该列是唯一值索引的第一列 不能包含 NULL 值。

如果 Key 是 MUL,则允许给定值多次出现 列内。该列是非唯一索引的第一列 或可以包含 NULL 值的唯一值索引。

这就是我目前得到的,如果它在某种程度上相关的话。

        if($key1 != $key2){
            if($key1['PRI'] != $key2['PRI']){
                // remove any existing primary keys 
                $results[$table_name][] = "ALTER TABLE $table_name DROP PRIMARY KEY;";
                // add the new primary keys
                $results[$table_name][] = "ALTER TABLE $table_name ADD CONSTRAINT pk_$table_name PRIMARY KEY (".implode(",", $key2['PRI']).")";
            }
            if($key1['MUL'] != $key2['MUL']){
                // what to do here?
            }
            if($key1['UNI'] != $key2['UNI']){
                // what to do here?
            }
        }

我猜我可以为UNI 做这样的事情:ALTER TABLE table ADD CONSTRAINT uc_myKey UNIQUE (indexColumn) ..对吗?

MULtiple 键怎么样?它的语法是什么?

创建MULUNI 类型键的MySQL 语法是什么?

谢谢。

【问题讨论】:

  • 您对 UNI 的看法是正确的,因为它是这样的:alter table blah add constraint pk_something primary key (field1, field2)
  • @JorgeCampos - 谢谢,但这是我用于 PRI 类型键的确切语法。它们是可互换的还是我的主键查询需要调整?

标签: mysql sql database diff


【解决方案1】:

呃……

                    switch($type){
                        case "PRI":
                            $ret[] = $add ?
                                "ALTER TABLE `$tbl` ADD PRIMARY KEY(`$col`);" :
                                "ALTER TABLE `$tbl` DROP PRIMARY KEY;" ;
                            break;
                        case "MUL":
                            $ret[] = $add ?
                                "ALTER TABLE `$tbl` ADD UNIQUE (`$col`);" :
                                "ALTER TABLE `$tbl` DROP INDEX `$col`;" ;
                            break;
                        case "UNI":
                            $ret[] = $add ?
                                "ALTER TABLE `$tbl` ADD INDEX (`$col`);" :
                                "ALTER TABLE `$tbl` DROP INDEX `$col`;" ;
                            break;
                    }

【讨论】:

    猜你喜欢
    • 2016-02-04
    • 2011-07-16
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 2015-08-10
    相关资源
    最近更新 更多