MySql: create table mit create definition CHECK

OP #2758837
Servus allerseits

(MySql Vers. 5.5.24)
Ich möchte sicherstellen, dass eine bestimmte Spalte nie den Wert 0 
haben darf.
Dazu habe ich eine Test-Table erstellt:
1
Create Table xtest
2
( idnr int NOT NULL check (idnr > 0)
3
)
Bitte keinen Hinweis darauf, dass man ja hier ein auto increment 
verwenden könnte :)

Die Table wurde problemlos erstellt. Und genauso problemlos konnte ich 
eine 0 einfügen.
Dann habe ich es mit
1
Alter Table xtest Add  check (idnr > 0)
versucht. Auch das wurde problemlos akzeptiert, genauso wie die 
folgenden inserts mit dem 0.
------
Nun arbeite ich mit den Triggers BEFORE INSERT und BEFORE UPDATE und 
erzeuge bei einem 0 Wert mit
1
signal sqlstate ...
einen Fehler. Funktioniert wunderbar.

Nur: wiese funktioniert dieses Check nicht?
OP #2759243
Hmmm, "signal" scheint erst ab 5.5 unterstützt zu werden.
Bei einem meiner Kunden ist 5.1 installiert und prompt wurde die Syntax 
bemaengelt.
Irgendeine Idee, was ich machen könnte?
Mir kommt nur die Idee, eine nicht vorhande Prozedur aufzurfen. Also
1
if new.idnr = 0 then
2
  Call Das_Einfugen_von_0_is_nicht_erlaubt;
3
end if;
Aber auch nicht so das Gelbe vom Ei.
OP #2759770
Diese Seite und die darin erwaehnte Seite von brokenbuild.com waren mir 
bekannt, ohne dass ich bis anhin den dortigen Empfehlungen nachgegangen 
waere.
Just for fun habe ich also die dortigen Empfehlungen ausprobiert.

Mit dem Beispiel von brokenbuild konnte ich nach Herzenslust 0 einfügen.
Das Trigger Beispiel von Stackoverflow habe ich nicht verstanden und 
auch der Versuch es als Trigger zu implementieren führte zu einem Syntax 
Fehler.

Also meine Idee mit dem CALL scheint mir bis anhin die beste Lösung zu 
sein, da ich damit immerhin eine aussagekraeftige Fehlermeldung 
ausgeworfen bekomme.

Aber die allerbeste Idee war von MySql auf PostgreSql umzusteigen :)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.