Mysqlmysql 执行sql文件时Sorting res...

c++在vs2010中操作Mysql的讲解 - 推酷
c++在vs2010中操作Mysql的讲解
Number of View: 6
1.vs2010中mysql的构建
首先你需要mysql安装目录下的include文件夹和lib文件夹,并保证lib里面的文件完整(libmysql.dll和libmysql.lib均存在),没有的
下载这两个文件夹,下载后直接将这两个文件夹解压放在你记得住的地方(这里我们放在了d:\mysqlc下面,分别是d:\mysqlc\include,d:\mysqlc\lib),然后打开vs2010做以下操作
右键点击你的项目名称,选择属性,分别在”c/c++”-&常规,”连接器”-&常规 的“附加包含目录”直接填入“d:\mysqlc\d:\mysqlc\lib”,也可以自己点开一个一个填写,如图(图中所示我是本机配置,请忽略):
然后在 “连接器”-&输入中 的 “附加依赖项”填入:libmysql.lib ,如图:
然后呢,还需要一部,复制“d:\mysqlc\lib\libmysql.dll”到“c:\windows”下面,不然待会运行,会提示找不到libmysql.dll的错误
到这里我们就构建好了,这里我们先来看下代码,之后再详细讲解c++操作mysql的函数
// test.cpp : 定义控制台应用程序的入口点 主文件入口
#include &stdafx.h&
#include &winsock.h&
#include &mysql.h&
void _tmain(int argc, _TCHAR* argv[])
mysql=mysql_init(NULL);
char* sql=&select pid,title from posts&;
MYSQL_RES *
if(mysql_real_connect(mysql,&localhost&,&root&,&root&,&maijiawo&,3306,NULL,0)){
mysql_set_character_set(mysql,&gbk&);
if(!mysql_query(mysql,sql)){
result=mysql_store_result(mysql);
if(result==NULL)
num=mysql_num_fields(result);
unsigned long *lengths = mysql_fetch_lengths(result);
while(row=mysql_fetch_row(result)){
for(r=0;r&r++){
cout&&row[r]&&' ';
mysql_free_result(result);
mysql_close(mysql);
// test.cpp : 定义控制台应用程序的入口点 主文件入口
#include &stdafx.h&
#include &winsock.h&
#include &mysql.h&
mysql_init
&select pid,title from posts&
MYSQL_RES *
mysql_real_connect
&localhost&
&maijiawo&
mysql_set_character_set
mysql_query
&&&&&&&&&&&&
mysql_store_result
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&
mysql_num_fields
&&&&&&&&&&&&
&&&&&&&&&&&&
mysql_fetch_lengths
&&&&&&&&&&&&
mysql_fetch_row
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
mysql_free_result
mysql_close
别忘了在stdafx.h中加入这句:
#include &iostream&
现在我们来详细分析下相关函数,比较详细,慢慢看
我们 在用mysql的c API时,用到最多的就是MYSQL结构了。毫无疑问这个结构是mysql c/c++编程的核心了。
以下是该结构的定义:
typedef struct st_mysql {
NET && & & & & & & & & & & & & & & & & & & & & & & & & & & & &/* 网络连接参数 */
gptr connector_ && & & & & & & & & & & & & & & & & & & &&/* SSL 连接句柄 */
char *host,*user,*passwd,*unix_socket,*server_version,*host_info,*info,* & // 连接参数
unsigned int port,client_flag,server_ & & & & & & & & & //连接参数
unsigned int protocol_
unsigned int field_ & & & & & &//列数
unsigned int&server_ & & &//
unsigned long thread_ && & & & & & & &/* Id for connection in server */
my_ulonglong affected_
my_ulonglong insert_ /* id if insert on table with NEXTNR */
my_ulonglong extra_ /* Used by mysqlshow */
unsigned long packet_
enum mysql_
MYSQL_FIELD * // the field info
MEM_ROOT field_ // the field memory
my_bool free_ /* If free in mysql_close */
my_ /* set to 1 if automatic reconnect */
struct st_mysql_ //option
char & & & &scramble_buff[9]; // ???
struct charset_info_st * // charset info.
unsigned int &server_ // server language/
以下是net的定义,这个结构被用来进行网络读写:
typedef struct st_net {
my_ /* For Perl DBI/dbd */
unsigned char *buff,*buff_end,*write_pos,*read_
char last_error[MYSQL_ERRMSG_SIZE];
unsigned int last_errno,max_packet,timeout,pkt_
my_bool return_errno,
my_bool no_send_ /* needed if we are doing several
queries in one command ( as in LOAD TABLE … FROM MASTER ),
and do not want to confuse the client with OK at the wrong time
unsigned long remain_in_buf,length, buf_length, where_b;
unsigned int *return_
unsigned char reading_or_
char save_
我们在进行mysql连接以及查询时,MYSQL这个结构被用做传送信息的载体。
需要经常用到MYSQL结构的cAPI:
mysql_connect();
mysql_real_connect();
mysql_query();
mysql_store_result();
mysql_use_result();
mysql_error()
大家有兴趣可以看看这几个函数的实现,会有意想不到的收获!
c++连接mysql的主要是通过mysql的c API来实现 。
连接的API有两个,下面会分别描述:
mysql_connect()
(原型)ProtoType: &
MYSQL *mysql_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd)
该函数已过时。最好使用mysql_real_connect()取而代之。
mysql_connect()试图建立与运行在主机(远程主机也可以)上的MySQL数据库引擎的连接。在能够执行任何其他API函数之前,必须先调用mysql_connect(),而且返回成功。但mysql_get_client_info()例外。
这些参数的意义与mysql_real_connect()的对应参数的意义相同,差别在于连接句柄可以为NULL。在这种情况下,C API将自动为连接结构分配内存,并当调用mysql_close()时释放分配的内存。该方法的缺点是,如果连接失败,你无法检索错误消息。要想从mysql_errno()或mysql_error()获得错误消息,必须提供有效的MYSQL指针。
返回值: NULL表示失败。反之成功。
mysql_real_connect()
MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag)
mysql_real_connect()尝试与运行在主机上的MySQL数据库引擎建立连接。在你能够执行需要有效MySQL连接句柄结构的任何其他API函数之前,mysql_real_connect()必须被调用并返回成功。
参数说明:
&&&&&&&&& 第1个参数应是已有MYSQL结构的地址。调用mysql_real_connect()之前,
必须调用mysql_init()来初始化MYSQL结构
通过mysql_options()调用,可更改多种连接选项。
host的值必须是主机名或IP地址。如果host是NULL或字符串”localhost”,连接将被视为与本地主机的连接。如果操作系统支持套接字(Unix)或命名管道(Windows),将使用它们而不是TCP/IP连接到服务器。
user参数包含用户的MySQL登录ID。如果user是NULL或空字符串”&,用户将被视为当前用户。在UNIX环境下,它是当前的登录名。在Windows ODBC下,必须明确指定当前用户名。请参见
passwd参数包含用户的密码。如果passwd是NULL,仅会对该用户的(拥有1个空密码字段的)用户表中的条目进行匹配检查。这样,数据库管理员就能按特定的方式设置MySQL权限系统,根据用户是否拥有指定的密码,用户将获得不同的权限。
调用mysql_real_connect()之前,不要尝试加密密码,密码加密将由客户端API自动处理。
db是数据库名称。如果db为NULL,连接会将默认的数据库设为该值。
当你不想连接特定数据库时,可以指定db为NULL
如果“port”不是0,其值将用作TCP/IP连接的端口号。注意,“host”参数决定了连接的类型。port为0的话,使用mysql的默认tcp/ip端口3306.
如果unix_socket不是NULL,该字符串描述了应使用的套接字或命名管道。注意,“host”参数决定了连接的类型。
&client_flag的值通常为0,但是,也能将其设置为下述标志的组合,以允许特定功能:
CLIENT_COMPRESS
使用压缩协议。
CLIENT_FOUND_ROWS
返回发现的行数(匹配的),而不是受影响的行数。
CLIENT_IGNORE_SPACE
允许在函数名后使用空格。使所有的函数名成为保留字。
CLIENT_INTERACTIVE
关闭连接之前,允许interactive_timeout(取代了wait_timeout)秒的不活动时间。客户端的会话wait_timeout变量被设为会话interactive_timeout变量的值。
CLIENT_LOCAL_FILES
允许LOAD DATA LOCAL处理功能。
CLIENT_MULTI_STATEMENTS
通知服务器,客户端可能在单个字符串内发送多条语句(由‘;’隔开)。如果未设置该标志,将禁止多语句执行。
CLIENT_MULTI_RESULTS
通知服务器,客户端能够处理来自多语句执行或存储程序的多个结果集。如果设置了CLIENT_MULTI_STATEMENTS,将自动设置它。
CLIENT_NO_SCHEMA
db_name.tbl_name.col_name
语法。它用于ODBC。如果使用了该语法,它会使分析程序生成错误,在捕获某些ODBC程序中的缺陷时,它很有用。
CLIENT_ODBC
客户端是ODBC客户端。它将
变得更为ODBC友好。
CLIENT_SSL
使用SSL(加密协议)。该选项不应由应用程序设置,它是在客户端库内部设置的。
示例代码:
mysql_init(&mysql);
if (!mysql_real_connect(&mysql, &host&, &user&, &passwd&, &database&, 0, NULL, 0))
{//判断连接是否失败。
printf(&Failed to connect to database: Error: %s/n&,
mysql_error(&mysql));
mysql_init
mysql_real_connect
&database&
//判断连接是否失败。
&Failed to connect to database: Error: %s/n&
mysql_error
连接成功后,你就可以执行其他操作了。
mysql_connect和mysql_real_connect的区别:
1. mysql_connect不需要调用mysql_init来初始化连接句柄.但是mysql_real_connect需要。
2. mysql_connect只能指定host,user,password, database四个参数,无法指定特定端口,使用命名管道。只能使用默认的TCP/IP连接。默认端口只能是3306
3. mysql_connect在实现里调用了mysql_real_connect.是对其的封装。
我们可以从库的实现文件libmysql.c看到mysql_connect()函数的实现:
MYSQL * STDCALL
mysql_connect(MYSQL *mysql,const char *host,&const char *user, const char *passwd)
&&mysql=mysql_init(mysql); /* Make it thread safe */
&& &DBUG_ENTER(“mysql_connect”);
& &if (!(res = mysql_real_connect(mysql, host, user, passwd, null, 0, null, 0)))
&& & &if (mysql-&free_me)
my_free((gptr) mysql,MYF(0));
&& &DBUG_RETURN(res);
mysql_real_connect的实现就很长很复杂了。在此不贴出,有需要的同学可通过向我索取。
通过这两个函数,大家想必对mysql的连接都更多的了解了。在实际运用过程中,这两个函数已经够用了。还有需要用到的是
mysql_options来通过更改连接选项。
本文函数说明来自mysql5.1官方文档。
所需资料均来自mysql。
讲完了连接,接着就讲查询了。
mysql的执行和查询都是使用一下2个接口:
1. mysql_query(MYSQL* mysql, const char* sql);
2.&int mysql_real_query(MYSQL *mysql, const char *query, unsigned long length);
一下就分别描述这两个函数:
mysql_query()
int mysql_query(MYSQL *mysql, const char *query)
执行由“Null终结的字符串”查询指向的SQL查询。正常情况下,字符串必须包含1条SQL语句,
而且不应为语句添加终结分号(‘;’)或“/g”。如果允许多语句执行
,字符串可包含多条由分号隔开的语句。但是连接的时候必须指定CLIENT_MULTI_STATEMENTS选项。
mysql_query()不能用于包含二进制数据的查询,应使用mysql_real_query()取而代之(二进制数据可能包含字符‘/0’,mysql_query()会将该字符解释为查询字符串结束)。
如果希望了解查询是否应返回结果集,可使用mysql_field_count()进行检查。请参见
如果查询成功,返回0。如果出现错误,返回非0值。
mysql_real_query()
int mysql_real_query(MYSQL *mysql, const char *query, unsigned long length)
执行由“query”指向的SQL查询,它应是字符串长度字节“long”。正常情况下,字符串必须包含1条SQL语句,
而且不应为语句添加终结分号(‘;’)或“/g”
。如果允许多语句执行,字符串可包含由分号隔开的多条语句。但是连接的时候必须指定CLIENT_MULTI_STATEMENTS选项。
对于包含二进制数据的查询,必须使用mysql_real_query()而不是mysql_query(),这是因为,二进制数据可能会包含‘/0’字符。此外,mysql_real_query()比mysql_query()快,这是因为它不会在查询字符串上调用strlen()。
如果希望知道查询是否应返回结果集,可使用mysql_field_count()进行检查
如果查询成功,返回0。如果出现错误,返回非0值。
如果失败,可使用mysql_error(MYSQL* mysql)看看错误信息。
使用mysql_query和mysql_real_query可以执行任何的mysql语句。不需要在语句末尾加上分号!
对于没有像select一样的查询,需要接着调用mysql_store_result或者mysql_use_result来保存结果集。
对于insert或者delete,create语句,不返回结果集的,判断返回值看看是否执行成功,然后用mysql_affected_rows函数来
查询被影响的行数。用mysql_error(MYSQL* mysql)来看错误信息
用mysql进行数据查询的时候,mysql会返回一个结果集给我们。接着我们需要调用mysql的api,从这个结果集中取得我们要的数据。
取完数据之后,需要释放这个结果集。
mysql的结果集其实就是一个MYSQL_RES结构,其定义如下:
typedef struct&
st_mysql_res
my_ulonglong row_ && & & & & & & & & & & & & & &// 结果集的行数
unsigned int field_count, current_ && & & & &&// 结果集的列数,当前列
MYSQL_FIELD
* && & & & & & & & & & & & & & & & &&// 结果集的列信息
MYSQL_DATA
* && & & & & & & & & & & & & & & & & &&// 结果集的数据
MYSQL_ROWS
*data_ && & & & & & & & & & &&// 结果集的光标
field_ & & & & & & & & & & & & & & & & & // 内存结构
&& & & & & & & & & & & & & & & & & & & &// 非缓冲的时候用到
current_ & & & & & & & & & & & & & //mysql_store_result时会用到。当前行
unsigned long * && & & & & & & & & & & & & & & //每列的长度
* && & & & & & & & & & & & & & & & & & & & &// mysql_use_result会用。
my_ && & & & & & & & & & & & & & & & & & & & & & & &//是否为行尾
} MYSQL_RES;
typedef char **
/* 返回的每一行的值,全部用字符串来表示*/
typedef struct st_mysql_rows {
&&struct st_mysql_rows * /* list of rows */
&&MYSQL_ROW
MYSQL_ROWS
& & & &//mysql的数据的链表节点。可见mysql的结果集是链表结构
typedef struct st_mysql_data {
&&MYSQL_ROWS *
&&MEM_ROOT
MYSQL_DATA
// 数据集的结构
typedef struct st_mysql_field {
&&char * /* Name of column */
&&char * && & & & & & & & & & & & & & & & & & & & &&/* Table of column if column was a field */
&&char * && & & & & & & & & & & & & & & & & & & & & & &/* Default value (set by mysql_list_fields) */
&&enum enum_field_ && & & & & & & /* Type of field. Se mysql_com.h for types */
&& && & & & & & & & & & & & & & &/* Width of column */
&&unsigned int max_ && & & & & & & & & & &/* Max width of selected set */
&& && & & & & & & & & & & & & & & & /* Div flags */
&&u && & & & & & & & & & & & &&/* Number of decimals in field */
MYSQL_FIELD
&//列信息的结构
typedef struct st_used_mem { /* struct for once_alloc */
struct st_used_mem * /* Next block in use */
/* memory left in block &*/
/* Size of block */
//内存结构
typedef struct st_mem_root {
USED_MEM *
USED_MEM *
USED_MEM *pre_
unsigned int min_
unsigned int block_
void (*error_handler)(void);
&//内存结构
之所以列出这些结构,是想让大家对mysql的结果集有更清晰的认识。
以下是取得数据的相关API:
.&mysql_store_result()
MYSQL_RES *mysql_store_result(MYSQL *mysql)
对于成功检索了数据的每个查询(SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK TABLE等),必须调用mysql_store_result()或mysql_use_result()&。
对于其他查询,不需要调用mysql_store_result()或mysql_use_result(),但是如果在任何情况下均调用了mysql_store_result(),它也不会导致任何伤害或性能降低。通过检查mysql_store_result()是否返回0,可检测查询是否没有结果集(以后会更多)。
如果希望了解查询是否应返回结果集,可使用mysql_field_count()进行检查。请参见
mysql_store_result()将查询的全部结果读取到客户端,分配1个MYSQL_RES结构,并将结果置于该结构中。
如果查询未返回结果集,mysql_store_result()将返回Null指针(例如,如果查询是INSERT语句)。
如果读取结果集失败,mysql_store_result()还会返回Null指针。通过检查mysql_error()是否返回非空字符串,mysql_errno()是否返回非0值,或mysql_field_count()是否返回0,可以检查是否出现了错误。
如果未返回行,将返回空的结果集。(空结果集设置不同于作为返回值的空指针)。
一旦调用了mysql_store_result()并获得了不是Null指针的结果,可调用mysql_num_rows()来找出结果集中的行数。
可以调用mysql_fetch_row()来获取结果集中的行,或调用mysql_row_seek()和mysql_row_tell()来获取或设置结果集中的当前行位置。
一旦完成了对结果集的操作,必须调用mysql_free_result()。
&mysql_use_result()
MYSQL_RES *mysql_use_result(MYSQL *mysql)
对于成功检索数据的每个查询(SELECT、SHOW、DESCRIBE、EXPLAIN),必须用mysql_store_result()或mysql_use_result()。
mysql_use_result()将初始化结果集检索,但并不像mysql_store_result()那样将结果集实际读取到客户端。
它必须通过对mysql_fetch_row()的调用,对每一行分别进行检索。这将直接从服务器读取结果,而不会将其保存在临时表或本地缓冲区内,与mysql_store_result()相比,速度更快而且使用的内存也更少。
客户端仅为当前行和通信缓冲区分配内存,分配的内存可增加到max_allowed_packet字节。
另一方面,如果你正在客户端一侧为各行进行大量的处理操作,或者将输出发送到了用户可能会键入“^S”(停止滚动)的屏幕,就不应使用mysql_use_result()。这会绑定服务器,并阻止其他线程更新任何表(数据从这类表获得)。
使用mysql_use_result()时,必须执行mysql_fetch_row(),直至返回NULL值,否则,
未获取的行将作为下一个检索的一部分返回
。C API给出命令不同步错误,如果忘记了执行该操作,将不能运行该命令。
不能对结果集用mysql_data_seek()、mysql_row_seek()、mysql_row_tell()、mysql_num_rows()或mysql_affected_rows(),也不应发出其他查询,直至mysql_use_result()完成为止。(但是,提取了所有行后,mysql_num_rows()将准确返回提取的行数)。
一旦完成了对结果集的操作,必须调用mysql_free_result()。
MYSQL_RES结果结构。如果出现错误,返回NULL。
3.取得一行的数据:
mysql_fetch_row()
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
检索结果集的下一行。在mysql_store_result()之后使用时,如果没有要检索的行,mysql_fetch_row()返回NULL。
在mysql_use_result()之后使用时,如果没有要检索的行或出现了错误,mysql_fetch_row()返回NULL。
结果集的列数目由mysql_num_fields(result)给出。如果行中保存了调用mysql_fetch_row()返回的值,将按照row[0]到row[mysql_num_fields(result)-1],访问这些值的指针。行中的NULL值由NULL指针指明。
可以通过调用mysql_fetch_lengths()来获得行中字段值的长度。对于空字段以及包含NULL的字段,长度为0。通过检查字段值的指针,能够区分它们。如果指针为NULL,字段为NULL,否则字段为空。
下一行的MYSQL_ROW结构。如果没有更多要检索的行或出现了错误,返回NULL。
示例代码:
//假设mysql已经连接好
MYSQL_RES* result = mysql_store_result(mysql);
if (result
unsigned int num_
num_fields = mysql_num_fields(result);
while ((row = mysql_fetch_row(result)))
unsigned long *
lengths = mysql_fetch_lengths(result);
for(i = 0; i & num_ i++)
printf(&[%.*s] &, (int) lengths[i], row[i] ? row[i] : &NULL&);
printf(&/n&);
//假设mysql已经连接好
MYSQL_RES*
mysql_store_result
num_fields
num_fields
mysql_num_fields
mysql_fetch_row
mysql_fetch_lengths
num_fields
4. 取得列的信息。
mysql_fetch_field()
MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result)
返回采用MYSQL_FIELD结构的结果集的列。重复调用该函数,以检索关于结果集中所有列的信息。未剩余字段时,mysql_fetch_field()返回NULL。
每次执行新的SELECT查询时,将复位mysql_fetch_field(),以返回关于第1个字段的信息。调用mysql_field_seek()也会影响mysql_fetch_field()返回的字段。
如果调用了mysql_query()以在表上执行SELECT,但未调用mysql_store_result(),如果调用了mysql_fetch_field()以请求BLOB字段的长度,MySQL将返回默认的Blob长度(8KB)。之所以选择8KB是因为MySQL不知道BLOB的最大长度。应在日后使其成为可配置的。一旦检索了结果集,field-&max_length将包含特定查询中该列的最大值的长度。
当前列的MYSQL_FIELD结构。如果未剩余任何列,返回NULL。
MYSQL_FIELD *
while((field = mysql_fetch_field(result)))
printf(&field name %s/n&, field-&name);
MYSQL_FIELD *
mysql_fetch_field
&field name %s/n&
&mysql_fetch_fields()
MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result)
对于结果集,返回所有MYSQL_FIELD结构的数组。每个结构提供了结果集中1列的字段定义。
关于结果集所有列的MYSQL_FIELD结构的数组。
unsigned int num_
MYSQL_FIELD *
num_fields = mysql_num_fields(result);
fields = mysql_fetch_fields(result);
for(i = 0; i & num_ i++)
printf(&Field %u is %s/n&, i, fields[i].name);
num_fields
MYSQL_FIELD *
num_fields
mysql_num_fields
mysql_fetch_fields
num_fields
&Field %u is %s/n&
&mysql_free_result()
void mysql_free_result(MYSQL_RES *result)
释放由mysql_store_result()、mysql_use_result()、mysql_list_dbs()等为结果集分配的内存。完成对结果集的操作后,必须调用mysql_free_result()释放结果集使用的内存。
释放完成后,不要尝试访问结果集。
最后也别忘了 mysql_close(mysql) !
永远记得要释放结果集!!!
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致--站内查询--
文章排行榜
学时:20 -
学时:258 -
学时:180 -
学时:35天 -
手把手网络教程网络之MYSQL全攻略25
确定使用的filesort算法的索引值大小的限值。参见7.2.12节,“MySQL如何优化ORDER BY”。
·&&&&&&&& max_relay_log_size
如果复制从服务器写入中继日志时超出给定值,则滚动中继日志。通过该变量你可以对中继日志和二进制日志设置不同的限制。但是,将该变量设置为0,MySQL可以对二进制日志和中继日志使用max_binlog_size。max_relay_log_size必须设置在4096字节和1GB(包括)之间,或为0。 默认值是0。参见6.3节,“复制实施细节”。
·&&&&&&&& max_seeks_for_key
限制根据键值寻找行时的最大搜索数。MySQL优化器假定当用扫描键在表内搜索匹配的行时,不需要超过该数量的键值搜索,而不管键的实际基数是什么(参见13.5.4.11节,“SHOW INDEX语法”)。将该值设置为较低的值(100?),你可以强制MySQL选择键值而不选择表扫描。
·&&&&&&&& max_sort_length
当排序BLOB或TEXT值时使用的字节数。只使用每个值的前max_sort_length字节;其它的被忽略。
·&&&&&&&& max_tmp_tables
客户端可以同时打开的临时表的最大数。(但该选项还未生效)。
·&&&&&&&& max_user_connections
任何给定的MySQL账户允许的最大同时连接数。0值表示“没有限制”。
该变量具有全局范围和(只读)会话范围。会话变量的的值与全局变量的值相同,除非当前账户具有非零MAX_USER_CONNECTIONS资源限制。在这种情况下,会话值反应了账户限制。
·&&&&&&&& max_write_lock_count
超过写锁定限制后,允许部分读锁定。
·&&&&&&&& myisam_data_pointer_size
默认指针大小,单位是字节,当未指定MAX_ROWS选项时,CREATE TABLE使用该变量创建MyISAM表。该变量不能小于2或大于7。 默认值是6。参见A.2.11节,“表已满”。
·&&&&&&&& (DEPRECATED) myisam_max_extra_sort_file_size
注释:MySQL 5.1不支持该变量。详细信息参见MySQL 5.0 参考手册。
·&&&&&&&& myisam_max_sort_file_size
重建MyISAM索引(在REPAIR TABLE、ALTER TABLE或LOAD DATA INFILE过程中)时,允许MySQL使用的临时文件的最大空间大小。如果文件的大小超过该值,则使用键值缓存创建索引,要慢得多。该值的单位为字节。
·&&&&&&&& myisam_recover_options
--myisam-recover选项的值。
·&&&&&&&& myisam_repair_threads
如果该值大于1,在Repair by sorting过程中并行创建MyISAM表索引(每个索引在自己的线程内)。 默认值是1。注释:多线程维护仍然是alpha 编码。
·&&&&&&&& myisam_sort_buffer_size
当在REPAIR TABLE或用CREATE INDEX创建索引或ALTER TABLE过程中排序 MyISAM索引分配的缓冲区。
·&&&&&&&& myisam_stats_method
当为MyISAM表搜集关于索引值分发的统计信息时服务器如何处理NULL值。该变量有两个可能的值,nulls_equal和nulls_unequal。对于nulls_equal,认为所有NULL索引值时相等的,并形成一个数值组,其空间大小等于NULL值的数。对于nulls_unequal,NULL值认为是不相等的,每个NULL形成一个数值组,大小为1。
方法用于生成表统计信息,影响优化器如何选择索引来执行查询,详细描述见7.4.7节,“MyISAM索引统计集合”。
·&&&&&&&& multi_read_range
指定范围选择过程中发送到存储引擎的范围的最大值。默认值是256。向引擎发送多个范围可以大大改进某些选择的性能,特别是对NDBCLUSTER。该引擎需要向所有节点发送范围请求,同时发送许多请求可以大大降低通信成本。
·&&&&&&&& named_pipe
(只适用Windows)说明服务器是否支持命名管道连接。
·&&&&&&&& net_buffer_length
在查询之间将通信缓冲区重设为该值。一般情况不应改变,但如果内存很小,可以将它设置为期望的客户端发送的SQL语句的长度。如果语句超出该长度,缓冲区自动扩大,直到max_allowed_packet字节。
·&&&&&&&& net_read_timeout
中断读前等待连接的其它数据的秒数。当服务器从客户端读数时,net_read_timeout指控制何时中断的超时值。当服务器向客户端写时,net_write_timeout指控制何时中断的超时值。又见slave_net_timeout。
·&&&&&&&& net_retry_count
如果某个通信端口的读操作中断了,在放弃前重试多次。在FreeBSD中该值应设得很高,因为内部中断将发送至所有线程。
·&&&&&&&& net_write_timeout
中断写之前等待块写入连接的秒数。又见net_read_timeout。
·&&&&&&&& new
在MySQL 4.0中使用该变量来打开4.1中的一些行为,并用于向后兼容性。在MySQL 5.1中,它的值一直是OFF.
·&&&&&&&& old_passwords
是否服务器应为MySQL用户账户使用pre-4.1-style密码。参见A.2.3节,“客户端不支持鉴定协议”。
·&&&&&&&& one_shot
这不是一个变量,但当设置变量是可以使用它。其描述见13.5.3节,“SET语法”。
·&&&&&&&& one_shot
这不是一个变量,但当设置变量是可以使用它。其描述见13.5.3节,“SET语法”。
·&&&&&&&& open_files_limit
操作系统允许mysqld打开的文件的数量。这是系统允许的实际值,可能与你在启动选项中赋给mysqld的值不同。若在系统中MySQL不能更改打开的文件的数量,则该值为0。
·&&&&&&&& optimizer_prune_level
在查询优化从优化器搜索空间裁减低希望局部计划中使用的控制方法。0值禁用该方法,以便优化器进行穷举搜索。值为1使优化器根据中间方案中得出的行数来裁减方案。
·&&&&&&&& optimizer_search_depth
查询优化器进行的搜索的最大深度。如果值大于查询中的关系数则查询方案比较佳,但生成查询执行方案需要的时间更长。值大于查询中的关系数则返回的执行方案更快,但方案远没有优化。如果设置为0, 系统自动选择合理的值。如果设置为查询中使用的表的最大数加2,优化器转换为MySQL 5.0.0(和以前的版本)中使用的算法并搜索。
·&&&&&&&& pid_file
进程ID (PID)文件的路径名。可以用--pid-file选项设置该变量。
·&&&&&&&& plugin_dir
插件目录的路径。在MySQL 5.1.2中加入了该变量。
·&&&&&&&& port
服务器帧听TCP/IP连接所用端口。可以用--port选项设置该变量。
·&&&&&&&& preload_buffer_size
重载索引时分配的缓冲区大小。
·&&&&&&&& protocol_version
MySQL服务器使用的客户端/服务器协议的版本。
·&&&&&&&& query_alloc_block_size
为查询分析和执行过程中创建的对象分配的内存块大小。如果内存分段过程中遇到问题,将该变量增加一位会有帮助。
·&&&&&&&& query_cache_limit
不要缓存大于该值的结果。默认值是MB)。
·&&&&&&&& query_cache_min_res_unit
查询缓存分配的最小块的大小(字节)。 默认值是4096(4KB)。关于该变量的调节信息参见5.13.3节,“查询高速缓冲配置”。
·&&&&&&&& query_cache_size
为缓存查询结果分配的内存的数量。默认值是0,即禁用查询缓存。请注意即使query_cache_type设置为0也将分配此数量的内存。详细信息参见5.13.3节,“查询高速缓冲配置”。
·&&&&&&&& query_cache_type
设置查询缓存类型。设置GLOBAL值可以设置后面的所有客户端连接的类型。客户端可以设置SESSION值以影响他们自己对查询缓存的使用。下面的表显示了可能的值:
选项&描述&0或OFF&不要缓存或查询结果。请注意这样不会取消分配的查询缓存区。要想取消,你应将query_cache_size设置为0。&1或ON&缓存除了以SELECT SQL_NO_CACHE开头的所有查询结果。&2或DEMAND&只缓存以SELECT SQL_NO_CACHE开头的查询结果。&
该变量默认设为ON。
·&&&&&&&& query_cache_wlock_invalidate
一般情况,当客户端对MyISAM表进行WRITE锁定时,如果查询结果位于查询缓存中,则其它客户端未被锁定,可以对该表进行查询。将该变量设置为1,则可以对表进行WRITE锁定,使查询缓存内所有对该表进行的查询变得非法。这样当锁定生效时,可以强制其它试图访问表的客户端来等待。
·&&&&&&&& query_prealloc_size
用于查询分析和执行的固定缓冲区的大小。在查询之间该缓冲区不释放。如果你执行复杂查询,分配更大的query_prealloc_size值可以帮助提高性能,因为它可以降低查询过程中服务器分配内存的需求。
·&&&&&&&& range_alloc_block_size
范围优化时分配的块的大小。
·&&&&&&&& read_buffer_size
每个线程连续扫描时为扫描的每个表分配的缓冲区的大小(字节)。如果进行多次连续扫描,可能需要增加该值, 默认值为131072。
·&&&&&&&& read_only
当变量对复制从服务器设置为ON时,从服务器不允许更新,除非通过从服务器的线程或用户拥有SUPER权限。可以确保从服务器不接受客户端的更新命令。
·&&&&&&&& relay_log_purge
当不再需要中继日志时禁用或启用自动清空中继日志。默认值是1(启用)。
·&&&&&&&& read_rnd_buffer_size
当排序后按排序后的顺序读取行时,则通过该缓冲区读取行,避免搜索硬盘。将该变量设置为较大的值可以大大改进ORDER BY的性能。但是,这是为每个客户端分配的缓冲区,因此你不应将全局变量设置为较大的值。相反,只为需要运行大查询的客户端更改会话变量。
·&&&&&&&& secure_auth
如果用--secure-auth选项启动了MySQL服务器,它将阻塞有旧格式(4.1之前)密码的所有账户所发起的连接。在这种情况下,该变量的值为ON,否则为OFF。
如果你想要防止使用旧格式的密码(致使网络通信不安全),你应启用该选项。
如果启用该选项并且授权表为pre-4.1格式,服务器启动失败并且会出现错误。参见A.2.3节,“客户端不支持鉴定协议”。
当用于客户端选项时,如果服务器需要该客户端账户的旧格式的密码,则客户端拒绝连接该服务器。
·&&&&&&&& server_id
--server-id选项的值。用于主复制服务器和从复制服务器。
·&&&&&&&& shared_memory
(只用于Windows)服务器是否允许共享内存连接。
·&&&&&&&& shared_memory_base_name
(只用于Windows)说明服务器是否允许共享内存连接,并为共享内存设置识别符。当在单台机器上运行多个MySQL实例时很有用。
·&&&&&&&& skip_external_locking
评论姓名:
请输入姓名!
请输入评论!
您的评论在管理员审核后方可显示
承担一切因您的行为而直接或间接导致的民事或刑事法律责任,本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论,参与本评论即表明您已经阅读并接受上述条款
等待你的加入...

我要回帖

更多关于 mysql 执行sql文件 的文章

 

随机推荐