我想创建一个名称取自用户定义变量的表。以下代码似乎不起作用(我在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 :(得分: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;
答案 1 :(得分:0)
我想创建一个名称取自用户定义变量的表
不是你问题的答案,但我认为这是一个坏主意。它会引发麻烦的堆。
您必须处理表名中的特殊字符和编码
可用字符的范围取决于底层文件系统的功能,因为mySQL使用表名创建其数据文件
您可能遇到长期问题,因为mySQL在不同系统上对表的处理方式不同。区分大小写由底层文件系统决定(表名在Linux / Unix上区分大小写,在Windows上不敏感)
我不会这样做。我宁愿拥有一张巨大的桌子和一张较小的用户桌子。我将用户指定的变量保存在用户表中,并为巨大的表中的所有用户提供所有记录,并用“用户”键分开。