2

ユーザー定義変数から取った名前でテーブルを作成したいと思います。次のコードは機能していないようです(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;
4

2 に答える 2

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;
于 2010-07-09T09:00:46.967 に答える
0

ユーザー定義変数から取った名前でテーブルを作成したい

あなたの質問に対する答えではありませんが、これは悪い考えだと思います。トラブルを招きます。

  • テーブル名の特殊文字とエンコーディングを処理する必要があります

  • テーブル名で禁止されている文字を除外する必要があります

  • mySQL はテーブル名を使用してデータ ファイルを作成するため、使用可能な文字の範囲は、基礎となるファイル システムの機能によって異なります。

  • mySQL はシステムごとに異なる方法でテーブルを処理するため、長期的な問題が発生する可能性があります。大文字と小文字の区別は、基盤となるファイル システムによって決定されます (テーブル名は、Linux/Unix では大文字と小文字が区別され、Windows では区別されません)。

私はこれをしません。1 つの巨大なテーブルと、より小さなユーザー テーブルを用意した方がよいでしょう。ユーザーが指定した変数をユーザーテーブルに保持し、すべてのユーザーのすべてのレコードを巨大なテーブルに保持し、「ユーザー」キーで区別します。

于 2010-07-09T09:00:29.590 に答える