Linux环境下Mysql与C相关技术文档.docx

上传人:b****8 文档编号:11044917 上传时间:2023-02-24 格式:DOCX 页数:18 大小:459.46KB
下载 相关 举报
Linux环境下Mysql与C相关技术文档.docx_第1页
第1页 / 共18页
Linux环境下Mysql与C相关技术文档.docx_第2页
第2页 / 共18页
Linux环境下Mysql与C相关技术文档.docx_第3页
第3页 / 共18页
Linux环境下Mysql与C相关技术文档.docx_第4页
第4页 / 共18页
Linux环境下Mysql与C相关技术文档.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

Linux环境下Mysql与C相关技术文档.docx

《Linux环境下Mysql与C相关技术文档.docx》由会员分享,可在线阅读,更多相关《Linux环境下Mysql与C相关技术文档.docx(18页珍藏版)》请在冰豆网上搜索。

Linux环境下Mysql与C相关技术文档.docx

Linux环境下Mysql与C相关技术文档

 

Linux环境下Mysql与C相关技术文档

 

拟制:

李邦柱

日期:

2014-9-18

审核:

日期:

批准:

日期:

 

文档编号:

YFZX-LIBZ-004

创建日期:

2014-9-18

最后修改日期:

2014-09-18

版本号:

V1.0

电子版文件名:

linux环境下mysql与C相关技术文档.doc

文档修改记录

修改日期

修改人

修改说明

版本号

修改页

目录

Linux环境下Mysql与C相关技术文档1

1概述3

2安装mysql3

2.1通过网络安装mysql3

2.1.1检查是否已经安装mysql4

2.1.2通过yum来进行mysql的安装4

2.2离线安装mysql5

2.2.1检查是否安装mysql5

2.2.2通过rpm安装mysql5

2.3mysql设置密码6

2.4mysql设置开机启动6

2.5Mysql数据库的主要配置6

3C与Mysql7

3.1MysqlCAPI函数概述7

3.2API使用的一般原则11

4CAPI使用示例13

4.1连接数据库13

4.2数据库查询14

4.3数据库插入数据15

4.4数据库删除17

 

1概述

MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle公司。

MySQL是最流行的关系型数据库管理系统。

支持AIX、FreeBSD、HP-UX、Linux、MacOS、NovellNetware、OpenBSD、OS/2Wrap、Solaris、Windows等多种操作系统。

为多种编程语言提供了API。

这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby,.NET和Tcl等。

2安装mysql

2.1通过网络安装mysql

2.1.1检查是否已经安装mysql

#rpm-qa|grepmysql  

//上述命令就会查看该操作系统上是否已经安装了mysql数据库

有的话,我们就通过rpm-e命令或者rpm-e--nodeps命令来卸载掉

#rpm-e--nodepsmysql

在删除完以后我们可以通过rpm-qa|grepmysql命令来查看mysql是否已经卸载成功!

2.1.2通过yum来进行mysql的安装

#yuminstall-ymysql-servermysqlmysql-deve

通过输入yuminstall-ymysql-servermysqlmysql-devel命令将mysqlmysql-servermysql-devel都安装好(注意:

安装mysql时我们并不是安装了mysql客户端就相当于安装好了mysql数据库了,我们还需要安装mysql-server服务端才行)

通过yum方式安装mysql数据库省去了很多没必要的麻烦,当出现下面的结果时,就代表mysql数据库安装成功了

此时我们可以通过如下命令,查看刚安装好的mysql-server的版本

#rpm-qimysql-server

2.2离线安装mysql

2.2.1检查是否安装mysql

方法同2.1.1

2.2.2通过rpm安装mysql

1.需要准备离线安装包

MySQL-server-5.5.30-1.el6.x86_64.rpm

MySQL-client-5.5.30-1.el6.x86_64.rpm

MySQL-devel-5.5.30-1.el6.x86_64.rpm

2.安装新的MySQL

#rpm-ivhMySQL-server-5.5.30-1.el6.x86_64.rpm

#rpm-ivhMySQL-client-5.5.30-1.el6.x86_64.rpm

#rpm-ivhMySQL-devel-5.5.30-1.el6.x86_64.rpm

3.启动MySQL服务

#servicemysqlstart

4.查看mysql运行状态

#/etc/rc.d/init.d/mysqldstatus

5.MySQL服务一些其他命令

a、察看mysql是否在自动启动列表:

#/sbin/chkconfig–list

b、添加mysql到系统自启动服务组:

#/sbin/chkconfig –add mysql

c、把mysql从启动服务组中删除:

#/sbin/chkconfig –del mysql

d、停止mysql服务:

#servicemysqldstop

e、脚本启动mysql服务:

#/etc/rc.d/init.d/mysqldstart

f、脚本停止mysql服务:

#/etc/rc.d/init.d/mysqldstop

2.3mysql设置密码

命令如下:

#/usr/bin/mysqladmin-urootpassword'123456'

2.4mysql设置开机启动

2.4.1.1查看Mysql服务是否是开机启动

命令如下:

#chkconfig--list|grepmysqld

2.4.1.2设置开机启动

命令如下:

#chkconfigmysqldon

2.5Mysql数据库的主要配置

/etc/f这是mysql的主配置文件

我们可以查看一下这个文件的一些信息

#catf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

#Disablingsymbolic-linksisrecommendedtopreventassortedsecurityrisks

symbolic-links=0

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

简要介绍

./var/lib/mysqlmysql数据库的数据库文件存放位置

./var/logmysql数据库的日志输出存放位置

3C与Mysql

3.1MysqlCAPI函数概述

这里归纳了CAPI可使用的函数

函数

描述

mysql_affected_rows()

返回上次UPDATE、DELETE或INSERT查询更改/删除/插入的行数。

mysql_autocommit()

切换 autocommit模式,ON/OFF

mysql_change_user()

更改打开连接上的用户和数据库。

mysql_charset_name()

返回用于连接的默认字符集的名称。

mysql_close()

关闭服务器连接。

mysql_commit()

提交事务。

mysql_connect()

连接到MySQL服务器。

该函数已不再被重视,使用mysql_real_connect()取代。

mysql_create_db()

创建数据库。

该函数已不再被重视,使用SQL语句CREATEDATABASE取而代之。

mysql_data_seek()

在查询结果集中查找属性行编号。

mysql_debug()

用给定的字符串执行DBUG_PUSH。

mysql_drop_db()

撤销数据库。

该函数已不再被重视,使用SQL语句DROPDATABASE取而代之。

mysql_dump_debug_info()

让服务器将调试信息写入日志。

mysql_eof()

确定是否读取了结果集的最后一行。

该函数已不再被重视,可以使用mysql_errno()或mysql_error()取而代之。

mysql_errno()

返回上次调用的MySQL函数的错误编号。

mysql_error()

返回上次调用的MySQL函数的错误消息。

mysql_escape_string()

为了用在SQL语句中,对特殊字符进行转义处理。

mysql_fetch_field()

返回下一个表字段的类型。

mysql_fetch_field_direct()

给定字段编号,返回表字段的类型。

mysql_fetch_fields()

返回所有字段结构的数组。

mysql_fetch_lengths()

返回当前行中所有列的长度。

mysql_fetch_row()

从结果集中获取下一行

mysql_field_seek()

将列光标置于指定的列。

mysql_field_count()

返回上次执行语句的结果列的数目。

mysql_field_tell()

返回上次mysql_fetch_field()所使用字段光标的位置。

mysql_free_result()

释放结果集使用的内存。

mysql_get_client_info()

以字符串形式返回客户端版本信息。

mysql_get_client_version()

以整数形式返回客户端版本信息。

mysql_get_host_info()

返回描述连接的字符串。

mysql_get_server_version()

以整数形式返回服务器的版本号。

mysql_get_proto_info()

返回连接所使用的协议版本。

mysql_get_server_info()

返回服务器的版本号。

mysql_info()

返回关于最近所执行查询的信息。

mysql_init()

获取或初始化MYSQL结构。

mysql_insert_id()

返回上一个查询为AUTO_INCREMENT列生成的ID。

mysql_kill()

杀死给定的线程。

mysql_library_end()

最终确定MySQLCAPI库。

mysql_library_init()

初始化MySQLCAPI库。

mysql_list_dbs()

返回与简单正则表达式匹配的数据库名称。

mysql_list_fields()

返回与简单正则表达式匹配的字段名称。

mysql_list_processes()

返回当前服务器线程的列表。

mysql_list_tables()

返回与简单正则表达式匹配的表名。

mysql_more_results()

检查是否还存在其他结果。

mysql_next_result()

在多语句执行过程中返回/初始化下一个结果。

mysql_num_fields()

返回结果集中的列数。

mysql_num_rows()

返回结果集中的行数。

mysql_options()

为mysql_connect()设置连接选项。

mysql_ping()

检查与服务器的连接是否工作,如有必要重新连接。

mysql_query()

执行指定为“以Null终结的字符串”的SQL查询。

mysql_real_connect()

连接到MySQL服务器。

mysql_real_escape_string()

考虑到连接的当前字符集,为了在SQL语句中使用,对字符串中的特殊字符进行转义处理。

mysql_real_query()

执行指定为计数字符串的SQL查询。

mysql_refresh()

刷新或复位表和高速缓冲。

mysql_reload()

通知服务器再次加载授权表。

mysql_rollback()

回滚事务。

mysql_row_seek()

使用从mysql_row_tell()返回的值,查找结果集中的行偏移。

mysql_row_tell()

返回行光标位置。

mysql_select_db()

选择数据库。

mysql_server_end()

最终确定嵌入式服务器库。

mysql_server_init()

初始化嵌入式服务器库。

mysql_set_server_option()

为连接设置选项(如多语句)。

mysql_sqlstate()

返回关于上一个错误的SQLSTATE错误代码。

mysql_shutdown()

关闭数据库服务器。

mysql_stat()

以字符串形式返回服务器状态。

mysql_store_result()

检索完整的结果集至客户端。

mysql_thread_id()

返回当前线程ID。

mysql_thread_safe()

如果客户端已编译为线程安全的,返回1。

mysql_use_result()

初始化逐行的结果集检索。

mysql_warning_count()

返回上一个SQL语句的告警数。

3.2API使用的一般原则

与MySQL交互时,应用程序应使用该一般性原则:

1.通过调用mysql_library_init(),初始化MySQL库。

库可以是mysqlclientC客户端库,或mysqld嵌入式服务器库,具体情况取决于应用程序是否与“-libmysqlclient”或“-libmysqld”标志链接。

2.通过调用mysql_init()初始化连接处理程序,并通过调用mysql_real_connect()连接到服务器。

3.发出SQL语句并处理其结果。

(在下面的讨论中,详细介绍了使用它的方法)。

4.通过调用mysql_close(),关闭与MySQL服务器的连接。

5.通过调用mysql_library_end(),结束MySQL库的使用。

调用mysql_library_init()和mysql_library_end()的目的在于,为MySQL库提供恰当的初始化和结束处理。

对于与客户端库链接的应用程序,它们提供了改进的内存管理功能。

如果不调用mysql_library_end(),内存块仍将保持分配状态(这不会增加应用程序使用的内存量,但某些内存泄漏检测器将抗议它)。

对于与嵌入式服务器链接的应用程序,这些调用会启动并停止服务器。

mysql_library_init()和mysql_library_end()实际上是#define符号,这类符号使得它们等效于mysql_server_init()和mysql_server_end(),但其名称更清楚地指明,无论应用程序使用的是mysqlclient或mysqld库,启动或结束MySQL库时,应调用它们。

对于早期的MySQL版本,可调用mysql_server_init()和mysql_server_end()取而代之。

如果愿意,可省略对mysql_library_init()的调用,这是因为,必要时,mysql_init()会自动调用它。

要想连接到服务器,可调用mysql_init()来初始化连接处理程序,然后用该处理程序(以及其他信息,如主机名、用户名和密码)调用mysql_real_connect()。

建立连接后,在低于5.0.3版的API中,mysql_real_connect()会将再连接标志(MYSQL结构的一部分)设置为1,或在较新的版本中,将其设置为0。

对于该标志,值“1”指明,如果因连接丢失而无法执行语句,放弃之前,会尝试再次连接到服务器。

从MySQL5.0.13开始,可以在mysql_options()上使用MYSQL_OPT_RECONNECT选项,以控制再连接行为。

完成连接后,调用mysql_close()中止它。

当连接处于活动状态时,客户端或许会使用mysql_query()或mysql_real_query()向服务器发出SQL查询。

两者的差别在于,mysql_query()预期的查询为指定的、由Null终结的字符串,而mysql_real_query()预期的是计数字符串。

如果字符串包含二进制数据(其中可能包含Null字节),就必须使用mysql_real_query()。

对于每个非SELECT查询(例如INSERT、UPDATE、DELETE),通过调用mysql_affected_rows(),可发现有多少行已被改变(影响)。

对于SELECT查询,能够检索作为结果集的行。

注意,某些语句因其返回行,类似与SELECT。

包括SHOW、DESCRIBE和EXPLAIN。

应按照对待SELECT语句的方式处理它们。

客户端处理结果集的方式有两种。

一种方式是,通过调用mysql_store_result(),一次性地检索整个结果集。

该函数能从服务器获得查询返回的所有行,并将它们保存在客户端。

第二种方式是针对客户端的,通过调用mysql_use_result(),对“按行”结果集检索进行初始化处理。

该函数能初始化检索结果,但不能从服务器获得任何实际行。

在这两种情况下,均能通过调用mysql_fetch_row()访问行。

通过mysql_store_result(),mysql_fetch_row()能够访问以前从服务器获得的行。

通过mysql_use_result(),mysql_fetch_row()能够实际地检索来自服务器的行。

通过调用mysql_fetch_lengths(),能获得关于各行中数据大小的信息。

完成结果集操作后,请调用mysql_free_result()释放结果集使用的内存。

这两种检索机制是互补的。

客户端程序应选择最能满足其要求的方法。

实际上,客户端最常使用的是mysql_store_result()。

mysql_store_result()的1个优点在于,由于将行全部提取到了客户端上,你不仅能连续访问行,还能使用mysql_data_seek()或mysql_row_seek()在结果集中向前或向后移动,以更改结果集内当前行的位置。

通过调用mysql_num_rows(),还能发现有多少行。

另一方面,对于大的结果集,mysql_store_result()所需的内存可能会很大,你很可能遇到内存溢出状况。

mysql_use_result()的1个优点在于,客户端所需的用于结果集的内存较少,原因在于,一次它仅维护一行(由于分配开销较低,mysql_use_result()能更快)。

它的缺点在于,你必须快速处理每一行以避免妨碍服务器,你不能随机访问结果集中的行(只能连续访问行),你不知道结果集中有多少行,直至全部检索了它们为止。

不仅如此,即使在检索过程中你判定已找到所寻找的信息,也必须检索所有的行。

通过API,客户端能够恰当地对查询作出响应(仅在必要时检索行),而无需知道查询是否是SELECT查询。

可以在每次mysql_query()或mysql_real_query()后,通过调用mysql_store_result()完成该操作。

如果结果集调用成功,查询为SELECT,而且能够读取行。

如果结果集调用失败,可调用mysql_field_count()来判断结果是否的确是所预期的。

如果mysql_field_count()返回0,查询不返回数据(表明它是INSERT、UPDATE、DELETE等),而且不返回行。

如果mysql_field_count()是非0值,查询应返回行,但没有返回行。

这表明查询是失败了的SELECT。

关于如何实现该操作的示例,请参见关于mysql_field_count()的介绍。

无论是mysql_store_result()还是mysql_use_result(),均允许你获取关于构成结果集的字段的信息(字段数目,它们的名称和类型等)。

通过重复调用mysql_fetch_field(),可以按顺序访问行内的字段信息,或者,通过调用mysql_fetch_field_direct(),能够在行内按字段编号访问字段信息。

通过调用mysql_field_seek(),可以改变当前字段的光标位置。

对字段光标的设置将影响后续的mysql_fetch_field()调用。

此外,你也能通过调用mysql_fetch_fields(),一次性地获得关于字段的所有信息。

为了检测和通报错误,MySQL提供了使用mysql_errno()和mysql_error()函数访问错误信息的机制。

它们能返回关于最近调用的函数的错误代码或错误消息,最近调用的函数可能成功也可能失败,这样,你就能判断错误是在何时出现的,以及错误是什么。

4CAPI使用示例

4.1连接数据库

/*练习mysql数据库的连接*/

#include

#include

intmain()

{

MYSQLmysql;

intt,r;

/*连接之前,先用mysql_init初始化MYSQL连接句柄*/

mysql_init(&mysql);

/*使用mysql_real_connect连接服务器,其参数依次为MYSQL句柄,服务器IP地址,

登录mysql的用户名,密码,要连接的数据库等*/

if(!

mysql_real_connect(&mysql,"localhost","root","6748355","spytest",0,NULL,0))

printf("ErrorconnectingtoMysql!

\n");

else

printf("ConnectedMysqlsuccessful!

\n");

/*关闭连接*/

mysql_close(&mysql);

return0;

}

4.2数据库查询

/*练习mysql数据库的查询*/

#include

#include

#include"mysql.h"

intmain()

{

MYSQLmysql;

MYSQL_RES*res;

MYSQL_ROWrow;

char*query;

intflag,t;

mysql_init(&mysql);

if(!

mysql_real_connect(&mysql,"localhost","root","6748355","spytest",0,NULL,0)){

printf("FailedtoconnecttoMysql!

\n");

return0;

}else{

printf("ConnectedtoMysqlsuccessfully!

\n");

}

query="select*fromlog";

/*查询,成功则返回0*/

flag=mysql_real_query(&mysql,query,(unsignedint)strlen(query));

if(flag){

printf("Queryfail

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 经济学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1