mysql linux c api及使用笔记

  • 常用的linux C API
    • 多线程相关例程
  • 常用mysql语句
  • 遇到过的问题
    • 启动mysql服务报错
    • 导入文件报错

常用的linux C API

MYSQL *conn = mysql_init(void);         //初始化mysql,返回mysql句柄
//iferr(!conn)

conn = mysql_real_connect(conn, "localhost"或服务器IP, 用户名,密码,数据库database,0, NULL, 0);
//iferr (!conn)

int res = mysql_real_quary(conn, (char *)cmd, len);     //发送mysql请求,@cmd为mysql命令语句,详情见下文常用mysql语句,@len为@cmd长度
//iferr (res)

//开启自动重连
char value = 1;
mysql_options(conn, MYSQL_OPT_RECONNECT, &value);


MYSQL_RES *res = mysql_store_result(conn);      //下载离线结果集
//iferr(!res)
r = mysql_num_rows(res);                        //获取行数
c = mysql_num_fields(res);                      //列数(元素数)
while ((r = mysql_fetch_field(res)))            //遍历每行
{
    //r[0]、r[1]...为每行第一个、第二个...元素值
    //do somthing...
}

mysql_free_result(res); //释放结果集
mysql_close(conn);      //关闭连接
mysql_error(conn);      //出错字符串
mysql_errno(conn);      //错误代码

//以下为多线程访问mysql相关函数,详细使用方法见下文多线程例程
mysql_library_init(0, NULL, NULL);      //初始化mysql客户端(多线程安全)
mysql_library_end();                    //
mysql_thread_init();                    //初始化线程特定变量
mysql_thread_end();                     //

多线程相关例程

void *thread(void *arg)
{
    mysql_thread_init();    //必须在创建的线程内尽早调用
    MYSQL *conn = mysql_init();
    //iferr(!conn)
    conn = mysql_real_connect(conn, "localhost", "user", "passwd", "database", 0, NULL, 0);
    //iferr(!conn)

    //do somthing...    

    mysql_close(conn);
    mysql_thread_end();   //线程推出前调用,以免内存泄漏
}

int main()
{
    //该函数在多线程环境必须在创建任何线程和执行任何mysql操作之前调用
    if (mysql_library_init(0, NULL, NULL)) 
    {
        //err   
    }
    //do somthing...

    pthread_t t;
    pthread_create(&t, NULL, thread, NULL);

    //do somthing...
    mysql_library_end();  //在程序结束之前释放资源以免内存泄漏
    return 0;
}

常用mysql语句

  • select * from 表名 //获取表中所有数据
  • select 元素名 from 表名 //获取表中所有该元素
  • select 元素名 from 表名 where count=1 //获取表中满足表达式count=1的所有该元素
  • delete from 表名 where 表达式 //删除表中满足表达式的元素
  • insert into 表名 values(值,值,值) //向表中插入一条数据,括号内为各元素值
  • truncate 表名 //清空表
  • create table 表名(元素名 类型(长度), 元素名 类型(长度)) //创建表
  • drop table 表名 //删除表
  • load data infile 文件名 ignore into table 表名 fields terminated by ‘-’ //把文件导入到数据库,其中ignore意义为遇到重复的唯一键值则忽略,该选项可替换为replace意义为遇到重复的唯一键值则替换,若两项都不选则跳过后面的数据。fields terminated by ‘-‘意义为文件中用’-‘字符分割各个元素。

遇到过的问题

启动mysql服务报错

报错:Failed to start mysql.service: Unit mysql.service is masked
命令行执行语句:systemctl unmask mysql.service即可

导入文件报错

在mysql命令行执行:show variables like ‘%secure_file_priv%’
查看值,若值为一个路径,则被导入的文件必须在该路径下才可以导入,
若想修改该路径或者值为NULL则需要执行以下修改

在/etc/添加my.cnf文件

[mysqld]
secure_file_prev=

等号后面可以写上指定的导入文件的路径,若如上所示不指定则导入文件可以在任何路径


目前只用到过这些,没涉及到的以后有机会不定期更新

你可能感兴趣的:(mysql)