数据库简介
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。
我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。
所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
RDBMS 即关系数据库管理系统(Relational Database Management System)的特点:
1.数据以表格的形式出现
2.每行为各种记录名称
3.每列为记录名称所对应的数据域
4.许多的行和列组成一张表单
5.若干的表单组成database
1.表头(header): 每一列的名称;
2.列(col): 具有相同数据类型的数据的集合;
3.行(row): 每一行用来描述某条记录的具体信息;
4.值(value): 行的具体信息, 每个值必须与该列的数据类型相同;
5.键(key): 键的值在当前列中具有唯一性。
使用步骤
首先包含头文件:#include “mysql.h”
创建结构体:
MYSQL mysql; //一个数据库结构体
MYSQL_RES* res; //一个结果集结构体
MYSQL_ROW row; //char** 二维数组,存放一条条记录
初始化数据库:
原型:MYSQL *mysql_init(MYSQL *mysql)
使用:mysql_init(mysql)
设置编码方式:
原型:int mysql_options(MYSQL *mysql, enum mysql_option option, const void *arg)
参考:https://dev.mysql.com/doc/refman/5.7/en/mysql-options.html
使用:mysql_options(&mysql,MYSQL_SET_CHARSET_NAME,“gbk”)
(解释:MYSQL_SET_CHARSET_NAME,默认字符集)
连接数据库:
原型:MYSQL *mysql_real_connect(
MYSQL *mysql,
const char *host,//主机名或IP名,localhost或NULL默认与主机连接
const char *user, //MySQL登陆ID,NULL为当前用户
const char *passwd, //用户ID密码
const char *db, //数据库名称(已存在的)
unsigned int port, //MySQL服务器端口号(默认3306)
const char *unix_socket, //一般设置NULL(如果unix_socket不是 NULL,则字符串指定要使用的套接字或命名管道)
unsigned long client_flag//值client_flag通常为0,其他情况参考:https://dev.mysql.com/doc/refman/5.7/en/mysql-real-connect.html
)
返回值:NULL为不成功
使用:mysql_real_connect(&mysql, “localhost”, “root”, “123456”, “hello”, 3306, NULL, 0)
数据库连接出错检测
原型:const char *mysql_error(MYSQL *mysql)
使用:mysql_error(&mysql)
返回值:连接成功返回空字符,连接失败返回错误信息
查询数据表信息
原型:int mysql_query(MYSQL *mysql, const char *stmt_str)
使用:mysql_query(&mysql, “select * from hello.test”)
返回值:成功为0,否则非0
说明(const char *stmt_str 为 sql指令)
获取结果集
原型:MYSQL_RES *mysql_store_result(MYSQL *mysql)
使用:res = mysql_store_result(&mysql)
检索结果集下一行
原型:MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
使用:row = mysql_fetch_row(res)
释放结果集
原型:void mysql_free_result(MYSQL_RES *result)
使用:mysql_free_result(res)
说明(完成结果集都要释放)
关闭数据库
原型:void mysql_close(MYSQL *mysql)
使用:mysql_close(mysql)
说明(完成结果集都要释放)
数据库表数据
示例代码
#include <iostream>
#include "mysql.h"
//#include <mysql.h> 如果配置ok就可以直接包含这个文件
int main(void)
{
MYSQL mysql; //一个数据库结构体
MYSQL_RES* res; //一个结果集结构体
MYSQL_ROW row; //char** 二维数组,存放一条条记录
//初始化数据库
mysql_init(&mysql);
//设置编码方式
mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk");
//连接数据库
//判断如果连接失败就输出连接失败。
//注意你连接的账户名密码
if (!mysql_real_connect(&mysql, "localhost", "root", "123456", "hello", 3306, NULL, 0))
{
std::cout << "mysql connect failed!" << mysql_error(&mysql) << std::endl;
}
//注意你连接的账户名密码
//注意你连接的账户名密码
//注意你连接的账户名密码
//注意你连接的账户名密码
//查询数据
mysql_query(&mysql, "select * from hello.test");
//获取结果集
res = mysql_store_result(&mysql);
//显示数据
printf("ID\t姓名\t工资\t加入日期\n");
//给ROW赋值,判断ROW是否为空,不为空就打印数据。
while (row = mysql_fetch_row(res))
{
std::cout << row[0] << '\t' << row[1] << '\t' << row[2] << '\t' << row[3] << std::endl;
}
//释放结果集
mysql_free_result(res);
//关闭数据库
mysql_close(&mysql);
//停留等待
system("pause");
return 0;
}