· 错误消息信息列在share/errmsg.txt文件中。“%d”和“%s”分别代表编号和字符串,显示时,它们将被消息值取代。
错误值列在share/errmsg.txt文件中,用于生成include/mysqld_error.h和include/mysqld_ername.h
MySQL源文件中的定义。
· SQLSTATE值列在share/errmsg.txt文件中,用于生成include/sql_state.h
MySQL源文件中的定义。
由于更新很频繁,这些文件中可能包含这里未列出的额外错误消息。
· 错误:1000 SQLSTATE:
HY000 (ER_HASHCHK)
消息:hashchk
· 错误:1001 SQLSTATE: HY000
(ER_NISAMCHK)
消息:isamchk
· 错误:1002 SQLSTATE: HY000 (ER_NO)
消息:NO
· 错误:1003 SQLSTATE: HY000 (ER_YES)
消息:YES
· 错误:1004 SQLSTATE: HY000 (ER_CANT_CREATE_FILE)
消息:无法创建文件'%s'
(errno: %d)
· 错误:1005 SQLSTATE: HY000 (ER_CANT_CREATE_TABLE)
消息:无法创建表'%s' (errno: %d)
· 错误:1006 SQLSTATE: HY000
(ER_CANT_CREATE_DB)
消息:无法创建数据库'%s' (errno: %d)
· 错误:1007
SQLSTATE: HY000 (ER_DB_CREATE_EXISTS)
消息:无法创建数据库'%s',数据库已存在。
·
错误:1008 SQLSTATE: HY000 (ER_DB_DROP_EXISTS)
消息:无法撤销数据库'%s',数据库不存在。
· 错误:1009 SQLSTATE: HY000 (ER_DB_DROP_DELETE)
消息:撤销数据库时出错(无法删除'%s',errno: %d)
· 错误:1010 SQLSTATE: HY000
(ER_DB_DROP_RMDIR)
消息:撤销数据库时出错(can't rmdir '%s', errno: %d)
·
错误:1011 SQLSTATE: HY000 (ER_CANT_DELETE_FILE)
消息:删除'%s'时出错 (errno: %d)
· 错误:1012 SQLSTATE: HY000 (ER_CANT_FIND_SYSTEM_REC)
消息:无法读取系统表中的记录。
· 错误:1013 SQLSTATE: HY000 (ER_CANT_GET_STAT)
消息:无法获取'%s'的状态(errno: %d)
· 错误:1014 SQLSTATE: HY000
(ER_CANT_GET_WD)
消息:无法获得工作目录(errno: %d)
· 错误:1015 SQLSTATE:
HY000 (ER_CANT_LOCK)
消息:无法锁定文件(errno: %d)
· 错误:1016 SQLSTATE:
HY000 (ER_CANT_OPEN_FILE)
消息:无法打开文件:'%s' (errno: %d)
· 错误:1017
SQLSTATE: HY000 (ER_FILE_NOT_FOUND)
消息:无法找到文件: '%s' (errno: %d)
· 错误:1018 SQLSTATE: HY000 (ER_CANT_READ_DIR)
消息:无法读取'%s'的目录
(errno: %d)
· 错误:1019 SQLSTATE: HY000 (ER_CANT_SET_WD)
消息:无法为'%s'更改目录 (errno: %d)
· 错误:1020 SQLSTATE: HY000
(ER_CHECKREAD)
消息:自上次读取以来表'%s'中的记录已改变。
· 错误:1021 SQLSTATE: HY000
(ER_DISK_FULL)
消息:磁盘满(%s);等待某人释放一些空间...
· 错误:1022 SQLSTATE:
23000 (ER_DUP_KEY)
消息:无法写入;复制表'%s'的 键。
· 错误:1023 SQLSTATE: HY000
(ER_ERROR_ON_CLOSE)
消息:关闭'%s'时出错 (errno: %d)
· 错误:1024 SQLSTATE:
HY000 (ER_ERROR_ON_READ)
消息:读取文件'%s'时出错 (errno: %d)
· 错误:1025
SQLSTATE: HY000 (ER_ERROR_ON_RENAME)
消息:将'%s'重命名为'%s'时出错 (errno: %d)
· 错误:1026 SQLSTATE: HY000 (ER_ERROR_ON_WRITE)
消息:写入文件'%s'时出错
(errno: %d)
· 错误:1027 SQLSTATE: HY000 (ER_FILE_USED)
消息:'%s'已锁定,拒绝更改。
· 错误:1028 SQLSTATE: HY000 (ER_FILSORT_ABORT)
消息:分类失败
· 错误:1029 SQLSTATE: HY000 (ER_FORM_NOT_FOUND)
消息:对于'%s',视图'%s'不存在。
· 错误:1030 SQLSTATE: HY000 (ER_GET_ERRNO)
消息:从存储引擎中获得错误%d。
· 错误:1031 SQLSTATE: HY000 (ER_ILLEGAL_HA)
消息:关于'%s'的表存储引擎不含该选项。
· 错误:1032 SQLSTATE: HY000
(ER_KEY_NOT_FOUND)
消息:无法在'%s'中找到记录。
· 错误:1033 SQLSTATE: HY000
(ER_NOT_FORM_FILE)
消息:文件中的不正确信息:'%s'
· 错误:1034 SQLSTATE: HY000
(ER_NOT_KEYFILE)
消息:对于表'%s', 键文件不正确,请尝试修复。
· 错误:1035 SQLSTATE:
HY000 (ER_OLD_KEYFILE)
消息:旧的键文件,对于表'%s',请修复之!
· 错误:1036
SQLSTATE: HY000 (ER_OPEN_AS_READONLY)
消息:表'%s'是只读的。
· 错误:1037
SQLSTATE: HY001 (ER_OUTOFMEMORY)
消息:内存溢出,重启服务器并再次尝试(需要%d字节)。
·
错误:1038 SQLSTATE: HY001 (ER_OUT_OF_SORTMEMORY)
消息:分类内存溢出,增加服务器的分类缓冲区大小。
· 错误:1039 SQLSTATE: HY000 (ER_UNEXPECTED_EOF)
消息:读取文件'%s'时出现意外EOF (errno: %d)
· 错误:1040 SQLSTATE: 08004
(ER_CON_COUNT_ERROR)
消息:连接过多。
· 错误:1041 SQLSTATE: HY000
(ER_OUT_OF_RESOURCES)
消息:内存溢出,请检查是否mysqld或其他进程使用了所有可用内存,如不然,或许应使用'ulimit'允许mysqld使用更多内存,或增加交换空间的大小。
· 错误:1042 SQLSTATE: 08S01 (ER_BAD_HOST_ERROR)
消息:无法获得该地址给出的主机名。
· 错误:1043 SQLSTATE: 08S01 (ER_HANDSHAKE_ERROR)
消息:不良握手
·
错误:1044 SQLSTATE: 42000 (ER_DBACCESS_DENIED_ERROR)
消息:拒绝用户'%s'@'%s'访问数据库'%s'。
· 错误:1045 SQLSTATE: 28000
(ER_ACCESS_DENIED_ERROR)
消息:拒绝用户'%s'@'%s'的访问(使用密码:%s)
· 错误:1046
SQLSTATE: 3D000 (ER_NO_DB_ERROR)
消息:未选择数据库。
· 错误:1047 SQLSTATE:
08S01 (ER_UNKNOWN_COM_ERROR)
消息:未知命令。
· 错误:1048 SQLSTATE: 23000
(ER_BAD_NULL_ERROR)
消息:列'%s'不能为空。
· 错误:1049 SQLSTATE: 42000
(ER_BAD_DB_ERROR)
消息:未知数据库'%s'。
· 错误:1050 SQLSTATE: 42S01
(ER_TABLE_EXISTS_ERROR)
消息:表'%s'已存在。
· 错误:1051 SQLSTATE: 42S02
(ER_BAD_TABLE_ERROR)
消息:未知表'%s'。
· 错误:1052 SQLSTATE: 23000
(ER_NON_UNIQ_ERROR)
消息:%s中的列'%s'不明确。
· 错误:1053 SQLSTATE: 08S01
(ER_SERVER_SHUTDOWN)
消息:在 *** 作过程中服务器关闭。
· 错误:1054 SQLSTATE: 42S22
(ER_BAD_FIELD_ERROR)
消息:'%s'中的未知列'%s'。
· 错误:1055 SQLSTATE: 42000
(ER_WRONG_FIELD_WITH_GROUP)
消息:'%s'不在GROUP BY中。
· 错误:1056
SQLSTATE: 42000 (ER_WRONG_GROUP_FIELD)
消息:无法在'%s'上创建组。
· 错误:1057
SQLSTATE: 42000 (ER_WRONG_SUM_SELECT)
消息:语句中有sum函数和相同语句中的列。
·
错误:1058 SQLSTATE: 21S01 (ER_WRONG_VALUE_COUNT)
消息:列计数不匹配值计数。
·
错误:1059 SQLSTATE: 42000 (ER_TOO_LONG_IDENT)
消息:ID名称'%s'过长。
·
错误:1060 SQLSTATE: 42S21 (ER_DUP_FIELDNAME)
消息:重复列名'%s'。
·
错误:1061 SQLSTATE: 42000 (ER_DUP_KEYNAME)
消息:重复键名称'%s'。
· 错误:1062
SQLSTATE: 23000 (ER_DUP_ENTRY)
消息:键%d的重复条目'%s'。
· 错误:1063
SQLSTATE: 42000 (ER_WRONG_FIELD_SPEC)
消息:对于列'%s',列分类符不正确。
·
错误:1064 SQLSTATE: 42000 (ER_PARSE_ERROR)
消息:在行%d上,%s靠近'%s'。
·
错误:1065 SQLSTATE: 42000 (ER_EMPTY_QUERY)
消息:查询为空。
· 错误:1066
SQLSTATE: 42000 (ER_NONUNIQ_TABLE)
消息:非唯一的表/别名:'%s'
· 错误:1067
SQLSTATE: 42000 (ER_INVALID_DEFAULT)
消息:关于'%s'的无效默认值。
· 错误:1068
SQLSTATE: 42000 (ER_MULTIPLE_PRI_KEY)
消息:定义了多个主键。
用过begin——end句块的应该都接触过declare。
declare是用来定义变量和常用处理、声明之类的关键字。在mysql存储过程出现之前declare是一块鸡肋,大家常用declare来定义局部变量,我习惯性的还是使用set来定义变量(虽然是全局的,但是来的方便)。
存储过程出现后declare的标准处理定义就变成了非常强大的工具,可以用来为存储过程添加一些非常强大的错误处理机制。
首先需要提一点的是declare定义变量如果想定义varchar型的,必须注明参数最大长度,即declare varchar(20).
在这里我们不深究它用来定义参数的小细节
我们主要来研究DECLARE Condition 和 DECLARE Handler
DECLARE Condition 和 DECLARE Handler可以说是为了处理错误而生的。
功能上讲DECLARE Condition出现的时间比较早,功能也比较简单,它可以通过错误编号或者SQLSTATE来触发一各名字,说明白一点就是当某个错误编号出现的时候替换一个名字给它。这样调用的时候,我们不用去记一大串错误编号了。
它的标准语法我们可以在mysql的附注中找到。
DECLARE condition_name CONDITION FOR condition_value
condition_value:
例子如下:
DECLARE errname CONDITION FOR SQLSTATE '23000'
将返回SQLSTATE信息为23000的错误定名为errname
这个名字就可以被我们的绝对重头戏DECLARE Handler调用了,在DECLARE Handler中可以定义错误的处理办法,可以使用begin和end来标记语句块,可以单独使用rollback。处理的过程也可以定义为继续执行和中断存储过程。
标准语法:
DECLARE handler_type HANDLER FOR condition_value[,...] sp_statement
handler_type: 处理的过程。
CONTINUE 继续执行未完成的存储过程,直至结束。(常用,默认)
| EXIT 出现错误即自动跳出所在的begin不再执行后面的语句。
| UNDO 气死我了,不支持为什么写在这里,害我测试了好久都是语法错误。
condition_value: 处理的触发条件
SQLSTATE [VALUE] sqlstate_value 不用说了,最常用的错误定义,自己去查错误列表吧。
| condition_name 我们刚刚定义的那个名字errnmae就是用在这里的。
| SQLWARNING 这个太好用了,从错误编号01开始的错误。相当于错误的通配符。
| NOT FOUND 和上面差不多,从02开始。
| SQLEXCEPTION 上面两个中没有包括的错误它都可以用来触发,就是说你想定义只要出错就触发的话就定义出错条件为SQLWARNING+SQLEXCEPTION。
| mysql_error_code 错误编号,和第一个不一样,不过同样可以在错误列表从中查到,是我比较常用的。
例子
DECLARE errname CONDITION FOR SQLSTATE '23000'给导致错误23000的错误定义名字为errname
DECLARE continue handler for errname 当errname发生时作下面的处理
BEGIN 语句开始
set @x=1设置@x=1
select @x输出x
END结束出错处理。
增加用户以及赋予权限推荐用下面这两个语句吧CREATE USER 'dba'@'%' IDENTIFIED BY '27011287'
GRANT ALL PRIVILEGES ON *.* TO 'dba'@'%'
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)