Hello,
Danke für die sehr hilfreiche Antwort , das ist genau was ich gesucht habe !
Füge zur Spalte nick einen UNIQUE Index hinzu, nun lässt MySQL in der Spalte nick keine doppelten Werte zu.
Anders wäre es auch falsch, weil Du Dir damit eine Race-Condition bauen würdest.
Diese führen dann unweigerlich irgendwann zur Inkonsistenz (ich wollte ebenh schon Inkontinenz schreiben) des Datenbestandes. Es darf ja in Deinem Anwendungsfall keine zwei User mit demselben Nick geben.
Zwischen dem Select für die Kontrolle und dem anschließenden Insert vergeht aber Zeit. In dieser Zeit könnte schon ein anderer Prozess einen Eintrag gemacht haben, sodass Du dann nachher mehrere gleiche Einträge in der Tabelle hättest. Die Kontrolle und das Eintragen müssen daher atomar gebunden werden, also so, dass kein anderer Prozess dazwischen schlüpfen kann. Das geht entweder mit zwei Statements, aber indem man die Tabelle solange sperrt für andere Prozesse, oder aber, wie Vinzenz es vollkommen richtig vorgeschlagen hat, indem man die Kontrollfunktion (Constraint) gleich dem DBMS überträgt, also in der Tabelle vermerkt, dass im Moment des Eintragens geprüft werden muss, ob er zulässig ist.
Durch Abfrage des Results des Insertstatements und/oder des von der Datenbankmaschine gelieferten Statuswertes kann man dann feststellen, ob der Eintragswunsch gültig war, oder abgelehnt wurde.
http://en.wikipedia.org/wiki/Time-of-check-to-time-of-use
http://en.wikipedia.org/wiki/Race_condition
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg