Mysql存储过程(四)——异常处理
有时候,不希望存储过程抛出错误中止执行,而是希望返回一个错误码。
Mysql
支持异常处理,通过定义
CONTINUE/EXIT
异常处理的
HANDLER
来捕获
SQLWARNING/NOT FOUND/SQLEXCEPTION
(警告
/
无数据
/
其他异常)。其中,
FOR
后面可以改为
SQLWARNING,
NOT FOUND, SQLEXCEPTION
来指示所有异常都处理,相当于
oracle
中的
others
。例如,当不进行异常处理时,以下代码将直接抛出一个
ERROR 1062 (23000)
错误:
Sql
code 4-1:
CREATE PROCEDURE test_proc_ins1(
IN i_id INT,
IN i_name VARCHAR(100)
)
BEGIN
INSERT INTO testproc VALUES (i_id,i_name);
INSERT INTO testproc VALUES (i_id,i_name);
END;
经过异常处理后,可以避免抛出错误,而是定义一个返回参数
o_ret
赋予特殊值来表示失败,这样,在
java
代码中,可以通过获取返回值而不是捕获异常的方式来处理业务逻辑。例如将返回值设置为
-1:
Sql
code 4-2:
CREATE PROCEDURE test_proc_ins1(
IN i_id INT,
IN i_name VARCHAR(100),
OUT o_ret INT)
BEGIN
DECLARE EXIT HANDLER FOR SQLSTATE '23000' set o_ret = -1;
-- 也可以这样使用:
-- DECLARE EXIT HANDLER FOR SQLWARNING,NOT FOUND,SQLEXCEPTION set o_ret=-1;
INSERT INTO testproc VALUES (i_id,i_name);
INSERT INTO testproc VALUES (i_id,i_name);
set o_ret = 1;
END;
相关文档:
在Ubuntu9.10上使用sudo apt-get install mysql-server-5.0 安装了mysql,在外面访问不了mysql,但是在Ubuntu上访问是没有问题的。
于是开始查找原因:
3306端口是不是没有打开?
使用nestat命令查看3306端口状态:
~# netstat -an | grep 3306
tcp 0   ......
常用mysql命令行命令
1 .mysql的启动与停止
启动MYSQL服务 net start mysql
停止MYSQL服务 net stop mysql
2 . netstat –na | findstr 3306 查看被监听的端口 , findstr用于查找后面的端口是否存在
3 . 在命令行中登陆MYSQL控制台 , 即使用 MYSQL COMMEND LINE TOOL
语法格式 ......
mysql
服务器中有六个关键位置使用了字符集的概念,
他们是:
client
、connection
、database
、results
、server,
a
、其中client
是客户端使用的字符集,相当于网页中的字符集设置如下
<
meta http-equiv
=
"Content-Type"
content
=
"text/html;charset=utf ......
(1)、back_log:
要求 MySQL 能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。
back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接, ......
想测试下表分区功能跟自主的分布式的性能差异,进行了简单的测试,前后花费了半个小时,可能测试数据不太准确。
【测试环境】
操作系统:Windows XP SP2
MySQL: 5.1.19-beta-community-nt-debug
【测试过程】
查看MySQL版本:
mysql> select version();
+--------------------------------+
| version() ......