mysql编程

首先安装mysql数据库及其动态链接库,

sudo apt-get install mysql-server

sudo apt-get install mysql-client

sudo apt-get install libmysqlclient-dev

安装过程很简单,根据提示安装即可

有一些对象我们要先知道一下

MYSQL :结构体,是我们连接数据库,操作数据库重要的对象

typedef struct st_mysql
{
NET net; /* Communication parameters 通讯参数,网络相关*/
unsigned char *connector_fd; /* ConnectorFd for SSL 加密套接字协议层*/
char *host,*user,*passwd,*unix_socket,*server_version,*host_info; /*数据库用户名,密码,主机名,Unix套接字,版本,主机信息*/
char *info, *db;
struct charset_info_st *charset;
MYSQL_FIELD *fields; /*字段列表*/
MEM_ROOT field_alloc;
my_ulonglong affected_rows;
my_ulonglong insert_id; /* id if insert on table with NEXTNR 下一条记录的ID*/
my_ulonglong extra_info; /* Not used 未使用*/
unsigned long thread_id; /* Id for connection in server 数据库服务器中的连接ID*/
unsigned long packet_length;
unsigned int port; /*端口*/
unsigned long client_flag,server_capabilities; /*客户端状态,服务器服务*/
unsigned int protocol_version; /*协议版本*/
unsigned int field_count; /*字段个数*/
unsigned int server_status; /*数据库状态*/
unsigned int server_language; /*数据库语言*/
unsigned int warning_count; /*错误条数*/
struct st_mysql_options options; /*后续学习*/
enum mysql_status status;
my_bool free_me; /* If free in mysql_close 是否关闭*/
my_bool reconnect; /* set to 1 if automatic reconnect 是否自动连接*/
/* session-wide random string */
char scramble[SCRAMBLE_LENGTH+1];
/*
Set if this is the original connection, not a master or a slave we have
added though mysql_rpl_probe() or mysql_set_master()/ mysql_add_slave()
*/
my_bool rpl_pivot;
/*
Pointers to the master, and the next slave connections, points to
itself if lone connection.
*/
struct st_mysql* master, *next_slave; /*系统数据库,自定义数据哭*/
struct st_mysql* last_used_slave; /* needed for round-robin slave pick 端节点数据库*/
/* needed for send/read/store/use result to work correctly with replication */
struct st_mysql* last_used_con; /*最后一个连接*/
LIST *stmts; /* list of all statements 执行语句*/
const struct st_mysql_methods *methods; /*所有方法*/
void *thd;
/*
Points to boolean flag in MYSQL_RES or MYSQL_STMT. We set this flag
from mysql_stmt_close if close had to cancel result set of this object.
*/
my_bool *unbuffered_fetch_owner;
/* needed for embedded server - no net buffer to store the ‘info‘ */
char *info_buffer;
void *extension;
} MYSQL;

MYSQL_RES:结构体,保存数据库返回的结果

typedef struct st_mysql_res {
my_ulonglong row_count; /*记录条数*/
MYSQL_FIELD *fields; /*字段列表*/
MYSQL_DATA *data; /*当前行的数据*/
MYSQL_ROWS *data_cursor; /*下条记录*/
unsigned long *lengths; /* column lengths of current row 当前行的长度*/
MYSQL *handle; /* for unbuffered reads 待续*/
const struct st_mysql_methods *methods; /*方法*/
MYSQL_ROW row; /* If unbuffered read 下条将行缓存的行*/
MYSQL_ROW current_row; /* buffer to current row 当前行*/
MEM_ROOT field_alloc; /*内存相关 待续*/
unsigned int field_count, current_field; /*字段个数,当前字段*/
my_bool eof; /* Used by mysql_fetch_row 是否是最后一条记录*/
/* mysql_stmt_close() had to cancel this result */
my_bool unbuffered_fetch_cancelled;
void *extension;
} MYSQL_RES;

MYSQL_ROW:结构体,返回的结果的单行数据

typedef char **MYSQL_ROW

然后就是一些函数来进行操作所有头文件均为<mysql/mysql.h>

MYSQL *mysql_init(MYSQL *mysql);

初始化MYSQL对象的指针.

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对象以后进行连接数据库

参数:

MYSQL *mysql:上面初始化以后的MYSQL对象指针

const char *host:数据库的地址

const char *user:数据库登陆的用户名

const char *passwd:该用户的密码

const char *db:登陆的数据库名称

unsigned int port:端口号,根据host类型来决定,如果是本地的则为0

const char *unix_socket:网络类型,本地为NULL

unsigned long client_flag:连接属性,通常为0.

以下是client_flag的取值:

  1. can_handle_expired_passwords客户机可以处理过期的密码
  2. client_compress使用压缩在客户端/服务器协议。
  3. client_found_rows返回发现(匹配)的行数,而不是改变的行数。
  4. client_ignore_sigpipe阻止客户端库安装一个SIGPIPE信号处理程序。这可以用来避免冲突的处理程序已经安装的应用程序。
  5. client_ignore_space允许空间。使所有的函数名称保留字。
  6. client_interactive允许interactive_timeout秒的静止(而不是wait_timeout秒)在关闭连接之前。客户的会话wait_timeout变量设置为会话interactive_timeout变量的值。
  7. client_local_files启用数据加载本地处理。
  8. client_multi_results告诉服务器,客户端可以处理多个结果集由多个语句执行或存储过程。这个标志是自动启用CLIENT_MULTI_STATEMENTS是否启用。有关更多信息,请参见此表后注意这个标志。
  9. client_multi_statements告诉服务器,客户端可以发送多个语句在一个字符串(隔开;字符)。如果没有设置这个标志,多个语句执行是禁用的。有关更多信息,请参见此表后注意这个标志。
  10. client_no_schema不允许db_name.tbl_name。col_name语法。这是对于ODBC。它使解析器生成一个错误如果你使用语法,这是用于捕获错误在某些ODBC程序。
  11. client_odbc未使用。
  12. client_ssl(使用SSL加密的协议)。不设置这个选项在一个应用程序,它被设置在内部在客户端库。相反,使用mysql_ssl_set()调用之前mysql_real_connect()。
  13. client_remember_options记住选项指定调用mysql_options()。没有这个选项,如果mysql_real_connect()失败,你必须重复mysql_options()调用之前再次尝试连接。采用这一选项,mysql_options()调用不需要重复。

const char *mysql_error(MYSQL *mysql)

输出错误信息

int mysql_query(MYSQL *mysql, const char *stmt_str)

用于执行sql语句,第二个参数就是sql语句,语句中不能以";"结尾,如果是多条语句用分号隔开.

返回值:

  成功:0

  错误返回错误码

  可以使用mysql_error()函数查看错误详情

MYSQL_RES *mysql_use_result(MYSQL *mysql)

返回查询结果

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)

读取结果集中的下一行数据,返回为NULL时表示所有的数据经读取完了

unsigned int mysql_num_fields(MYSQL_RES *result)

返回结果集的行数

void mysql_close(MYSQL *mysql)

关闭连接,释放空间

void mysql_free_result(MYSQL_RES *result)

释放结果集的空间

更多的函数可以查看官方文档,写的非常的详细

简单的代码

/**我觉得这个代码够简单了,所以就不写注释了*/
#include <mysql.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argv[]){
    MYSQL *conn = NULL;
    MYSQL_RES *res = NULL;
    MYSQL_ROW row = NULL;

    char server_addr[]  = "localhost";
    char user[] = "root";
    char password[] = "123";
    char database[] = "test";

    conn = mysql_init(NULL);
    mysql_real_connect(conn,server_addr,user,password,database,0,NULL,0);
    if(conn == NULL){
        perror(mysql_error(conn));
        exit(1);
    }

    if(mysql_query(conn,"show tables")){
        perror(mysql_error(conn));
        exit(1);
    }

    res = mysql_use_result(conn);
    while( ( row = mysql_fetch_row(res) ) != NULL ){
        printf("%s\n",row[0]);
    }

    mysql_free_result(res);
    mysql_close(conn);

    return 0;
}
时间: 2024-10-11 17:42:53

mysql编程的相关文章

visual c++ 2013进行MySQL编程(ODBC) -- (一) 套装安装

最近写了有些技术类文章了,只因为最近研究多了些东西,有一些项目用到了,所以自己记录一下,怕自己忘记,如果有哪位同学有自己的见解,可以邮件或者回复,技术类的探讨,不管对否,都是欢迎的. 操作之前,必须安装有Visual Studio 2013,其他的平台,我没有研究,我用的操作系统是Windows 8 Ultimate 64bit. 回到正题,vc数据库编程操作数据库Mysql,使用ODBC驱动接口. 而不是使用Mysql自带的C或者C++接口. 安装数据库,可以下面这个网址这里下载一个大的安装包

Java ee struts2+tomcat+mysql编程 :1.开发环境配置

在Eclipse中配置Tomcat 首先新建Dynamic Web project 点击New Runtime... 选择apache tomcat v7.0,next 在Tomcat installation directory中选择tomcat的安装路径,finish,回到原来的向导,点击next 继续next,然后选中Generate web.xml deployment descriptor 然后finish,然后在eclipse界面下面选中server选项卡,点击给出的link 选择我

mysql重点、视图、事务、备份还原【mysqldump】、mysql编程【触发器、存储函数、存储过程】、存储引擎

1.删除数据需要注意的问题[删除记录delete] 删除数据本身没有太多说的,还是删除表的时候有truncate用法 delete from是逐条删除记录[加不加条件全删,效率低,在删除表方面] truncate是重建表[删除表时效率高] 2.修改数据[update] [一下重点性能] 3.视图(view)[是一张虚拟的表:使客户端在虚拟的表中进行操作] 视图就是一条查询语句的结果[因为查询之后的结果本身就会形成一张表给客户端][视图使用到mysql的内置机制] create view 视图名

php学习 13 数据库的操作--mysql编程

一.数据控制语言 数据控制语言,就是对mysql的用户及其权限进行管理的语句: 1.用户管理 用户数据所在位置 在mysql中的所有用户,都存储在系统数据库mysql中的user表中: 创建用户 形式: create user  ‘用户名’@‘允许登录的地址/服务器’  identified  by ‘密码’; 说明: 1.允许登录的地址服务器就是允许该设定的位置,来使用该设定的为用户名和密码登录,其他位置不行 2.可见,mysql的安全什么验证需要三个信息. 删除用户 drop  user  

Visual C++ 2008进行MySQL编程

visual c++ 2008进行MySQL编程(ODBC) -- (一) 套装安装 visual c++ 2008进行MySQL编程(ODBC) --(二) CDatabase操作数据库 visual c++ 2008进行MySQL编程(ODBC) --三 查询数据库 visual c++ 2008进行MySQL编程(ODBC)-- (四) 终极实现 之 派生CRecordset 上 visual c++ 2008进行MySQL编程(ODBC)-- (四) 终极实现 之 派生CRecordse

MySQL编程API

1.MySQL API数据结构 MySQL API中用到了很多结构体类型,下面就简单说一下常用的结构体. MYSQL 连接数据库前,必须先创建MYSQL变量,此变量在很多MySQL API函数中会用到,它包含了一些连接信息等数据. MYSQL_RES MYSQL_RES结构体中包含了查询结果集,也就是从数据库中查询到的数据.可以使用mysql_store_result或mysql_user_result函数获得. MYSQL_ROW typedef char **MYSQL_ROW,可见,它实际

MySQL编程基础

存储过程 什么是存储过程 存储过程(Stored Procedure)是在大型数据库系统中,一个或多个为了完成特定功能的SQL 语句集(可以视为批处理文件),经编译后存储在数据库中. 创建存储过程 delimiter $ create procedure sp_name ([参数,参数..]) begin 执行体 end delimiter ; 其中,create procedure 为用来创建存储过程的关键字 sp_name为存储过程的名称 begin...end为存储过程执行代码的开始和结束

搞定linux上MySQL编程(六):C语言编写MySQL程序(结)

[版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途] 在实际应用中,我们不可能在命令行登录进数据库进行数据的查询.插入等操作,用户一般是使用一个界面良好的应用程序软件来对数据进行管理.为了方便应用程序的开发,MySQL提供了多种编程语言(C.perl.php等)的编程接口,供开发者使用. 对于C语言来说,MySQL提供了C语言客户机库,它允许从任何C程序的内部访问MySQL数据库,客户机实现API,API定义了客户机如何建立和执

python入门编程之mysql编程

python关于mysql方面的连接编程 前提:引入mysql模块MySQLdb,即:MySQL_python-1.2.5-cp27-none-win_amd64.whl 如果要用线程池,则要引用模块 PooledDB import os import MySQLdb # import sys # reload(sys) # sys.setdefaultencoding('utf-8') # 本实例讲的是单连接方式,如果要提高连接的利用率,可以考虑利用线程池:PooledDB,通过 from D

Mysql学习笔记(七)mysql编程基础之自定义函数。

delimiter $$ create function fn_liangzifunction() returns int no sql begin set @row_no = @row_no + 1; return @row_no; end; $$ delimiter ; delimiter $$ create function fn_get_name(student_num int) returns char(50) reads sql data begin declare student_