Wenn Sie eine "vorzeitige Beendigung" für eine Situation wünschen, in der kein Fehler aufgetreten ist, verwenden Sie die akzeptierte Antwort von @piotrm. In der Regel werden Sie jedoch aufgrund einer Fehlerbedingung (insbesondere in einer SQL-Prozedur) gerettet.
Ab MySQL v5.5 können Sie eine Ausnahme auslösen. Negieren von Ausnahmebehandlungsroutinen usw., die das gleiche Ergebnis erzielen, jedoch sauberer und ergreifender.
Hier ist wie:
DECLARE CUSTOM_EXCEPTION CONDITION FOR SQLSTATE '45000';
IF <Some Error Condition> THEN
SIGNAL CUSTOM_EXCEPTION
SET MESSAGE_TEXT = 'Your Custom Error Message';
END IF;
Hinweis SQLSTATE '45000'
entspricht "Nicht behandelte benutzerdefinierte Ausnahmebedingung". Standardmäßig wird ein Fehlercode von erzeugt1644
(der dieselbe Bedeutung hat) erzeugt. Beachten Sie, dass Sie bei Bedarf andere Bedingungscodes oder Fehlercodes auslösen können (plus zusätzliche Details für die Ausnahmebehandlung).
Weitere Informationen zu diesem Thema finden Sie unter:
https://dev.mysql.com/doc/refman/5.5/en/signal.html
So lösen Sie einen Fehler in einer MySQL-Funktion aus
http://www.databasejournal.com/features/mysql/mysql-error-handling-using-the-signal-and-resignal-statements.html
Nachtrag
Als ich meinen Beitrag noch einmal las, wurde mir klar, dass ich noch etwas hinzufügen musste. Vor MySQL v5.5 gab es eine Möglichkeit, das Auslösen einer Ausnahme zu emulieren. Es ist nicht genau dasselbe, aber dies war das Analoge: Erstellen Sie einen Fehler, indem Sie eine Prozedur aufrufen, die nicht existiert. Rufen Sie die Prozedur unter einem aussagekräftigen Namen auf, um ein nützliches Mittel zu erhalten, mit dem Sie das Problem ermitteln können. Wenn der Fehler auftritt, wird die Fehlerzeile angezeigt (abhängig von Ihrem Ausführungskontext).
Beispielsweise:
CALL AttemptedToInsertSomethingInvalid;
Beachten Sie, dass beim Erstellen einer Prozedur keine Validierung für solche Dinge durchgeführt wird. Während Sie in so etwas wie einer kompilierten Sprache niemals eine Funktion aufrufen könnten, die nicht vorhanden war, schlägt sie in einem Skript wie diesem einfach zur Laufzeit fehl, was genau das ist, was in diesem Fall gewünscht wird!
IF tablename IS NOT NULL THEN
...;)