Forum: PC-Programmierung MySql: create table mit create definition CHECK


von Mehmet K. (mkmk)


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?

von Peter II (Gast)


Lesenswert?

mysql ist halt nur ein spielzeug.

http://dev.mysql.com/doc/refman/5.1/de/create-table.html
> Zudem wird die Klausel CHECK von allen Speicher-Engines erkannt, aber
> ignoriert.

von Mehmet K. (mkmk)


Lesenswert?

Diesen Hinweis hatte ich schon gelesen.
Aber es sind dermassen viele Beispiele im Interenet, die dieses Check 
benutzen, dass ich mir dachte, irgendwas müsse ich bei dieser Aussage 
falsch verstanden haben.

von Mehmet K. (mkmk)


Lesenswert?

Peter II schrieb:
> mysql ist halt nur ein spielzeug.
Weshalb ich seit ca. 1/2 Jahr auf PostgreSql umgestiegen bin.

von Mehmet K. (mkmk)


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.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?


von Mehmet K. (mkmk)


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 :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.