Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL中重新创建UNI和MUL索引_Mysql_Sql_Database_Diff - Fatal编程技术网

在MySQL中重新创建UNI和MUL索引

在MySQL中重新创建UNI和MUL索引,mysql,sql,database,diff,Mysql,Sql,Database,Diff,我正在做一个MySQL,以帮助将我的表从开发版更新到生产版,但我在索引方面遇到了一些问题 我使用ShowFullColumns from table来获取表的索引/键并比较它们,然后构建必要的查询来更新第一个表 我拿到了主键,这就行了。但我一直在阅读,我仍然不完全理解其他两种可能性,MUL和UNI 我看了手册页 如果Key是PRI,则该列是主键或列之一 在多列主键中 如果键是UNI,则该列是唯一值索引的第一列 不能包含空值的 如果Key为MUL,则允许给定值多次出现 在列中。该列是非唯一索引的第

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

我使用ShowFullColumns from table来获取表的索引/键并比较它们,然后构建必要的查询来更新第一个表

我拿到了主键,这就行了。但我一直在阅读,我仍然不完全理解其他两种可能性,MUL和UNI

我看了手册页

如果Key是PRI,则该列是主键或列之一 在多列主键中

如果键是UNI,则该列是唯一值索引的第一列 不能包含空值的

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

这是我目前得到的,如果它有某种关联的话

        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做这样的事情:altertable 添加约束uc_myKey唯一索引列..正确吗

多把钥匙怎么样?它的语法是什么

使用什么样的MySQL语法来创建MUL和UNI类型的密钥

谢谢。

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

关于多个键的UNI,您是对的,它类似于:alter table blah add constraint pk_某物主键字段1,field2@JorgeCampos-谢谢,但这正是我用于PRI类型密钥的语法。它们是可互换的还是我的主键查询需要调整?