MySQL bir Enum alan ekleyebilirsiniz

1 Cevap php

Ben bir veritabanı tablosuna bazı numaralandırma seçenekleri eklemek gerekir. Sorun olmaktan, ben birkaç tablo için bunu yapmak zorunda ve olacaktır veritabanları, ve hepsi aynı enum veri türüne sahip olmayabilir. Var mı bir neden bir alter tablo sorgu veya enum veri türüne seçenekleri eklemek için benzer bir şey yazmak için?

MySQL sadece bunu yapmak için hiçbir yolu varsa, nasıl bir PHP komut dosyası ile bu sorunu yaklaşım?

1 Cevap

enum değerlerini eklemek için kolay bir yolu yoktur.

Bu çirkin ve denenmemiş, ama ben size bir fikir verecektir düşünüyorum:

<?php

$sql = "select table_schema
             , table_name
             , column_name
             , column_type
             , is_nullable
             , column_default
          from information_schema
         where data_type = 'enum'";

$res = mysql_query($sql);

while ($row = mysql_fetch_assoc($res)) {

  // these are important -->       leading comma --v      close paren --v
  $new_enum = substr($row['column_type', 0, -1) . ",'new','enums','here')"

  $sql = "alter table `{$row['table_schema']}`.`{$row['table_name']}`";
  $sql .= " modify column `{$row['column_name']}`";
  $sql .= " $new_enum";
  $sql .= ($row['is_nullable'] == 'YES') ? " NULL" : " NOT NULL";
  $sql .= " default $row['column_default']";

  mysql_query($sql);
}

muhtemelen bir saklı yordam ile "mysql tamamen" bu yapabileceğini, ama ben şu anda beynimi sarın daha o daha bulunuyor. :)