Задать имена таблиц с помощью пользовательских переменных в хранимых процедурах MySQL - PullRequest
2 голосов
/ 09 июля 2010

Я хочу создать таблицу с именем, взятым из определенной пользователем переменной. Следующий код, кажется, не работает (я получаю синтаксическую ошибку MYSQL около строки CREATE TABLE)

Заранее спасибо за помощь

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;

Ответы [ 2 ]

4 голосов
/ 09 июля 2010
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 голосов
/ 09 июля 2010

Я хочу создать таблицу с именем, взятым из пользовательской переменной

Не ответ на ваш вопрос, но я думаю, что это плохая идея. Это вызывает куч неприятностей.

  • Вам придется иметь дело со специальными символами и кодировками в названии таблицы

  • Вам придется отфильтровать символов, запрещенных в имени таблицы

  • Диапазон используемых символов будет зависеть от возможностей базовой файловой системы, поскольку mySQL создает свои файлы данных, используя имя таблицы

  • Вы можете столкнуться с долговременными проблемами, поскольку mySQL по-разному обрабатывает таблицы в разных системах. Чувствительность к регистру определяется базовой файловой системой (имена таблиц чувствительны к регистру в Linux / Unix, нечувствительны к Windows)

Я бы не стал этого делать. Я бы предпочел иметь одну огромную таблицу и меньшую пользовательскую таблицу. Я бы оставил указанную пользователем переменную в пользовательской таблице и имел бы все записи для всех пользователей в огромной таблице, разделенные ключом «пользователь».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...