MySQL基础及MySQL C API编程

MySQL基础及MySQL C API编程

一、MySQL For Windows安装:

1. 下载:

上官网下载即可:

http://www.mysql.com/downloads/

2. 安装:

没有什么好说的,傻瓜式,也没有什么要注意的。

3. 配置:

添加系统变量MYSQL_HOME和修改PATH,目的就是让系统默认能够找到MySQL命令。(安装目录的/bin下面)

PS:

补充一下,有的朋友可能下载的是免安装版本,拷贝到一个地方就可以了,这个时候,配置还是需要的,但是配置完成之后,需要手动安装MySQL服务。因为我们是想既要搭建MySQL服务器端,又要搭建MySQL客户端,服务器端是需要开启服务的,所以需要手动安装并启动mysql服务。还有就是要注意,网上的一些WAMP集成安装包,只包含了SQL web有关的工具,是不全的,需要安装200多M的那个版本。

相关的几个命令如下:

mysqld -install //安装mysql服务
mysqld -remove  //卸载mysql服务
net start mysql  //启动mysql服务
net stop mysql   //停止mysql服务

mysqladmin -version //查看mysql服务是否安装成功

也可以通过Windows的服务工具来配置MySQL。

二、MySQL基础:

1. 连接MySQL:

首先再明确一个概念,现在我们是在学习如何使用MySQL,我们的MySQL服务器端是安装在本机上,MySQL客户端也是安装在本机上的。我们登录MySQL就是通过CMD命令行工具,用客户端命令mysql登录到本机MySQL服务器端,本机开启的服务是MySQL,进程是mysql.exe。

安装完成之后,默认的Host和User是:

其中密码都为空。

我们有两种方式连接mysql服务器,不指定Host/User/Password默认就是按照localhost匿名用户的方式连接。

退出的mysql服务器使用命令exit或者quit。

mysql //localhost+匿名方式登录
mysql -u root -p //localhost+root+password方式登录
exit //退出mysql服务器

2. 修改mysql服务器用户密码:

mysqladmin -u root -p password //中间提示输入当前密码一次,新密码两次

3. MySQL基础语法:

  • 1.创建数据库,名字为RUNOOB

mysqladmin -u root -p create RUNOOB

  • 2.删除数据库,名字为RUNOOB

mysqladmin -u root -p drop RUNOOB

  • 3.显示数据库:

mysql> show databases; //注意后面要加;号,表示一条mysql语句结束

  • 4.选择数据库:

mysql> use RUNOOB;

  • 5.数据类型:

http://www.runoob.com/mysql/mysql-data-types.html

  • 6.显示当前数据库下的数据表:

mysql> show tables;

  • 7.创建数据表:
mysql> CREATE TABLE runoob_tbl(
    -> runoob_id INT NOT NULL AUTO_INCREMENT,
    -> runoob_title VARCHAR(100) NOT NULL,
    -> runoob_author VARCHAR(40) NOT NULL,
    -> submission_date DATE,
    -> PRIMARY KEY ( runoob_id )
    -> );
  • 8.删除数据表:

mysql> DROP TABLE runoob_tbl

  • 9.插入数据:
mysql> INSERT INTO runoob_tbl
    ->(runoob_title, runoob_author, submission_date)
    ->VALUES
    ->("Learn PHP", "John Poul", NOW());
  • 10.查询数据表中的数据:

SELECT * from runoob_tbl

  • 11.Show有关的语法:
SHOW DATABASES; //列出 MySQL Server上的数据库
SHOW TABLES [FROM db_name]; //列出数据库中的表
SHOW TABLE STATUS [FROM db_name]; //列出数据库的表信息,比较详细
SHOW COLUMNS FROM tbl_name [FROM db_name]; //列出表的列信息,同 SHOW FIELDS FROM tbl_name [FROM db_name],DESCRIBE tbl_name [col_name]
SHOW FULL COLUMNS FROM tbl_name [FROM db_name]; //列出表的列信息,比较详细,同 SHOW FULL FIELDS FROM tbl_name [FROM db_name]
SHOW INDEX FROM tbl_name [FROM db_name]; //列出表的索引信息
SHOW STATUS; //列出 Server 的状态信息
SHOW VARIABLES; //列出 MySQL 系参数值
SHOW PROCESSLIST; //查看当前mysql查询进程
SHOW GRANTS FOR user; //列出用户的授权命令
  • 12.where子句:

mysql> SELECT * from runoob_tbl WHERE runoob_author=‘Sanjay‘; //查询某一个符合条件的表项

  • 13.update查询:
//查询并修改表中的一项,最后更新表格
mysql> UPDATE runoob_tbl
    -> SET runoob_title=‘Learning JAVA‘
    -> WHERE runoob_id=3;
  • 14.delete语句:

mysql> DELETE FROM runoob_tbl WHERE runoob_id=3; //删除表中的某一项

  • 15.ALTER命令:
mysql> ALTER TABLE testalter_tbl  DROP i; //删除以上表的 i 字段
mysql> ALTER TABLE testalter_tbl ADD i INT; //在表 testalter_tbl 中添加 i 字段,并定义数据类型
mysql> ALTER TABLE testalter_tbl MODIFY c CHAR(10); //把字段 c 的类型从 CHAR(1) 改为 CHAR(10)
mysql> ALTER TABLE testalter_tbl
    -> MODIFY j BIGINT NOT NULL DEFAULT 100; //指定字段 j 为 NOT NULL 且默认值为100
mysql> ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000; //使用 ALTER 来修改字段的默认值
mysql> ALTER TABLE testalter_tbl ALTER i DROP DEFAULT; //使用 ALTER 命令及 DROP子句来删除字段的默认值
mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl; //修改表名
  • 16.正则表达式:

正则表达式是通用的,和C、linux shell一样的。

mysql> SELECT name FROM person_tbl WHERE name REGEXP ‘^st‘; //查找name字段中以‘st‘为开头的所有数据
mysql> SELECT name FROM person_tbl WHERE name REGEXP ‘ok$‘; //查找name字段中以‘ok‘为结尾的所有数据
mysql> SELECT name FROM person_tbl WHERE name REGEXP ‘mar‘; //查找name字段中包含‘mar‘字符串的所有数据
mysql> SELECT name FROM person_tbl WHERE name REGEXP ‘^[aeiou]|ok$‘; //查找name字段中以元音字符开头且以‘ok‘字符串结尾的所有数据

4. MySQL键和索引的概念:

http://www.runoob.com/mysql/mysql-index.html

http://blog.csdn.net/duck_arrow/article/details/8264686

http://www.jb51.net/article/34037.htm

三、MySQL C API编程:

实质就是C语言调用libmysql.lib库,使用其提供的的函数来连接,访问,修改MySQL数据库中的内容。

1. MYSQL结构体:

这个结构主要用于连接,保存一些连接的信息。

typedef struct st_mysql {
 NET           net;            /* Communication parameters */
 gptr          connector_fd;   /* ConnectorFd for SSL */
 char          *host,*user,*passwd,*unix_socket,
                *server_version,*host_info,*info,*db;
 unsigned int port,client_flag,server_capabilities;
 unsigned int protocol_version;
 unsigned int field_count;
 unsigned int server_status;
 unsigned long thread_id;      /* Id for connection in server */
 my_ulonglong affected_rows;
 my_ulonglong insert_id;       /* id if insert on table with NEXTNR */
 my_ulonglong extra_info;              /* Used by mysqlshow */
 unsigned long packet_length;
 enum mysql_status status;
 MYSQL_FIELD   *fields;
 MEM_ROOT      field_alloc;
 my_bool       free_me;        /* If free in mysql_close */
 my_bool       reconnect;      /* set to 1 if automatic reconnect */
 struct st_mysql_options options;
 char          scramble_buff[9];
 struct charset_info_st *charset;
 unsigned int server_language;
} MYSQL;

2. MYSQL_RES结构体:

这个结构主要是返回一些操作数据库(SELECT, SHOW, DESCRIBE, EXPLAIN等)的结果,即“数据集”。

typedef struct st_mysql_res {
 my_ulonglong row_count;
 unsigned int field_count, current_field;
 MYSQL_FIELD   *fields;
 MYSQL_DATA    *data;
 MYSQL_ROWS    *data_cursor;
 MEM_ROOT      field_alloc;
 MYSQL_ROW     row;            /* If unbuffered read */
 MYSQL_ROW     current_row;    /* buffer to current row */
 unsigned long *lengths;       /* column lengths of current row */
 MYSQL         *handle;        /* for unbuffered reads */
 my_bool       eof;            /* Used my mysql_fetch_row */
} MYSQL_RES;

3. MySQL C API编程步骤:

具体有哪些函数,可以到网上搜索一下相关介绍,这里讲一下编程步骤:

(1)、首先我们要包含mysql的头文件,并链接mysql动态库。即添加以下语句:

#include <WinSock2.h>      // 进行网络编程需要winsock2.h
#include <mysql.h>
#pragma comment(lib, "libmysql.lib")

(2)、创建MYSQL变量。如:

 MYSQL mysql;

(3)、初始化MYSQL变量。

  mysql_init(&mysql);

(4)、调用mysql_real_connect函数连接Mysql数据库。mysql_real_connect函数的原型如下:

MYSQL *  STDCALL 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 clientflag);
参数说明:mysql--前面定义的MYSQL变量;host--MYSQL服务器的地址;user--登录用户名;passwd--登录密码;db--要连接的数据库;port--MYSQL服务器的TCP服务端口;unix_socket--unix连接方式,为NULL时表示不使用socket或管道机制;clientflag--Mysql运行为ODBC数据库的标记,一般取0。

连接失败时该函数返回0。

(5)、调用mysql_real_query函数进行数据库查询。mysql_real_query函数的原型如下:

int  STDCALL mysql_real_query(MYSQL *mysql, const char *q, unsigned long length);

参数说明:mysql--前面定义的MYSQL变量;q--SQL查询语句;length--查询语句的长度。

查询成功则该函数返回0。

(6)、通过调用mysql_store_result或mysql_use_result函数返回的MYSQL_RES变量获取查询结果数据。

两个函数的原型分别为:

MYSQL_RES *     STDCALL mysql_store_result(MYSQL *mysql);

MYSQL_RES *     STDCALL mysql_use_result(MYSQL *mysql);

这两个函数分别代表了获取查询结果的两种方式。第一种,调用端,然后读取;第二种,调用mysql_use_result初始化检索,以便于后面一行一行的读取结果集,而它本身并没有从服务器读取任何数据,这种方式较之第一种速度更快且所需内存更少,但它会绑定服务器,阻止其他线程更新任何表,而且必须重复执行mysql_fetch_row读取数据,直至返回NULL,否则未读取的行会在下一次查询时作为结果的一部分返回,故经常我们使用mysql_store_result。

(7)、调用mysql_fetch_row函数读取结果集数据。

上述两种方式最后都是重复调用mysql_fetch_row函数读取数据。mysql_fetch_row函数的原型如下:

MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);

参数result就是mysql_store_result或mysql_use_result的返回值。

该函数返回MYSQL_ROW型的变量,即字符串数组,假设为row,则row[i]为第i个字段的值。当到结果集尾部时,此函数返回NULL。

(8)、结果集用完后,调用mysql_free_result函数释放结果集,以防内存泄露。mysql_free_result函数的原型如下:

void  STDCALL mysql_free_result(MYSQL_RES *result);

(9)、不再查询Mysql数据库时,调用mysql_close函数关闭数据库连接。mysql_close函数的原型为:

void STDCALL mysql_close(MYSQL *sock);

4. MySQL C API编程例子:

#if defined(_WIN32) || defined(_WIN64) //为了支持windows平台上的编译
#include <windows.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include "mysql.h"  //我的机器上该文件在/usr/local/include/mysql下

//定义数据库操作的宏,也可以不定义留着后面直接写进代码
#define SELECT_QUERY "select username from tbb_user where userid = %d"

int main(int argc, char **argv) //char **argv 相当于 char *argv[]
{
    MYSQL mysql,*sock;    //定义数据库连接的句柄,它被用于几乎所有的MySQL函数
    MYSQL_RES *res;       //查询结果集,结构类型
    MYSQL_FIELD *fd ;     //包含字段信息的结构
    MYSQL_ROW row ;       //存放一行查询结果的字符串数组
    char qbuf[160];      //存放查询sql语句字符串

    if (argc != 2) { //检查输入参数
        fprintf(stderr,"usage : mysql_select <userid>\n\n");
        exit(1);
    }

    mysql_init(&mysql);
    if (!(sock = mysql_real_connect(&mysql,"localhost","dbuser","dbpwd","9tmd_bbs_utf8",0,NULL,0))) {
        fprintf(stderr,"Couldn‘t connect to engine!\n%s\n\n",mysql_error(&mysql));
        perror("");
        exit(1);
    }

    sprintf(qbuf,SELECT_QUERY,atoi(argv[1]));
    if(mysql_query(sock,qbuf)) {
        fprintf(stderr,"Query failed (%s)\n",mysql_error(sock));
        exit(1);
    }

    if (!(res=mysql_store_result(sock))) {
        fprintf(stderr,"Couldn‘t get result from %s\n", mysql_error(sock));
        exit(1);
    }

    printf("number of fields returned: %d\n",mysql_num_fields(res));

    while (row = mysql_fetch_row(res)) {
        printf("Ther userid #%d ‘s username is: %s\n", atoi(argv[1]),(((row[0]==NULL)&&(!strlen(row[0]))) ? "NULL" : row[0])) ;
        puts( "query ok !\n" ) ;
    } 

    mysql_free_result(res);
    mysql_close(sock);
    exit(0);
    return 0;   //. 为了兼容大部分的编译器加入此行
}
时间: 2024-10-24 22:04:57

MySQL基础及MySQL C API编程的相关文章

(3.15)mysql基础深入——mysql默认数据库/系统数据库

(3.15)mysql基础深入——mysql默认数据库 关键词:Mysql默认数据库,mysql系统数据库 1.系统数据库的组成 一共4个 [1]information_schema [2]mysql [3]performance_schema [4]sys [1]information_schema [2]mysql mysql数据库是Mysql核心的数据库,类似于sql server中的master库,oracle中的system部分功能. 主要负责存储数据库的用户/权限等Mysql自己需要

MySql基础学习-mysql安装

Linux环境下的安装 1检查是否已经安装 sudo service mysql start #若未安装,则提示: mysql: unrecognized service 2安装MySql #安装 MySQL 服务端.核心程序 sudo apt-get install mysql-server #安装 MySQL 客户端 sudo apt-get install mysql-client 安装过程中,提示确实yes即可,并且会提示设置root密码,设置即可. 3检查安装 sudo netstat

【夯实Mysql基础】MySQL性能优化的21个最佳实践 和 mysql使用索引

本文地址 分享提纲: 1.为查询缓存优化你的查询 2. EXPLAIN 你的 SELECT 查询 3. 当只要一行数据时使用 LIMIT 1 4. 为搜索字段建索引 5. 在Join表的时候使用相当类型的例,并将其索引 6. 千万不要 ORDER BY RAND() 7. 避免 SELECT * 8. 永远为每张表设置一个ID 9. 使用 ENUM 而不是 VARCHAR 10. 从 PROCEDURE ANALYSE() 取得建议 11. 尽可能的使用 NOT NULL 12. Prepare

Mysql基础教程——mysql之一

教程列表:http://www.dxzy163.com/view/index7627.html 41 存储过程 40 全文索引与停止词 39 索引的管 38 索引概念 37 数据库备份与恢复 36 事务语法 35 存储引擎与事务概 34 beforeafter区别 33 触发器实(订单与库存管) 32 触发器语 31 触发器基本概 30 阶段总结() 29 字符集与校对 28 视图 27 表管理之列的增删 26 左连接笔试题 25 左右内连接的区别 24 连接查询概念与左连接语法 23 unio

mysql基础之mysql客户机

我们首先在mysql的客户机上安装mysql-client作为客户端: $ sudo aptitude install mysql-client-5.6 假设所有的准备工作都已就绪,现在你需要一个MySQL用户名和密码.下面我们从客户机的Shell提示符,按照下述方法登录到MySQL: mysql -h host -u user -p 如果你是从本地登录到MySQL(也就是说,从服务器本身登录),或者使用安全的网络连接工具(SSH,Secure Shell)远程登录至MySQL,则可省略主机参数

mysql基础之-mysql存储引擎概述(八)

0x01 mysql 存储引擎:存储引擎也通常被称作“表类型” mysql> show engines;   --- 查看当前所有所支持的存储引擎 mysql> show table status 存储引擎格式: SHOW TABLE STATUS [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr] mysql> show table status in hellodb where Name='class'\G Name 表名 Engi

MySql基础入门-mysql体系结构

mysql体系结构:     由:连接池组件.管理服务和工具组件.sql接口组件.查询分析器组件.优化器组件.                缓冲组件.插件式存储引擎.物理文件组成.     mysql是独有的插件式体系结构,各个存储引擎有自己的特点.              mysql各个存储引擎概述:     innodb存储引擎:[/color][/b] 面向oltp(online transaction processing).行锁.支持外键.非锁定读.默认采用repeaable级别(

MySql基础入门-mysql的结构层次

了解MySql必须牢牢记住其体系结构图,Mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成的. 1.Connectors指的是不同语言中与SQL的交互 2.Management Serveices & Utilities: 系统管理和控制工具 3.Connection Pool: 连接池 管理缓冲用户连接,线程处理等需要缓存的需求. 4.SQL Interface: SQL接口 接受用户的SQL命令,并且返回用户需要查询的结果.比如select from就是调用SQL Interfac

[随笔][MySQL][基础知识][MySQL的基本数据类型]

数据类型分类 MySQL的数据类型分为五大类,整数类型,浮点数类型,字符串类型,日期类型,其他数据类型. 整数类型:bit, bool, tiny int, small int, mediun int, int, big int 浮点数类型:float, double, decimal 字符串类型:char, varchar, tiny text, text, medium text, long text, tiny blob, blob, media blob, long blob 日期类型: