2012-08-01 66 views
4

在MySQL中,如何創建此錯誤消息自定義消息:創建自定義錯誤消息的MySQL

不能刪除或更新父行:外鍵約束失敗 (databasejenis_fasum,約束jenis_fasum_ibfk_1 FOREIGN KEY (id_kategori)參考kategori_fasumid_kategori))

使用觸發器可能?有人可以提供一個例子嗎?

感謝您的幫助

回答

1

我不認爲它可以在TRIGGER來完成,但是它可以在MySQL 5.5的存儲過程來完成。

這裏是默認的錯誤消息:

mysql> INSERT INTO area SET location_id = 'invalid'; 
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`rates`.`area`, CONSTRAINT `area_ibfk_1` FOREIGN KEY (`location_id`) REFERENCES `location` (`id`)) 

mysql> SHOW ERRORS; 
+-------+------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| Level | Code | Message                                        | 
+-------+------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| Error | 1452 | Cannot add or update a child row: a foreign key constraint fails (`rates`.`area`, CONSTRAINT `area_ibfk_1` FOREIGN KEY (`location_id`) REFERENCES `location` (`id`)) | 
+-------+------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
1 row in set (0.00 sec) 

下面是我們的存儲過程:

DROP PROCEDURE IF EXISTS test1; 

DELIMITER // 

CREATE PROCEDURE test1() 
DETERMINISTIC 
MODIFIES SQL DATA 
SQL SECURITY INVOKER 
BEGIN 
    DECLARE EXIT HANDLER FOR SQLSTATE '23000' 
    BEGIN 
    SIGNAL SQLSTATE '23000' SET 
     MYSQL_ERRNO = 1452, 
     MESSAGE_TEXT = 'Yo! Error 23000!'; 
    END; 

    INSERT INTO area SET location_id = 'invalid'; 
END; 
// 

DELIMITER ; 

這裏是我們的自定義錯誤消息:

mysql> CALL test1(); 
ERROR 1452 (23000): Yo! Error 23000! 

mysql> SHOW ERRORS; 
+-------+------+------------------+ 
| Level | Code | Message   | 
+-------+------+------------------+ 
| Error | 1452 | Yo! Error 23000! | 
+-------+------+------------------+ 
1 row in set (0.00 sec) 

順便說一句,爲什麼你要這個?