3

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

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

我也试过没有`

尝试 EdmundG 的解决方案

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=****;' ;

没用,还是说格式不正确

4

5 回答 5

6

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

但是,您可以使用这些变量构建一个字符串,然后将其作为动态 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 PREPARE stmt;
于 2009-08-29T05:20:20.483 回答
0

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

于 2009-08-28T19:33:30.553 回答
0

好的第三次尝试。

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

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

  2. 您需要在运行使用这些变量的 SQL 之前定义变量并执行。

http://www.connectionstrings.com/mysql

于 2009-08-13T18:23:06.683 回答
0

尝试这个

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 =****';
于 2009-08-29T02:23:16.493 回答
0

如果您使用的是 MySQL 5+,您可以尝试将其放在存储函数中,然后运行该函数吗?

于 2009-08-25T14:27:18.227 回答