首页 > 数据库 >SQL常用函数

SQL常用函数

时间:2022-08-25 15:56:43浏览次数:72  
标签:real 常用 函数 SQL MYSQL result mysql query row

1、初始化一个MYSQL结构

  MYSQL *mysql_init(MYSQL *mysql)

2、关闭一个服务器连接,并释放与连接相关的内存

  void mysql_close(MYSQL *mysql);

3、连接一个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 int client_flag);

  参数说明:

  host表示MYSQL服务器的主机名或IP

  user表示登录的用户名

  passwd表示登录的密码

  db表示要连接的数据库

  port表示MySQL服务器的TCP/IP端口

  unix_socket表示连接类型

  client_flag表示MySQL运行ODBC数据库的标记

  函数返回值: 如果连接成功,一个MYSQL*连接句柄:如果连接失败,NULL

4、返回最新的UPDATE,DELETE或INSERT查询影响的行数

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

  query表示执行的SQL语句

  函数返回值: 如果查询成功,为零,出错为非零。

  补充:对于包含二进制数据的查询,必须使用mysql_real_query()而不是mysql_query(),这是因为,二进制数据可能会包含‘\0’字符。此外,mysql_real_query()比mysql_query()快,这是因为它不会在查询字符串上调用strlen()。

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

5、为无缓冲的结果集获得结果标识符

  MYSQL_RES *mysql_use_result(MYSQL *mysql);

  函数返回值: 一个MYSQL_RES结果结构, 如果发生一个错误发NULL

  返回值给其他的函数引用。

6、存储查询结果

  MYSQL_RES *mysql_store_result(MYSQL *mysql);

  函数返回值: 一个MYSQL_RES结果结构, 如果发生一个错误发NULL

  返回值给其他的函数引用。

注意:其中一个方式是通过调用 mysql_store_result()来一次性获得整个查询结果。整个函数从服务器数据库中获得所有的行,并保存在客户端中。第二个方式是通过调用mysql_use_result()来初始化一行一行的读取检索结果。这个函数只进行初始化,实际上并不会从服务器中获取任何的一行。

7、检索一个结果集合的下一行,行内值的数目由mysql_num_fields(result)给出。如果行中保存了调用mysql_fetch_row()返回的值,将按照row[0]到row[mysql_num_fields(result)-1],访问这些值的指针

  MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);

  下一行的一个MYSQL_ROW结构。

  如果没有更多的行可检索或如果出现一个错误,NULL

在上面两个情况下,你可以通过调用 mysql_fetch_row()来获取每一行。使用mysql_store_result()时,mysql_fetch_row()函数获取每一行,其中数据之前就已经从服务器数据库中获得;使用mysql_use_result()时,mysql_fetch_row()函数实际上是从服务器数据库中实时获取每一行。可以调用mysql_fetch_lengths()来获取每一行数据的大小信息。
当你操作完result集合后,调用 mysql_free_result()来释放之前使用的内存。

8、返回指定结果集中列的数量(row(行),fields(列))

  unsigned int mysql_num_fields(MYSQL_RES *res);

mysql_store_result()的其中一个优点是,因为所有的行已经从数据库中获取,因此你不仅可以顺序的获取每一行,还可以使用 mysql_data_seek()或者mysql_row_seek()来改变当前在result集合中读取的位置(行号)。你也可以通过调用 mysql_num_rows()来获知有多少行。另一方面,mysql_store_result()对内存的要求可能会很高(对于很大的result集合来说),因此,你会更大概率上遇到内存不够用的情况。
mysql_use_result()的一个优点是客户端只需要很少的内存空间来存放result集合,因为每次只需要存一行的数据(因为申请的内存空间少了,mysql_use_result()运行速度也更快了)。缺点是你必须快速处理每一行来避免过多占用服务器数据库,而且你也不能在result集合中随机访问每一行,你只能顺序的访问每一行。全部的总行数你是不知道的,直到全部检索完毕。还有,你必须全部检索完所有行,即使当你在中间部分已经找到了想要的结果。

API函数在不需要知道是否是一个SELECT语句的情况下,提供了客户端对操作语句的一个合适的响应。你可以在调用每个mysql_query() (或者 mysql_real_query())函数之后,再调用 mysql_store_result()。如果result集合调用成功,这个操作语句是一个SELECT语句,然后就可以读取每一行。如果返回结果为失败,那么调用 mysql_field_count() 来查看失败结果是否是实际所期待的(你想得到的结果就是失败)。如果mysql_field_count()返回0,操作语句不返回任何数据(说明操作语句是一个INSERT,UPDATE或者DELETE语句等等),因此也不会返回行数据。如果mysql_field_count()返回非零值,那么操作语句本应该返回数据,实际却没有返回。这个表明是一个SELECT操作语句,但是操作失败了。可以去mysql_field_count()查看如何处理这种情况。
mysql_store_result() 和 mysql_use_result() 都可以让你获取有关result集合的字段信息(字段的序号,名称和类型等)。你可以通过重复调用 mysql_fetch_field()来顺序的获取信息,或者调用 mysql_fetch_field_direct()(该函数需要给定序号)来获取某一序号的信息(不需要按顺序获取)。可以通过调用mysql_field_seek()来改变当前字段光标位置。也可以通过调用***mysql_fetch_fields()一次性获取全部字段***。表的“列”称为“字段
对于检测和报告错误,MySQL提供了获取用户信息的渠道,即使用 mysql_errno() 和 mysql_error() 两个函数。这两个函数为最新调用的函数提供了返回错误代号或者错误信息,可以让你知道错误什么时候发生和错误是什么。

9、创建一个数据库

  int mysql_create_db(MYSQL *mysql,const char *db);

  db:要创建的数据库名

  如果数据库成功地被创建,返回零,如果发生错误,为非零。

10、选择一个数据库

  int mysql_select_db(MYSQL *mysql,const char *db);

  db:要创建的数据库名

  如果数据库成功地被创建,返回零,如果发生错误,为非零。

 

示例:对数据库的基本操作(增删改查)

#include <stdio.h>
#include <mysql.h>
#include <string.h>
int main(int argc, const char *argv[])
{
  MYSQL mysql;
  MYSQL_RES *res = NULL;
  MYSQL_ROW row;
  char *query_str = NULL;
  int rc, i, fields;
  int rows;
  if (NULL == mysql_init(&mysql))

  {
    printf("mysql_init(): %s\n", mysql_error(&mysql));
    return -1;
  }
  if (NULL == mysql_real_connect(&mysql, "localhost", "root", "shallnet", "db_users", 0, NULL,0))

  {
    printf("mysql_real_connect(): %s\n", mysql_error(&mysql));
    return -1;
  }
  printf("1. Connected MySQL successful! \n");
  //执行插入请求
  query_str = "insert into tb_users values (12345, 'justtest', '2015-5-5')";
  rc = mysql_real_query(&mysql, query_str, strlen(query_str));
  if (0 != rc)

   {
    printf("mysql_real_query(): %s\n", mysql_error(&mysql));
    return -1;
  }
  //执行删除请求
  query_str = "delete from tb_users where userid=10006";
  rc = mysql_real_query(&mysql, query_str, strlen(query_str));
  if (0 != rc)

   {
    printf("mysql_real_query(): %s\n", mysql_error(&mysql));
    return -1;
  }
  //然后查询插入删除之后的数据
  query_str = "select * from tb_users";
  rc = mysql_real_query(&mysql, query_str, strlen(query_str));
  if (0 != rc)

   {
    printf("mysql_real_query(): %s\n", mysql_error(&mysql));
    return -1;
  }
  res = mysql_store_result(&mysql);
  if (NULL == res)

   {
    printf("mysql_restore_result(): %s\n", mysql_error(&mysql));
    return -1;
  }
  rows = mysql_num_rows(res);
  printf("The total rows is: %d\n", rows);
  fields = mysql_num_fields(res);
  printf("The total fields is: %d\n", fields);
  while ((row = mysql_fetch_row(res)))

  {
    for (i = 0; i < fields; i++)

     {
      printf("%s\t", row[i]);
    }
    printf("\n");
  }
  mysql_free_result(res);
  mysql_close(&mysql);
  return 0;
}

标签:real,常用,函数,SQL,MYSQL,result,mysql,query,row
From: https://www.cnblogs.com/linux-learn/p/16624353.html

相关文章

  • SQL学习——数据库定义语言(DDL)建表、删表、修改表
    DDL语言主要是帮助我们创建数据库对象的。CREATE:创建数据库对象DROP:删除数据库对象ALTER:修改数据库对象RENAME:修改数据库对象名称这要注意数据库对象不止包......
  • git常用命令
    初始化git仓库:gitinit关联远程仓库:gitremoteaddorigin********查询关联的远程仓库:gitremote-v删除关联的远程仓库:gitremotermorigin提交当前项目代码到暂存......
  • MSSQL服务丢失后,恢复mssql服务的方法
     服务器突然MSSQL的服务丢了,用下面这个方法,不用重装MSSQLserver了sccreateMSSQLSERVERbinpath="\"C:\ProgramFiles\MicrosoftSQLServer\MSSQL.1\MSSQ......
  • 【LINUX】常用指令
    LINUX常用指令修改文件内容如何保存退出https://blog.csdn.net/m0_55289425/article/details/120762164......
  • 数据篇(MongoDB+ElasticSearch+Minio+TiDB+MySQL+Redis)
    一. 简介1. MongoDB  2. ElasticSearch  3. Minio   4. TiDB  5. MySQL   6. Redis         二. 目录  ......
  • mysql 不可重复读与幻读的区别
    不可重复读的重点是修改:同样的条件,你读取过的数据,再次读取出来发现值不一样了幻读的重点在于新增或者删除同样的条件,第1次和第2次读出来的记录数不一样当然,从......
  • oracle时间类型、时区及其函数
    一、oracle时间类型oracle有date、timestamp、intervalyeartomonth和intervaldaytosesond四种类型,可通过nls_date_format来设置我们想要的日期格式。1、date存储年......
  • SQLite 将字符串拼接
    SQLite中不是使用的‘+’来操作,是需要使用特殊符号“||”例如:如果是其他字段形式的需要先装换为字符型使用CAST(字段名asTEXT)selectCAST(columnasTEXT)||'%'from......
  • MySQL的InnoDB引擎下执行更新Update语句时 执行时间太久 问题集锦
    场景1:更新cjq表的一个字段,发现执行时间半个小时以上还没执行结束UPDATEt_hplc_cjqSETcjq_type=2WHEREcjq_typeISNULLANDidIN(SELECTcjq_idFROMt_hp......
  • Linux MYSQL安装
    1、安装mysql服务器及客户端sudoapt-getinstallmysql-servermysql-client 2、安装mysqlC语言接口sudoapt-getinstalllibmysql++-dev 3、编译文件(mysql_co......