2015-10-16 82 views
0

我正在做一個MySQL不同,以幫助更新我的表從開發到生產,但我在索引有點麻煩。重新創建MySQL中的UNI和MUL索引

我正在使用show full columns from table獲取表的索引/鍵並比較它們,然後構建必要的查詢以更新第一個表。

我得到主鍵,這是工作。但我一直在閱讀,但我仍然不完全瞭解其他兩種可能性,MULUNI

我閱讀man page ..

如果主要是PRI,列是一個主鍵或者是一個多列主鍵的列 之一。

如果鍵是UNI,則該列是唯一值索引 中不能包含NULL值的第一列。

如果鍵爲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語法?

謝謝。

+0

你說得對有關UNI的多個密鑰是這樣的:'改變表格等等添加約束pk_something主鍵(FIELD1,FIELD2)' –

+0

@JorgeCampos - 謝謝你,但這是我用於'PRI'類型鍵的確切語法。它們是可互換的還是我的主鍵查詢需要調整? –

回答

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