4

selectステートメントの結果に基づいて、MySqlで条件付きテーブルを作成することは可能ですか? 基本的に、複数のクライアントで使用されるスキーマがあり、それらの一部だけがテーブルを必要とする場合、別の値に基づいて作成できます...たとえば...ユーザーJohnがいる場合、このテーブルを作成します...ジョンのアプリはそれを必要とします。

次のようなもの:

IF EXISTS (SELECT * FROM USERS WHERE name='JOHN')

CREATE TABLE CREATE_THIS
   (
        ID VARCHAR(255) COLLATE utf8_bin NOT NULL,
        NAME VARCHAR(255) COLLATE utf8_bin NOT NULL   
    )
    ENGINE=MyISAM DEFAULT CHARSET=utf8;
4

2 に答える 2

4

この種のビジネス ロジックは、実際にはアプリケーションのデータベース層には属しません。通常、データベースへの接続に使用するコード内のより高いレベルに存在します。

ただし、完全を期すために、実行するSQLを含む文字列からステートメントを準備することにより、要求を達成する(非常にハックな)方法があります。

SET @sql := CASE WHEN EXISTS (SELECT * FROM USERS WHERE name='JOHN') THEN
 'CREATE TABLE CREATE_THIS (
    ID VARCHAR(255) COLLATE utf8_bin NOT NULL,
    NAME VARCHAR(255) COLLATE utf8_bin NOT NULL   
  ) ENGINE=MyISAM DEFAULT CHARSET=utf8'
END;

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
于 2013-10-28T23:33:55.140 に答える
2

使用することもできます

    CREATE Table IF NOT EXISTS <Table_Name> ( ....
    ...)
于 2016-07-28T16:53:22.753 に答える