2009-10-30 4 views
2

데이터베이스 테이블에 일부 열거 형 옵션을 추가해야합니다. 문제는 여러 개의 테이블 & 데이터베이스에 대해이 작업을 수행해야하며 모든 열거 형 데이터 형식이 같지 않을 수 있습니다. 거기에 왜 alter table 쿼리 또는 비슷한 옵션을 열거 형 데이터 형식에 추가 쓸 수 있습니까?MySQL이 Enum에 필드 추가

MySQL에서이 작업을 수행 할 방법이 없다면 PHP 스크립트로 어떻게이 문제에 접근하겠습니까?

+0

여러 테이블에서 동일한 ENUM 값을 사용하는 경우 이러한 값으로 테이블을 만들고 열거 형 이름을 참조하는 데 외래 키를 사용하는 것이 좋습니다. ENUM을 단일 위치에서 유지 관리 할 수 ​​있습니다. 이 솔루션은 진정으로 상황이 좋기 때문에, "내가해야할 일"이라고 말하기 전에 무엇을 성취하려고하는지, 열거 형인지에 대해 더 많이 듣고 싶습니다. –

+0

주로 여러 데이터베이스 때문에. 그것들은 모두 CMS의 인스턴스이지만 일부는 사용자 지정 추가 기능을 가지고 있으며 일부는 그렇지 않으므로 모든 기능에 대해 담요 변경 명령문을 사용할 수는 없습니다. 또한 이러한 값을 별도의 테이블에 저장하면 얻을 수있는 이점을 알 수 있지만 변경해야 할 코드의 양 때문에 실제로는 옵션이 아닙니다. – GSto

답변

2

열거 형 값을 추가하는 쉬운 방법은 없습니다.

이 추하고 안된,하지만 난 당신에게 아이디어를 줄 것이다 생각 :

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

당신은 아마이 저장 프로 시저와 "순수하게 MySQL의에서",하지만 더의 I는 포장 할 수있는 것보다 할 수있는 내 두뇌가 지금 주변에있다. :)

+0

'$ table'와 같은 열을 표시하십시오. '$ field'와 같이 좋습니다. – Crusader