C++ MySQL编程基础

1.最重要的结构体MYSQL

在进行数据库编程之前必须先创建MYSQL结构体,该结构体里有连接信息以及大量其他的信息。

MYSQL *STDCALL mysql_init(MYSQL *mysql);

该函数用来初始化MYSQL结构体,其参数mysql若为nullptr则会创建、初始化、返回新对象;若非空则初始化对象并返回地址。

2.使用mysql_real_connect连接数据库

初始化好MYSQL之后紧接着就用该函数连接数据库。

MYSQL* mysql_real_connect(
	MYSQL *mysql,				上一步创建好的MYSQL
	const char *host,			主机名或IP地址
	const char *user,			登录名,如 root
	const char *passwd,			登录密码
	const char *db,				要访问的数据库名
	unsigned int port,			端口号,传入0代表用3306
	const char *unix_socket,	套接字或命名管道,一般传入 nullptr
	unsigned long client_flag	一般传0
)

成功连上数据库返回的还是开始创建的MYSQL,连接失败返回null

3. 增删改查常用函数mysql_query()

int mysql_query(MYSQL *mysql, const char *q);

q就是SQL语句,只不过放在了字符数组里(不带分号;)。SQL语句成功返回0;失败返回非0。
如果q里的SQL语句是查询语句,则查询的结果存储在传入的mysql参数中。这个结果称为结果集,下一步就是将结果集中的所有数据,存放在一个变量 A 中,类型为MYSQL_RES

4. mysql_use_result()函数

如何使用:调用mysql_real_query()mysql_query()之后,对于成功生成结果集(SELECT, SHOW, DESCRIBE, EXPLAIN, CHECK TABLE,等等)的SQL语句,必须调用mysql_store_result()mysql_use_result()

MYSQL_RES *STDCALL mysql_use_result(MYSQL *mysql);

功能:逐行读取结果集,将读取到的数据存到类型为MYSQL_RES的变量中。虽然结果存放进了该变量中,但还不能把它作为结果正常使用(变量A中存放的数据,是以“行”和“列”为结构的,也就是一整个表。),而需要另一个变量 B 类型为MYSQL_ROW

5. mysql_fetch_row()函数

使用:一般在mysql_store_result()mysql_store_result_nonblocking()mysql_use_result()的后面调用。

MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);

功能:检索变量 A 的下一行赋给变量B,并返回变量 B 。变量 B 类似一个一维数组,一次只能储存一行变量A中的数据,而下标[ ]表示列,假设变量B当前储存了变量A中的第一行,则B[2]就是指这一行的第二列(即第2个字段)的值。为了将变量A中的所有行取出来,需要循环调用mysql_fetch_row()
注:mysql_fetch_row()检索变量A的下一行,如果没有更多行需要检索,则返回NULL

6. mysql_free_result()释放内存

void STDCALL mysql_free_result(MYSQL_RES *result);

功能:释放由mysql_store_result()mysql_use_result()mysql_list_dbs()等分配的内存。如果使用过这些函数,必须通过调用mysql_free_result()释放内存。参数是之前的变量 A

7. mysql_close()关闭连接

void mysql_close(MYSQL *mysql);

-----------------------------------------------------------------------------------------

--------------------------------------补充内容---------------------------------------

-----------------------------------------------------------------------------------------

mysql_use_result()mysql_store_result()的区别

MYSQL_RES *STDCALL mysql_store_result(MYSQL *mysql);
MYSQL_RES *STDCALL mysql_use_result(MYSQL *mysql);

mysql_store_result()会将结果集整个读入并存储到客户端。较为占用空间。
mysql_use_result()则是直接从服务器读取结果,不将其存储在临时表或本地缓冲区中。使用的内存更少。

mysql_insert_id()函数

uint64_t STDCALL mysql_insert_id(MYSQL *mysql);

返回由前面由INSERTUPDATE语句为AUTO_INCREMENT列生成的值。
在对包含AUTO_INCREMENT字段的表执行INSERT语句,或使用INSERTUPDATE使用LAST_INSERT_ID(expr)设置列值之后,需要使用此函数。

MYSQLMYSQL_RESMYSQL_ROW

MYSQL:该结构代表1个数据库连接的句柄。几乎所有的MySQL函数均使用它。

MYSQL_RES:该结构代表返回行的查询结果(例如SELECT查询语句)。

MYSQL_ROW:这是1行数据的“类型安全”表示,行是通过调用mysql_fetch_row()MYSQL_RES型变量中获得的。(也就是前面提到的变量B)

你可能感兴趣的:(C++,MySQL,mysql,c++,数据库)