MySQL: Zwei Statements nacheinander funktionieren nicht ("You have an error in your SQL syntax")

  • SQL

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Marcus Gräfe.

    MySQL: Zwei Statements nacheinander funktionieren nicht ("You have an error in your SQL syntax")

    Ich verstehe gerade folgendes Problem nicht.

    Geht:

    SQL-Abfrage

    1. ALTER TABLE x DROP FOREIGN KEY x;

    Geht auch:

    SQL-Abfrage

    1. ALTER TABLE a DROP b;

    Geht nicht:

    SQL-Abfrage

    1. ALTER TABLE x DROP FOREIGN KEY x;
    2. ALTER TABLE a DROP b;


    Warum?
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Hallo

    Sowas hatte ich auch mal. Was ich im Kopf habe ist dies innerhalb der selben Transaction nicht möglich da eine Schemaänderung stattfindet ein "Schema Modification lock" auf die Tabelle ​sys.sysschobjs für diese Transaction gesetzt wird.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Klingt zwar plausibel, aber schon die Syntaxprüfung schlägt fehl. Also auch bei Online-Syntaxprüfern, die garantiert nichts an einer Datenbank verändern.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Hallo,

    das hattest du ja leider nicht geschrieben. "Geht" und "Geht nicht" sind leider keine vernünftigen Fehlerbeschreibungen.

    SQL-Abfrage

    1. BEGIN TRANSACTION
    2. ALTER TABLE x DROP FOREIGN KEY x;
    3. ALTER TABLE a DROP b;
    4. COMMIT;


    Das sollte zwar durchgehen aber sollte nicht ausgeführt werden können, zumindest sollte im Grunde eine Fehlermeldung beim Ausführen auftauchen.
    Aber es ist ja sowieso egal, du kannst beide "DROP" eh nicht innerhalb EINER Transaktion ausführen. (Zumindest nicht mit den Default Einstellungen des SQL-Server soweit ich das noch im Kopf habe.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Nofear23m schrieb:

    "Geht" und "Geht nicht" sind leider keine vernünftigen Fehlerbeschreibungen

    Wohl wahr. Wobei die Fehlermeldung quasi im Betreff stand. Allerdings stelle ich gerade fest, dass das Problem völlig anders liegt:

    Sämtliche SQL-Syntaxprüfer können nicht mehrere Zeilen analysieren. Also alles nach dem 1. Semikolon wird als Fehler angemerkt. Hat also wohl doch nichts mit meinen Befehlen zu tun.

    Gibt es also keine Möglichkeit, den SQL-Syntax irgendwie zu überprüfen? Die einzige andere Methode wäre wohl, immer eine Transaktion zu starten und dadurch hat man bei einem Fehler noch nichts geschrieben. Kommt mir aber unsauber vor. Vor allem weiß ich nicht, ob alle Befehle in so einer Transaktion klappen. Ich habe da vom Neuanlegen einer Tabelle übers Hinzufügen von Feldern und Constraints bis zum Löschen von allem möglichen quasi alles drin.

    Hintergrund: Ich aktualisiere eine Datenbank und schreibe mir alle SQL-Befehle auf, die ich dann in einer anderen Installation ausführen möchte. Vorher wollte ich die Befehle wenigstens syntaktisch prüfen. Kann ja sein, dass ich was falsch kopiert habe.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Ich prüfe immer mit dem SQL Management Studio, das kann aber auch nur prüfen wenn eine Verbindung zur DB besteht da das DB Schema ja bekannt sein muss. Immerhin hat man dann auch direkt Intellisense und der gleichen.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Für eine reine Syntaxprüfung ist ja streng genommen keine Verbindung notwendig. Aber es scheint wirklich keine Möglichkeit zu geben. Schade.

    EDIT: @petaod MySQL, siehe Betreff.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Haha, da sind Petaod und ich gleich. Da meißt die Threadtitel so schlecht gewählt sind schaun wir garnicht mehr drauf. Sollte ich mir abgewöhnen.

    Ja, dann fällt das ManagementStudio eh raus. MySql kann ich keine gute Aussage tätigen. Leider.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Vorweg, also ich bin bei Weitem kein Experte...
    Ich schaue öfter mal in verschiedene Datenbanksysteme und musste bisher feststellen, dass vor allem MySql die wildesten Probleme haben kann.
    Und zugleich manche Probleme ignoriert, die andere Datenbanken einem mitteilen würden.
    Gerade auch die MySql-Fehlermeldungen sagen nie was über den Fehler aus. Computer sagt nein, mehr gibts da nicht.

    Wenn ich nicht gerade die simpelsten Dinge tue, dann baue ich vorher immer einen Test auf MSSQL, weil wie gesagt es gibt Dinge, die kriegt man bei MySql nicht raus.
    An sich will ich MySql auch nicht schlecht reden, aber definitiv mit mehr Vorsicht zu bedienen

    Ich kanns gerade nicht testen, aber hast du schon probiert ob MySQL vielleicht generell bei mehr als einer Anweisung in die Knie geht?

    Haudruferzappeltnoch schrieb:

    hast du schon probiert ob MySQL vielleicht generell bei mehr als einer Anweisung in die Knie geht?

    Ja, und das geht selbstverständlich. Man kann eine komplette Datenbank mit nur einem Skript anlegen.

    Aber ich habe nun eine Lösung für mich gefunden. Ist nicht perfekt, aber phpMyAdmin meldet zumindest fehlende Semikolons und nicht geschlossene Anführungszeichen. Für mich erst mal ausreichend.

    Trotzdem danke für eure Tipps!
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum