程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> MySQL5的異常處理

MySQL5的異常處理

編輯:關於MYSQL數據庫

1. Sample Problem: Log Of Failures 問題樣例:故障記錄

當INSERT失敗時,我希望能將其記錄在日志文件中我們用來展示出錯處理的問題樣例是很普通的。我希望得到錯誤的記錄。當INSERT失敗時,我想在另一個文件中記下這些錯誤的信息,例如出錯時間,出錯原因等。我對插入特別感興趣的原因是它將違反外鍵關聯的約束

2. Sample Problem: Log Of Failures (2)

MySQL> CREATE TABLE t2

1 INT, PRIMARY KEY (s1))

engine=innodb;//

MySQL> CREATE TABLE t3 (s1 INT, KEY (s1),

FOREIGN KEY (s1) REFERENCES t2 (s1))

engine=innodb;//

MySQL> INSERT INTO t3 VALUES (5);//

...

ERROR 1216 (23000): Cannot add or update a child row: a foreign key

constraint fails(這裡顯示的是系統的出錯信息)

我開始要創建一個主鍵表,以及一個外鍵表。我們使用的是InnoDB,因此外鍵關聯檢查是打開的。然後當我向外鍵表中插入非主鍵表中的值時,動作將會失敗。當然這種條件下可以很快找到錯誤號1216。

3. Sample Problem: Log Of Failures

CREATE TABLE error_log (error_message

CHAR(80))//

下一步就是建立一個在做插入動作出錯時存儲錯誤的表。

4. Sample Problem: Log Of Errors

CREATE PROCEDURE p22 (parameter1 INT)

BEGIN

DECLARE EXIT HANDLER FOR 1216

INSERT INTO error_log VALUES

(CONCAT('Time: ',current_date,

'. Foreign Key Reference Failure For

Value = ',parameter1));

INSERT INTO t3 VALUES (parameter1);

END;//

上面就是我們的程序。這裡的第一個語句DECLARE EXIT HANDLER是用來處理異常的。意思是如果錯誤1215發生了,這個程序將會在錯誤記錄表中插入一行。EXIT意思是當動作成功提交後退出這個復合語句。

5. Sample Problem: Log Of Errors

CALL p22 (5) //

調用這個存儲過程會失敗,這很正常,因為5值並沒有在主鍵表中出現。但是沒有錯誤信息返回因為出錯處理已經包含在過程中了。t3表中沒有增加任何東西,但是error_log表中記錄下了一些信息,這就告訴我們INSERT into table t3動作失敗。

DECLARE HANDLER syntax 聲明異常處理的語法

DECLARE

{ EXIT | CONTINUE }

HANDLER FOR

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved