2010-04-22 6 views
2

J'essaie d'écrire un script MySQL qui crée plusieurs tables. J'ai:MySQL multi CREATE TABLE aide de syntaxe?

CREATE TABLE `DataBase1`.`tbl_this`(
... 
); 
CREATE TABLE `DataBase1`.`tbl_that`(
... 
); 
... (14 more) ... 

MAIS, seule la première déclaration CREATE TABLE est exécutée. Je n'ai pas d'erreurs de syntaxe. Euh, je manque l'équivalent MSSQL de GO? Qu'est-ce que je fais mal ici? Comment puis-je faire en sorte que ce bébé dirige toutes les tables?

Répondre

3

La syntaxe create table est correcte. L'outil que vous utilisez pour exécuter votre SQL exécute probablement la première instruction.

0

essayez ceci:

utilisez database_name;

créer table a ..; créer la table b ..; créer une table c ..;

+0

Pire. Aucune table n'a été créée du tout. –

+0

Je peux confirmer que cela crée create table A mais pas B ou C – DerpyNerd

0

Les tableaux référencent-ils (par exemple les clés primaires et similaires) les uns les autres? Les tables sont créées en série, donc si votre deuxième table référence une table qui n'est pas encore créée, elle échouera.

4

Comment exécutez-vous ce script?

Si vous essayez de l'exécuter par programme, sachez que l'API MySQL n'exécute qu'une instruction à la fois par défaut. Vous ne pouvez pas les enchaîner avec des points-virgules et vous attendre à ce qu'il exécute toutes les instructions.

Vous pouvez exécuter chaque instruction CREATE TABLE individuellement dans une boucle, ou vous pouvez exécuter un script en l'alimentant comme entrée pour le client de ligne de commande mysql.

Ce n'est pas aussi simple que d'écrire une classe de coureurs de script polyvalente dans votre application, car la syntaxe complète du script inclut de nombreux casse-tête.

Voir les exemples des cas d'angle dans ma réponse à Loading .sql files from within PHP.

+0

C'est exactement le problème, MySQL Query Browser ne traite que la première commande. Je vais marquer @Florian_Gutmann parce qu'il était le premier et pourrait utiliser les points (par rapport à 48K ... jeez! Êtes-vous en compétition avec Skeet?), Dois crochet dans le nouveau poisson avec rep. :) –

+0

LOL! Aucun problème, @Florian était en effet d'abord. Oui, l'interface de requête de MySQL Query Browser est similaire à l'exécution d'une instruction unique depuis le code de l'application, en ce sens qu'elle exécute une instruction. Le navigateur de requêtes devrait également avoir une option de menu "Exécuter le script SQL ..." que vous pouvez utiliser pour exécuter plusieurs instructions à partir d'un fichier. –

+0

Les interfaces de script pour MySQL n'exécutent qu'une commande à la fois. C'est une bonne chose: cela réduit l'impact automatisable des injections SQL. Certains environnements ont une interface avec plusieurs instructions, par exemple. au niveau de l'API C en utilisant 'MYSQL_OPTION_MULTI_STATEMENTS_ON' ou en PHP avec' mysqli_multi_query'. – bobince

0

Comment exécutez-vous votre script? Si vous le faites à partir de la ligne de commande, cela devrait ressembler à ceci:

mysql -u[username] -p[password] --database DataBase1 < scriptname.sql