大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
MySQL的异常处理分析如下:
成都创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站设计、成都做网站、外贸网站建设、松江网络推广、微信平台小程序开发、松江网络营销、松江企业策划、松江品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联为所有大学生创业者提供松江建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com
标准格式
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细节
1、常用MYSQL
ERROR
CODE
列表
更多错误列表见MySQL安装路径下
比如我的/usr/local/mysql/share/mysql/errmsg.txt
说明一下:SQLSTATE
[VALUE]
sqlstate_value这种格式是专门为ANSI
SQL
和
ODBC以及其他的标准.
并不是所有的MySQL
ERROR
CODE
都映射到SQLSTATE。
2、如果你不想插ERROR
CODE的话,就用速记条件来代替
SQLWARNING
代表所有以01开头的错误代码
NOT
FOUND
代表所有以02开头的错误代码,当然也可以代表一个游标到达数据集的末尾。
SQLEXCEPTION
代表除了SQLWARNING和NOT
FOUND
的所有错误代码
3、我们现在就用手册上的例子
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;
--
遇到重复键值就退出
-
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
现在来看一下遇到错误继续的情况
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
可以看到,始终执行到最后。
当然,上面的SQLSTATE
'23000'可以替换为1062
我们来看一下警告。
mysql
alter
table
t
add
s2
int
not
null;
Query
OK,
rows
affected
(0.01
sec)
Records:
Duplicates:
Warnings:
此列没有默认值,插入的时候会出现警告或者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服务器的数据库,错误代码是1130,ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this MySQL server
猜想是无法给远程连接的用户权限问题。
这样子操作mysql库,即可解决。
在本机登入mysql后,更改 “mysql” 数据库里的 “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';
第一句:以权限用户root登录
第二句:选择mysql库
第三句:查看mysql库中的user表的host值(即可进行连接访问的主机/IP名称)
第四句:修改host值(以通配符%的内容增加主机/IP地址),当然也可以直接增加IP地址
第五句:刷新MySQL的系统权限相关表
第六句:再重新查看user表时,有修改。。
重起mysql服务即可完成。
关于远程mysql连接异常的处理方法
两种种使用mysqlcheck tablerepair table sql语句另种使用MySQL提供myisamchk, isamchk数据检测恢复工具前者使用起比较简便推荐使用 1. check table repair table 登陆mysql 终端: mysql -uxxxxx -p dbname check table tabTest; 现结说StatusOK则用修复Error用: repair table tabTest; 进行修复修复用check table命令进行检查新版本phpMyAdmin面使用check/repair功能 2. myisamchk, isamchk 其myisamchk适用于MYISAM类型数据表isamchk适用于ISAM类型数据表两条命令主要参数相同般新系统都使用MYISAM作缺省数据表类型myisamchk例进行说明发现某数据表现问题使用: myisamchk tablename.MYI 进行检测需要修复使用: myisamchk -of tablename.MYI 关于myisamchk详细参数说明参见使用帮助需要注意进行修改必须确