我做MySQL不同,帮助我将表格从开发更新为生产,但我对索引有点麻烦。
我使用show full columns from table
获取表的索引/键并进行比较,然后构建必要的查询以更新第一个表。
我得到了主键,它正在工作。但我一直在阅读,我仍然不完全理解其他两种可能性,MUL
和UNI
。
我阅读了手册页..
如果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键怎么样?它的语法是什么?
创建MUL
和UNI
类型密钥的MySQL语法是什么?
谢谢。
答案 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;
}