Vai um teste simples, mas que poderia ser usado para evitar erros, é melhor prevenir do que remediar, sai mais barato. Fazer um teste de validação é coisa simples. Um registro ainda não é bom, agora imaginem mil registros. Imaginem buscar na nuvem por um endereço de um CEP em branco, invalido, isso é só um exemplo. Se eu posso tratar logo na entrada então vou deixar o erro acontecer para tratar depois. Tempo de processamento é muito caro e perda de tempo também. Quando é um erro imprevisível ainda pode ser tolerado e tratado. Muitas vezes quando o pessoal pedem alguma coisa é pra ontem dizem. Muita gente prefere empurar para frente para depois tratar o erro.
DELIMITER //
CREATE PROCEDURE sp_inserir_aluguel_seguro(IN p_cliente_id INT, IN p_carro_id INT)
BEGIN
-- 1. Verifica se o cliente existe
IF EXISTS (SELECT 1 FROM clientes WHERE id = p_cliente_id) THEN
-- 2. Se existir, realiza o insert
INSERT INTO alugueis (cliente_id, carro_id, data_aluguel)
VALUES (p_cliente_id, p_carro_id, NOW());
SELECT 'Sucesso: Cliente encontrado. Aluguel registado!' AS Mensagem;
ELSE
-- 3. Se não existir, exibe a mensagem de erro
SELECT CONCAT('Erro: O cliente_id ', p_cliente_id, ' não existe na base de dados.') AS Mensagem;
END IF;
END //
DELIMITER ;