代码之家  ›  专栏  ›  技术社区  ›  Justin Giboney

CREATE语句中的变量

  •  3
  • Justin Giboney  · 技术社区  · 15 年前

    我试图在数据库设置的创建脚本中使用一些变量。我不太清楚如何使用它们。请解释如何正确格式化我的代码。下面是我尝试的代码,以及得到的错误:

    SET @username = 'xxxx'; -- store number goes here
    SET @password = 'xxxxxx'; -- store password goes here
    
    CREATE TABLE IF NOT EXISTS `my_table` (
    `id` int(11) auto_increment,
    `release_date` datetime,
    `front_image_file` varchar(255),
    PRIMARY KEY  (`id`)
    ) ENGINE=FEDERATED  
    DEFAULT CHARSET=latin1 
    AUTO_INCREMENT=1 
    CONNECTION='mysql://`@username`:`@password`@host_name:3306/database_name/table_tame' ;
    

    错误

    #1432 - Can't create federated table. The data source connection string 'mysql://`@username`:`@password`@host_name:3306/databa' is not in the correct format
    

    我也试过没有`

    尝试埃德蒙的解决方案

    SET @username = 'xxxx'; -- store number goes here
    SET @password = 'xxxxxx'; -- store password goes here
    
    CREATE TABLE IF NOT EXISTS `my_table` (
    `id` int(11) auto_increment,
    `release_date` datetime,
    `front_image_file` varchar(255),
    PRIMARY KEY  (`id`)
    ) ENGINE=FEDERATED  
    DEFAULT CHARSET=latin1 
    AUTO_INCREMENT=1 
    CONNECTION='Uid=@username; Pwd=@password; Server=****; Port=3306; Database =****; Table=****;' ;
    

    没用,还是说格式不对

    5 回复  |  直到 7 年前
        1
  •  5
  •   Bill Karwin    15 年前

    mysql不支持直接将变量插入到这样的语法中。

    但是,您可以用这些变量构建一个字符串,然后将其准备并执行为 dynamic SQL .

    SET @username = 'xxxx'; -- store number goes here
    SET @password = 'xxxxxx'; -- store password goes here
    
    SET @sql = CONCAT('CREATE TABLE IF NOT EXISTS `my_table` (',
        '  `id` int(11) auto_increment,',
        '  `release_date` datetime,',
        '  `front_image_file` varchar(255),',
        '  PRIMARY KEY  (`id`)',
        ') ENGINE=FEDERATED',
        ' DEFAULT CHARSET=latin1', 
        ' AUTO_INCREMENT=1', 
        ' CONNECTION=''mysql://', @username, ':', @password, 
        '@host_name:3306/database_name/table_tame');
    
    PREPARE stmt FROM @sql;
    
    EXECUTE stmt;
    
    DEALLOCATE stmt;
    
        2
  •  0
  •   Ed Greaves    15 年前

    好的,再试一次。

    我可以看到两个可能的问题。

    1. 你有正确的引号而不是 SQL中的通用单引号。

    2. 你需要定义变量 在运行sql之前执行 使用这些变量。

    http://www.connectionstrings.com/mysql

        3
  •  0
  •   Evernoob    15 年前

    如果你使用的是mysql 5+,你能试着把它放在一个存储的函数中,然后运行这个函数吗?

        4
  •  0
  •   longneck    15 年前

    你不能这样做。mysql不解析变量的ddl语句。

        5
  •  0
  •   C B dkretz    7 年前

    试试这个

    set@username='xxxx';--此处显示商店编号

    set@password='xxxxxx';--此处显示存储密码

    CREATE TABLE IF NOT EXISTS my_table (
    id int(11) AUTO_INCREMENT,
    release_date datetime,
    front_image_file varchar(255),
    PRIMARY KEY  (id))
    ENGINE=FEDERATED
    DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 CONNECTION='Uid='+@username'; Pwd='+@password+'; Server=****; Port=3306; Database =****';