'ADD CONSTRAINT CHECK ( ... )' schlägt fehl

  • Guten Abend,


    ich versuche derzeit einen check constraint zu einer Spalte einer Tabelle hinzufügen. Ich hab dabei verschiedene Syntax Varianten versucht.

    Die Spalte sollte ungefähr so aussehen:


    Code
    established TINYINT(1) DEFAULT NULL CHECK (established IS NULL OR established = 1)

    Leider bekomme ich beim installieren immer wieder Fehler, selbst wenn ich den constraint getrennt hinzufüge:

    Code
    established TINYINT(1) DEFAULT NULL,
    
    und
    
    ALTER TABLE wcf1_test ADD CONSTRAINT establishedStatusValues CHECK ( established IS NULL OR established = 1 );


    Ich verstehe nicht was an beiden Methoden falsch sein sollte.


    Ich freue mich über jede Hilfe.

  • Bei der zweiten Variante kommt:

    Code
    Cannot add column 'CONSTRAINT' to table 'wcf1_test'.

    Bei der ersten Variante kommt der Parser damit nicht klar und versucht das 'is' zu einer eigenen Spalte zu packen.


    Grundsätzlich ist der Fehler hier aber nicht hilfreich/notwendig, da ich allgemein gerne wissen würde wie man einen CHECK CONSTRAINT zu einer Tabelle (in Woltlab) hinzufügt.

    Edited once, last by Hydrofin ().

  • Sehe ich es richtig, dass der Parser des WSC keine Constraints unterstützt, unter Anderem während eines ALTER TABLE? Falls ich das richtig sehe, wird es dir wohl nicht möglich sein, solange der Parser nicht um diese Funktionalität erweitert wird, mit den Boardmitteln einen CONSTRAINT zu erstellen.


    Gruß

    ilou


    EDIT: Auch ein CREATE-Statement scheint nicht mit CONSTRAINTS arbeiten zu können, wenn ich den ganzen RegEx-Kram richtig interpretiere: https://github.com/WoltLab/WCF…Parser.class.php#L61-L113

    • Official Post

    Hallo,


    ilou So weit korrekt. Allerdings auch keine relevante Einschränkung, MySQL unterstützt erst seit MySQL 8.0.16 die Verwendung von CHECK constraints.