sql >> データベース >  >> RDS >> Mysql

MySQLでのENUM変数タイプの作成

    いいえ。MySQLはCREATE DOMAINをサポートしていません またはCREATE TYPE たとえば、PostgreSQL します

    おそらく、すべての名前をもう一度入力する必要があります。コピーアンドペーストまたはSQLスクリプトを使用することで、これを行うために必要な作業を軽減できます。

    INFORMATION_SCHEMAを使用することもできます テーブルを使用してENUM定義のテキストを取得し、それを新しいCREATE TABLEに補間します。 ステートメント。

    CREATE TABLE ASを使用することもできます タイプ定義をコピーするための創造的な方法で。これがデモンストレーションです:

    CREATE TABLE foo ( f ENUM('abc', 'xyz') );
    CREATE TABLE bar AS SELECT f AS b FROM foo;
    SHOW CREATE TABLE bar;
    

    出力:

    CREATE TABLE `bar` (
      `b` enum('abc','xyz') default NULL
    ) 
    

    最後に、ENUMに多くの値が含まれている場合(入力を避けるための解決策を探しているので、これは正しいと思います)、おそらくENUMデータ型の代わりにルックアップテーブルを使用する必要があります。

    @bliakoからのコメントを再確認してください:

    あなたはこのようにあなたが説明することをすることができます:

    CREATE TABLE bar (pop INT NOT NULL, name VARCHAR(100))
    AS SELECT 0 AS pop, NULL AS name, f FROM foo;
    

    MySQL 5.7.27でこれを試しましたが、機能しました。

    CREATETABLE行で3つの列すべてを宣言する必要がないことに注意してください。 3番目の列f 自動的に追加されます。

    SELECTで列エイリアスを指定しなければならなかったことも興味深いです 列名がCREATE TABLEで宣言されたものと一致することを確認するステートメント 。そうしないと、列名が一致しない場合、余分な列ができてしまい、それらのデータ型は期待したものとは異なります。

    create table bar (pop int not null, name varchar(100)) 
    as select 0 as c1, null as c2, f from foo;
    
    show create table bar\G
    
    CREATE TABLE `bar` (
      `pop` int(11) NOT NULL,
      `name` varchar(100) DEFAULT NULL,
      `c1` binary(0) DEFAULT NULL,
      `c2` binary(0) DEFAULT NULL,
      `f` enum('abc','xyz') DEFAULT NULL
    )
    


    1. MySQLをOSX10.7Lionで動作させる

    2. MaxScaleのフェイルオーバーメカニズムの使用方法

    3. 現在のパスワードがわからない場合のMySQLルートパスワードのリセット

    4. Python 3.7、MySqlのホイールの構築に失敗しました-Python