MySQL的異常處理分析如下:
成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計、成都做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、松江網(wǎng)絡(luò)推廣、微信平臺小程序開發(fā)、松江網(wǎng)絡(luò)營銷、松江企業(yè)策劃、松江品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供松江建站搭建服務(wù),24小時服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com
標(biāo)準格式
DECLARE
handler_type
HANDLER
FOR
condition_value[,...]
statement
handler_type:
CONTINUE
|
EXIT
|
UNDO
--這個暫時不支持
condition_value:
SQLSTATE
[VALUE]
sqlstate_value
|
condition_name
|
SQLWARNING
|
NOT
FOUND
|
SQLEXCEPTION
|
mysql_error_code
condition_value細節(jié)
1、常用MYSQL
ERROR
CODE
列表
更多錯誤列表見MySQL安裝路徑下
比如我的/usr/local/mysql/share/mysql/errmsg.txt
說明一下:SQLSTATE
[VALUE]
sqlstate_value這種格式是專門為ANSI
SQL
和
ODBC以及其他的標(biāo)準.
并不是所有的MySQL
ERROR
CODE
都映射到SQLSTATE。
2、如果你不想插ERROR
CODE的話,就用速記條件來代替
SQLWARNING
代表所有以01開頭的錯誤代碼
NOT
FOUND
代表所有以02開頭的錯誤代碼,當(dāng)然也可以代表一個游標(biāo)到達數(shù)據(jù)集的末尾。
SQLEXCEPTION
代表除了SQLWARNING和NOT
FOUND
的所有錯誤代碼
3、我們現(xiàn)在就用手冊上的例子
CREATE
TABLE
t
(s1
int,primary
key
(s1));
mysql
use
t_girl
Database
changed
mysql
CREATE
TABLE
t
(s1
int,primary
key
(s1));
Query
OK,
rows
affected
(0.00
sec)
mysql
mysql
mysql
DELIMITER
||
mysql
CREATE
PROCEDURE
handlerdemo
()
-
BEGIN
-
DECLARE
EXIT
HANDLER
FOR
SQLSTATE
'23000'
BEGIN
END;
--
遇到重復(fù)鍵值就退出
-
SET
@x
=
1;
-
INSERT
INTO
t
VALUES
(1);
-
SET
@x
=
2;
-
INSERT
INTO
t
VALUES
(1);
-
SET
@x
=
3;
-
END||
Query
OK,
rows
affected
(0.00
sec)
mysql
DELIMITER
;
mysql
call
handlerdemo();
Query
OK,
rows
affected
(0.00
sec)
mysql
select
@x;
+------+
|
@x
|
+------+
|
2
|
+------+
1
row
in
set
(0.00
sec)
mysql
call
handlerdemo();
Query
OK,
rows
affected
(0.00
sec)
mysql
select
@x;
+------+
|
@x
|
+------+
|
1
|
+------+
1
row
in
set
(0.00
sec)
mysql
現(xiàn)在來看一下遇到錯誤繼續(xù)的情況
mysql
truncate
table
t;
Query
OK,
rows
affected
(0.01
sec)
mysql
DELIMITER
$$
mysql
DROP
PROCEDURE
IF
EXISTS
`t_girl`.`handlerdemo`$$
Query
OK,
rows
affected
(0.00
sec)
mysql
CREATE
DEFINER=`root`@`localhost`
PROCEDURE
`handlerdemo`()
-
BEGIN
-
DECLARE
CONTINUE
HANDLER
FOR
SQLSTATE
'23000'
BEGIN
END;
-
SET
@x
=
1;
-
INSERT
INTO
t
VALUES
(1);
-
SET
@x
=
2;
-
INSERT
INTO
t
VALUES
(1);
-
SET
@x
=
3;
-
END$$
Query
OK,
rows
affected
(0.01
sec)
mysql
DELIMITER
;
mysql
call
handlerdemo();
Query
OK,
rows
affected
(0.00
sec)
mysql
select
@x;
+------+
|
@x
|
+------+
|
3
|
+------+
1
row
in
set
(0.00
sec)
mysql
call
handlerdemo();
Query
OK,
rows
affected
(0.00
sec)
mysql
select
@x;
+------+
|
@x
|
+------+
|
3
|
+------+
1
row
in
set
(0.00
sec)
mysql
可以看到,始終執(zhí)行到最后。
當(dāng)然,上面的SQLSTATE
'23000'可以替換為1062
我們來看一下警告。
mysql
alter
table
t
add
s2
int
not
null;
Query
OK,
rows
affected
(0.01
sec)
Records:
Duplicates:
Warnings:
此列沒有默認值,插入的時候會出現(xiàn)警告或者1364錯誤提示。
mysql
DELIMITER
$$
mysql
DROP
PROCEDURE
IF
EXISTS
`t_girl`.`handlerdemo`$$
Query
OK,
rows
affected,
1
warning
(0.00
sec)
mysql
CREATE
DEFINER=`root`@`localhost`
PROCEDURE
`handlerdemo`()
-
BEGIN
-
DECLARE
CONTINUE
HANDLER
FOR
1062
BEGIN
END;
-
DECLARE
CONTINUE
HANDLER
FOR
SQLWARNING
-
BEGIN
-
update
t
set
s2
=
2;
-
END;
-
DECLARE
CONTINUE
HANDLER
FOR
1364
-
BEGIN
-
INSERT
INTO
t(s1,s2)
VALUES
(1,3);
-
END;
-
SET
@x
=
1;
-
INSERT
INTO
t(s1)
VALUES
(1);
-
SET
@x
=
2;
-
INSERT
INTO
t(s1)
VALUES
(1);
-
SET
@x
=
3;
-
END$$
Query
OK,
rows
affected
(0.00
sec)
mysql
DELIMITER
;
mysql
call
handlerdemo();
Query
OK,
rows
affected
(0.00
sec)
mysql
select
*
from
t;
+----+----+
|
s1
|
s2
|
+----+----+
|
1
|
3
|
+----+----+
1
row
in
set
(0.00
sec)
遇到錯誤的時候插入的新記錄。
mysql
select
@x;
+------+
|
@x
|
+------+
|
3
|
+------+
1
row
in
set
(0.00
sec)
Mysql
遠程連接Mysql服務(wù)器的數(shù)據(jù)庫,錯誤代碼是1130,ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this MySQL server
猜想是無法給遠程連接的用戶權(quán)限問題。
這樣子操作mysql庫,即可解決。
在本機登入mysql后,更改 “mysql” 數(shù)據(jù)庫里的 “user” 表里的 “host” 項,從”localhost”改稱'%'即可
mysql -u root -p
mysql;use mysql;
mysql;select 'host' from user where user='root';
mysql;update user set host = '%' where user ='root';
mysql;flush privileges;
mysql;select 'host' from user where user='root';
第一句:以權(quán)限用戶root登錄
第二句:選擇mysql庫
第三句:查看mysql庫中的user表的host值(即可進行連接訪問的主機/IP名稱)
第四句:修改host值(以通配符%的內(nèi)容增加主機/IP地址),當(dāng)然也可以直接增加IP地址
第五句:刷新MySQL的系統(tǒng)權(quán)限相關(guān)表
第六句:再重新查看user表時,有修改。。
重起mysql服務(wù)即可完成。
關(guān)于遠程mysql連接異常的處理方法
兩種種使用mysqlcheck tablerepair table sql語句另種使用MySQL提供myisamchk, isamchk數(shù)據(jù)檢測恢復(fù)工具前者使用起比較簡便推薦使用 1. check table repair table 登陸mysql 終端: mysql -uxxxxx -p dbname check table tabTest; 現(xiàn)結(jié)說StatusOK則用修復(fù)Error用: repair table tabTest; 進行修復(fù)修復(fù)用check table命令進行檢查新版本phpMyAdmin面使用check/repair功能 2. myisamchk, isamchk 其myisamchk適用于MYISAM類型數(shù)據(jù)表isamchk適用于ISAM類型數(shù)據(jù)表兩條命令主要參數(shù)相同般新系統(tǒng)都使用MYISAM作缺省數(shù)據(jù)表類型myisamchk例進行說明發(fā)現(xiàn)某數(shù)據(jù)表現(xiàn)問題使用: myisamchk tablename.MYI 進行檢測需要修復(fù)使用: myisamchk -of tablename.MYI 關(guān)于myisamchk詳細參數(shù)說明參見使用幫助需要注意進行修改必須確