重建UNI& MySQL

时间:2015-10-16 02:21:08

标签: mysql sql database diff

我做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) ..这是正确的吗?

MUL tiple键怎么样?它的语法是什么?

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

谢谢。

1 个答案:

答案 0 :(得分:0)

...咄

                    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;
                    }