常用的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=
等号后面可以写上指定的导入文件的路径,若如上所示不指定则导入文件可以在任何路径
目前只用到过这些,没涉及到的以后有机会不定期更新