标准格式
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
列表
http://dev.mysql.com/doc/refman/5.0/en/error-messages-server.html
更多错误列表见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,
0
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,
0
rows
affected
(0.00
sec)
mysql>
DELIMITER
mysql>
call
handlerdemo()
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
select
@x
+------+
|
@x
|
+------+
|
2
|
+------+
1
row
in
set
(0.00
sec)
mysql>
call
handlerdemo()
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
select
@x
+------+
|
@x
|
+------+
|
1
|
+------+
1
row
in
set
(0.00
sec)
mysql>
现在来看一下遇到错误继续的情况
mysql>
truncate
table
t
Query
OK,
0
rows
affected
(0.01
sec)
mysql>
DELIMITER
$$
mysql>
DROP
PROCEDURE
IF
EXISTS
`t_girl`.`handlerdemo`$$
Query
OK,
0
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,
0
rows
affected
(0.01
sec)
mysql>
DELIMITER
mysql>
call
handlerdemo()
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
select
@x
+------+
|
@x
|
+------+
|
3
|
+------+
1
row
in
set
(0.00
sec)
mysql>
call
handlerdemo()
Query
OK,
0
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,
0
rows
affected
(0.01
sec)
Records:
0
Duplicates:
0
Warnings:
0
此列没有默认值,插入的时候会出现警告或者1364错误提示。
mysql>
DELIMITER
$$
mysql>
DROP
PROCEDURE
IF
EXISTS
`t_girl`.`handlerdemo`$$
Query
OK,
0
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,
0
rows
affected
(0.00
sec)
mysql>
DELIMITER
mysql>
call
handlerdemo()
Query
OK,
0
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)
1.停止mysql服务:
右键点击“我的电脑”图标,出现右键菜单后左键点击“管理”。d出“电脑管理”对话框后,左键点击“服务与程序”,接着点击“服务”,最后找到mysql服务并将其关闭。
2.进入控制面板,点击卸载程序,进入卸载程序对话框后卸载mysql。
3.组合键W+R进入运行,输入“regedit”,查看下面 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 的键值,将mysql键值(mysql、mysqladmin)删掉 。
4.重启系统。
5.再次安装mysql程序。
flask中向mysql中数据 *** 作会出现字符集的问题,比如创建数据模型:db.create_all()时,控制台会出现warring 1366 的字符集警告,是这样的:
这个异常是mysql问题,而非python的问题,这是因为mysql的字段类型是utf-xxx, 而在mysql中这些utf-8数据类型只能存储最多三个字节的字符,而存不了包含四个字节的字符。
解决方法:
修改mysql数据表的字段类型为utf8mb4,只有在mysql5.5之后可以支持。
在flask配置中设置字符集:
SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:123456@127.0.0.1:3306/test?charset=utf8"
首先明确自己提前开启了mysql服务的情况下遇到这个错误(这样就排除了因为mysql服务没开的原因)。方法一就是关闭防火墙:计算机——>打开控制面板——>系统和安全——>
Windows防火墙——>打开或者关闭防火墙
然后关闭防火墙,点击确定,重启电脑就行了。
下面连接就是关闭防火的图文详解过程(标题是LOL相关的,内容是关闭防火墙):
16lol"服务器连接异常,即将退出..."解决方案
mysql 10038错误解决方案
END
方法二:新建一个规则
方法一简单粗暴,但这样做可能会让人觉得电脑不安全(其实还好,关闭了几个月玩LOL也没见有什么,毕竟杀毒软件还开着)。
而方法二虽然比方法一麻烦,但总体也是很简单的。
计算机——>打开控制面板——>系统和安全——>
Windows防火墙——>高级设置。出现如下图:先选择入站规则,再点击新建规则。
mysql 10038错误解决方案
选择规则类型,然后端口,点击下一步。
mysql 10038错误解决方案
输入mysql的默认端口号3306,然后选择下一步。
mysql 10038错误解决方案
选择允许连接,然后点击下一步。
mysql 10038错误解决方案
按照默认选择3个打上勾,点击下一步。
mysql 10038错误解决方案
为你的新规则起个名字(可以随意取,但必须填),描述可写可不写,点击完成,这样就OK了,在入站规则中也能找到“3306新规则”。
mysql 10038错误解决方案
上面的步骤完成其实就OK了,接下来连接mysql试试,发现成功了。到此就全部结束了,如果对你有帮助,随手来个赞啊,有得啊什么的都是极好的。
如果还有疑问,可以点击右上方剑豪图标查看更多经验,可以私信,共同探讨。
。
mysql 10038错误解决方案
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)