您的位置:首页 > 运维架构 > Linux

MYSQL数据库使用与链接详解(Linux)

2016-08-15 14:04 369 查看
首先,你Linux上面必须安装MYSQL数据库,在上面的一篇博客中曾仔细说过,这里便不多说了。

其次,启动MYSQL



进入数据库



重新打开一个终端,查看



请记住他的端口号(3306),后面会用到

给你想使用这个数据库用户权限



PS(图中红笔钩花的便是用户名)

下面便是建表的过程:





接下来是一些基本使用操作:





删除



基本操作先讲到这里,接下来,我们来链接数据库

首先,读者应该在这里下载c connect 下载地址点击打开链接(注意选择版本)

解压到当前目录下:



然后在mysqll.c中写下面一段程序



这是一个输出数据库版本的代码,运行它,你会发现



因为mysql这个库是你动态添加的,所以你要给出他的路径,当然你也可以把它设置为静态的,这里给读者一个链接

这时,你要在MAKEFILE中这样写



然后就可以了,但是又会出现一个问题



动态运行时库为动态时加载,要加载,必须先找到,但是该程序在运行的时候,找不到相关动态库。

系统根据环境变量LD_LIBRARY_PATH(mac 下是DYLD_LIBRARY_PATH)来帮助应用程序查找动态库。所以将对应动态库路径,添加到该环境变量里



这样便可以了。

接下来,我们写如下代码,便可以向数据库中增加和查找,具体有注释

<span style="font-size:18px;">#include<iostream>
#include<mysql.h>
#include<dlfcn.h>
#include<string>

MYSQL *conn = mysql_init(NULL);   //初始化
MYSQL_RES *res =NULL;

const char* host = "127.0.0.1";   //你要链接数据库所在服务器或主机的IP
const char* user ="root";         //链接的用户名
const char* passwd = "";         //链接的密码
const char* db = "data_test";     //链接数据库中的哪个库
int port = 3306;                 //端口号
int ret = -1;

int my_connect_mysql(){
if(!mysql_real_connect(conn,host,user,passwd,db,port,NULL,0) <span style="font-family: Arial, Helvetica, sans-serif;">//如果成功则返回一个 MySQL 连接标识,失败则返回 FALSE。</span></div><div class="para" label-module="para" style="word-wrap: break-word; color: rgb(51, 51, 51); margin-bottom: 15px; text-indent: 2em; line-height: 24px; zoom: 1; font-family: arial, 宋体, sans-serif;"><span style="font-size:18px;">//mysql_connect() 建立一个到 MySQL 服务器的连接。</span></div><span style="font-size:18px;"></span>
std::cerr<<"connect fail"<<std::endl;
}
else{
std::cout<<"connect success!"<<std::endl;
ret = 0;
}
return ret;
}

int my_insert(std::string& cols, std::string& data)       //插入数据
{
std::string sql = "INSERT INTO student";
sql +=cols;
sql +=" values ";
sql += data;
std::cout<<sql<<std::endl;      //按照数据库插入格式来添加,cols是前面的属性,后面的data是要添加的数据
if(mysql_query(conn,sql.c_str()) == 0){
std::cout<<"insert success"<<std::endl;
}
else{
std::cerr<<"insert failed"<<std::endl;
}
return 0;
}

int my_select()                                      //输出当前库中的数据
{
std::string sql = "SELECT	* FROM student";
if(mysql_query(conn,sql.c_str()) == 0){
std::cout<<"sql selecct"<<std::endl;
}
else{
std::cerr<<"sql is fail.."<<std::endl;
return -1;
}

res = mysql_store_result(conn);  // MYSQL_RES *mysql_store_result(MYSQL *mysql)
//对于成功检索了数据的每个查询(SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK TABLE等),必须调用mysql_store_result()或mysql_use_result() 。
//对于其他查询,不需要调用mysql_store_result()或mysql_use_result(),但是如果在任何情况下均调用了mysql_store_result(),它也不会导致任何伤害或性能降低。</span>
//通过检查mysql_store_result()是否返回0,可检测查询是否没有结果集(以后会更多)。
if(res){
int line = mysql_num_rows(res);  //读取此表中的行数
int cols = mysql_num_fields(res);  //读取此表中的列数

std::cout<<"line:"<<line<<"\t"<<" cols:"<<cols<<std::endl;
MYSQL_FIELD *fn = NULL;
for(;fn = mysql_fetch_field(res);){
std::cout<<fn->name<<"\t";
}
int i = 0;
for(;i<line;i++){   //打印出其中的数据
MYSQL_ROW row = mysql_fetch_row(res);
int j= 0;
for(;j < cols; j++){
std::cout<<row[j]<<'\t';
}
std::cout<<std::endl;
}
std::cout<<std::endl;
}

}

int main()
{
std::string cols ="(n_name,n_age,n_school)";
std::string data ="('nana',21,'SUSt')";
my_connect_mysql();
my_select();
my_insert(cols,data);
//printf("MYSQL client : %s\n",mysql_get_client_info());
return 0;
}
</span>
结果如下:





至于其他的操作大多一致,故不在重复。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息