Se você deseja uma "saída antecipada" para uma situação em que não houve erro, use a resposta aceita postada por @piotrm. Geralmente, no entanto, você estará pagando devido a uma condição de erro (especialmente em um procedimento SQL).
A partir do MySQL v5.5, você pode lançar uma exceção. Negar manipuladores de exceção, etc., que obterão o mesmo resultado, mas de uma maneira mais limpa e mais comovente.
Aqui está como:
DECLARE CUSTOM_EXCEPTION CONDITION FOR SQLSTATE '45000';
IF <Some Error Condition> THEN
SIGNAL CUSTOM_EXCEPTION
SET MESSAGE_TEXT = 'Your Custom Error Message';
END IF;
Nota SQLSTATE '45000'
equivale a "Condição de exceção definida pelo usuário sem tratamento". Por padrão, isso produzirá um código de erro de 1644
(que tem o mesmo significado). Observe que você pode lançar outros códigos de condição ou de erro, se desejar (além de detalhes adicionais para o tratamento de exceções).
Para mais informações sobre esse assunto, confira:
https://dev.mysql.com/doc/refman/5.5/en/signal.html
Como gerar um erro dentro de uma função MySQL
http://www.databasejournal.com/features/mysql/mysql-error-handling-using-the-signal-and-resignal-statements.html
Termo aditivo
Ao reler este post, percebi que tinha algo a acrescentar. Antes do MySQL v5.5, havia uma maneira de emular lançando uma exceção. Não é exatamente a mesma coisa, mas este era o análogo: crie um erro chamando um procedimento que não existe. Chame o procedimento com um nome que seja significativo para obter um meio útil para determinar qual era o problema. Quando o erro ocorrer, você verá a linha da falha (dependendo do seu contexto de execução).
Por exemplo:
CALL AttemptedToInsertSomethingInvalid;
Observe que quando você cria um procedimento, não há validação executada para essas coisas. Portanto, enquanto em algo como uma linguagem compilada, você nunca poderia chamar uma função que não estava lá, em um script como este simplesmente falhará no tempo de execução, que é exatamente o que é desejado neste caso!
IF tablename IS NOT NULL THEN
...;)