MySQL有条件地创建一个表

MySQL有条件地创建一个表,mysql,sql,Mysql,Sql,可以根据select语句的结果在MySql中创建条件表吗?本质上,如果我有一个由多个客户端使用的模式,但只有其中一些客户端需要一个表,我可以基于另一个值创建它…例如…如果我有一个用户John,那么创建这个表…因为John的应用程序需要它 大致如下: IF EXISTS (SELECT * FROM USERS WHERE name='JOHN') CREATE TABLE CREATE_THIS ( ID VARCHAR(255) COLLATE utf8_bin NOT

可以根据select语句的结果在MySql中创建条件表吗?本质上,如果我有一个由多个客户端使用的模式,但只有其中一些客户端需要一个表,我可以基于另一个值创建它…例如…如果我有一个用户John,那么创建这个表…因为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;

这种业务逻辑实际上不属于应用程序的数据库层。它通常位于更高的级别,位于您用来连接数据库的任何代码中

但是,为了完整性,有一种(非常粗俗的)方法可以通过从包含要执行的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;
你也可以使用

如果不存在,则创建表(。。。。
...)

这适用于select解析的情况。但是当@sql为null时,我在prepare语句中得到一个错误。有没有办法对此进行检查?我使用else语句将@sql设置为select,我知道它将返回空。这看起来确实有点老套。我会考虑你的建议,把这个逻辑放到别处。谢谢你的帮助!