2 Stimmen

Tabellennamen mit benutzerdefinierten Variablen in MySQL gespeicherten Prozeduren festlegen

Ich möchte eine Tabelle mit einem Namen erstellen, der aus einer benutzerdefinierten Variablen stammt. Der folgende Code scheint nicht zu funktionieren (ich bekomme einen MYSQL-Syntaxfehler in der Nähe der CREATE TABLE Zeile)

Vielen Dank im Voraus für die Hilfe

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;

4voto

Naktibalda Punkte 13072
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;

0voto

Pekka Punkte 429407

Ich möchte eine Tabelle mit einem Namen erstellen, der aus einer benutzerdefinierten Variablen stammt

Keine Antwort auf deine Frage, aber ich denke, das ist eine schlechte Idee. Es lädt zu viel Ärger ein.

  • Sie müssen mit Sonderzeichen und Encodings im Tabellennamen umgehen

  • Sie müssen verbotene Zeichen in einem Tabellennamen herausfiltern

  • Der Bereich der verwendbaren Zeichen hängt von den Fähigkeiten des zugrunde liegenden Dateisystems ab, da mySQL seine Datendateien unter Verwendung des Tabellennamens erstellt

  • Sie könnten langfristige Probleme haben, da mySQL Tabellen auf verschiedenen Systemen unterschiedlich behandelt. Die Groß-/Kleinschreibung wird durch das zugrunde liegende Dateisystem vorgegeben (Tabellennamen sind auf Linux/Unix case-sensitive, auf Windows case-insensitive)

Ich würde das nicht machen. Ich würde viel lieber eine riesige Tabelle und eine kleinere Benutzertabelle haben. Ich würde die vom Benutzer angegebene Variable in der Benutzertabelle behalten und alle Datensätze für alle Benutzer in der riesigen Tabelle haben, die durch einen "Benutzer"-Schlüssel unterschieden werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X