MySql: create table mit create definition CHECK

#2758837
Lesenswert?

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?
#2759243
Lesenswert?

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.
#2759770
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren