使用C语言访问MySQL数据库基础
一、MySQL管理
包含在MySQL发行版中的一些有用的工具程序使管理工作变得相当容易。
除mysqlshow命令以外,所有的MySQL命令都接受所示的3个标准参数
命令选项 |
参数 |
说明 |
-u |
用户名 |
在默认情况下,mysql工具会尝试把当前linux的用户名作为MySQL的用户名,可以使用-u参数来指定一个不同的用户名 |
-p |
[密码] |
如果给出了-p参数但是未提供密码,系统会提示输入密码。 如果没有给出-p参数,MySQL命令将假设不需要密码 |
-h |
主机名 |
用于连接位于不同主机上的服务器(这个参数对于本地服务器总是可以省略) |
1、mysql命令
#mysql –u rick –p database-name
#mysql –u rick --password=secretpassworddatabase-name <sqlcommands.sql
当mysql客户端连接到服务器后,除了标准SQL92命令集外,还有以下特定命令也会被mysql支持
命令 |
可选的简短形式 |
说明 |
help 或? |
\h或\? |
显示命令列表 |
edit |
\e |
编辑命令。使用的编辑器由环境变量$EDITOR决定 |
exit或quit |
\q |
退出MySQL客户端 |
Go |
\g |
执行命令 |
source <filename> |
\. |
从指定文件执行SQL |
Status |
\s |
显示服务器状态信息 |
System <command> |
\! |
执行一个系统命令 |
tee <filename> |
\T |
把所有文件的副本添加到指定文件中 |
Use <database> |
\u |
使用给定的数据库 |
每个数据库都是一个独立的表格集,这使得我们可以外对不同的目的建立不同的数据库,并为每个数据库指定不同的用户,而只需要使用同一个数据库服务器就可以有效管理它们了。
2、mysqladmin 快速进行MySQL数据库管理的主要工具
mysqladmin支持的命令
命令 |
说明 |
create <database_name> |
创建一个数据库 |
drop <database_name> |
删除一个数据库 |
Password <new_password> |
修改密码 |
Ping |
检查服务器是否正在运行 |
reload |
重载控制权限grant表 |
Status |
提供服务器的状态 |
Shutdown |
停止服务器 |
Variables |
显示控制MySQL操作的变量及其当前值 |
Version |
提供服务器的版本号以及它持续运行的时间 |
3、mysqldump
作用:以SQL命令集的形式将部分或整个数据库导出到一个单独文件中,该文件能被重新导入MySQL或其它的SQL RDBMS。它接受数据库名和表名作为参数
命令 |
说明 |
--add-drop-table |
添加sql命令到输出文件,以在创建表的命令之前丢弃(删除)任何表 |
-e |
使用扩展的insert语法,这不是sql标准,但是如果在正转储大量数据,那么当你试图重新加载这些数据到MySQL时,这将加速转储数据的加载速度 |
-t |
只转储(备份)表中数据,而不是用来创建表的信息 |
-d |
只转储(备份)表结构,而不是实际数据 |
例:#mysqldump –u rick –p db-name >db-name.dump
4、mysqlimport
作用:用于将批量数据导入到一个表中
通过使用mysqlimport,可以从一个输入文件中读取大量的文本数据。这个命令唯一的参数需求是一个文件名和一个数据库名。默认情况下,数据应以tab分隔符分开。
5、mysqlshow
作用:快速了解MySQL安装及其组成数据库的信息
l 不提供参数,它列出所有可用的数据库
l 以一个数据库为参数,它列出该数据库中的表
l 以数据训和表名为参数,它列出表中的列
l 以数据库、表和列为参数,它列出指定列的详细信息
二、连接例程
用C语言连接MySQL数据库包含两个步骤
l 初始化一个连接句柄结构
l 实际进行连接
1、 使用mysql_init来初始化连接句柄
#include “mysql.h”
MYSQL *mysql_init(MYSQL *);
返回值:通常传递NULL给这个例程,它会返回一个指向新分配的连接句柄结构的指针
若传递一个已有的结构,它将被重新初始化。
出错时返回NULL
2、 进行实际连接
#include “mysql.h”
MYSQL *mysql_real_connect(MYSQL *connection,
const char*server_host,//localhost
const char*sql_user_name,
const char*sql_password,
const char *db_name,
unsigned intport_number,//端口号,一般为0
const char*unix_socket_name,//套接字,一般为null
unsigned int flags);
参数:connection 必须指向已经被mysql_init初始化过的结构
Sql_user_name和sql_password如果登录名为NULL,则假设登录名为当前Linux用户的登录ID,
如果密码为NULL,将只能访问服务器上无需密码就可访问的数据,密码会在
通过网络传输前进行加密
Port_number和unix_socket_name应该分别为0和NULL
flags用来对一些定义的位模式进行OR操作
返回值:若无法连接,它将返回NULL,mysql_error函数可以提供有帮助的信息
3、 关闭连接
#include “mysql.h”
Void mysql_close(MYSQL *connection);
如果连接是由mysql_init建立的,MYSQL结构会被释放。指针将会失效并无法再次使用
4、 mysql_options例程
可以在mysql_init和mysql_real_connect之间调用设置一些选项
#include “mysql.h”
Int mysql_options(MYSQL *connection, enum option_to_set, const char*argument);
说明:mysql_options例程一次只能设置一个选项,所以每设置一个选项就得调用它一次,同时,该例程必须出现在mysql_init和mysql_real_connect之间即可。
选 项
enum选项 |
实际参数类型 |
说明 |
MySQL_OPT_CONNECT_TIMEOUT |
Const unsigned int * |
连接超时之前的等待秒数 |
MySQL_OPT_COMPRESS |
None, 使用NULL |
网络连接中使用压缩机制 |
MySQL_INIT_COMMAND |
Const char * |
每次连接建立后发送的命令 |
返回值:一次成功的调用将返回0。因为它仅仅是用来设置标志,所以失败总是意味着使用了一个无效的选项。
例:如果要设置连接超时时间为7秒,其代码片断如下:
Unsigned intti