2010-07-09 241 views
2

我想创建一个名称取自用户定义变量的表。下面的代码似乎并不工作(我得到一个MYSQL语法错误附近CREATE TABLE线)在MySQL存储过程中使用用户定义的变量设置表名

在此先感谢您的帮助

SET @ratingsNewTableName = CONCAT('ratings_', 'anotherString'); 

CREATE TABLE IF NOT EXISTS @ratingsNewTableName (
    `id` INT(11) NOT NULL AUTO_INCREMENT, 
    `user_id` INT(11) NOT NULL, 
    `movie_id` INT(11) NOT NULL, 
    `rate` DOUBLE NOT NULL, 
    `date` DATE NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; 

回答

0

我想创建一个表名服用从用户定义变量

不是你的问题的答案,但我认为这是一个坏主意。它邀请的麻烦。

  • 你必须应对的表名特殊字符和编码

  • 你必须过滤掉characters forbidden in a table name

  • 的可用字符的范围将取决于能力因为mySQL使用表名创建其数据文件

  • 您可能会遇到长期的麻烦,因为mySQL在不同的differe上处理表nt系统。区分大小写由底层文件系统决定(表名在Linux/Unix上区分大小写,在Windows上不敏感)

我不会这样做。我宁愿有一个巨大的桌子和一个较小的用户桌子。我会将用户指定的变量保存在用户表中,并为大表中的所有用户记录所有记录,并以“用户”键分隔。

4
SET @sql := CONCAT('CREATE TABLE IF NOT EXISTS ', @tableName,'(id INT(11) NOT NULL AUTO_INCREMENT, user_id INT(11) NOT NULL, movie_id INT(11) NOT NULL, rate DOUBLE NOT NULL, date DATE NOT NULL, PRIMARY KEY (id)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1'); 
PREPARE mySt FROM @sql; 
EXECUTE mySt; 
+0

这可能很明显,但只要确保首先定义'@ tableName'即可。 :-) – Mike 2010-07-09 09:08:13

相关问题