基础概念
- 数据库:保存有组织的数据的容器,通常是一个或一组文件。
- 表:某种特定类型数据的结构化清单。
- 列:表中的一个字段。所有的表都由一个或多个列组成。每个列都有相应的数据类型,来限制该列中存储的数据。
- 行:表中的一个记录。
- 主键:一列或一组列,其值能唯一区分表中的每一行
基础操作
- mysql -u username -h host -p password -P port
- 如果我们想要用root用户来连接的话,格式就是
mysql -u root -p
然后输入密码,一般是不会把密码加到-p的选项后面,避免密码泄露。-P后面跟的是端口号,当mysql监听在3306以外的端口时,就需要这个选项。不带这个选项,表示使用默认的3306端口。
#include <assert.h>
#include <string>
#include "mysql.h"
#include <vector>
using std::string;
using std::vector;
#pragma comment(lib, "libmysql")
void DealSql(const char* pMySqlC, MYSQL* pMySql)
{
if (mysql_real_query(pMySql, pMySqlC, strlen(pMySqlC)))
{
assert(false);
}
}
void GetDealResult(MYSQL* pMySql, vector<vector<string>>& dVecReStr)
{
MYSQL_RES* pRe = mysql_store_result(pMySql);
if (!pRe)
{
return;
}
unsigned long long nHCount = mysql_num_rows(pRe);
unsigned long long nLCount = mysql_num_fields(pRe);
if (!nHCount || !nLCount)
{
return;
}
dVecReStr.resize(static_cast<size_t>(nHCount));
for (int i = 0; i < nHCount; ++i)
{
dVecReStr[i].resize(static_cast<size_t>(nLCount));
auto pRow = mysql_fetch_row(pRe);
for (int j = 0; j < nLCount; ++j)
{
if (!pRow[j])
{
dVecReStr[i][j] = "NULL";
}
else
{
dVecReStr[i][j] = pRow[j];
}
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
MYSQL mySql;
MYSQL* pMySql = &mySql;
//初始化
if (mysql_init(pMySql) != pMySql)
{
assert(false);
}
//连接
if (pMySql != mysql_real_connect(pMySql, "127.0.0.1", "root", "123456",
"mysql", 3306, nullptr, 0))
{
assert(false);
}
//创建数据库
DealSql("create database if not exists DbTest", pMySql);
//显示数据库
DealSql("show databases", pMySql);
vector<vector<string>> dVecSqlResult;
GetDealResult(pMySql, dVecSqlResult);
//dVecSqlResult包含了所有现存的数据库名字
//选择数据库
DealSql("use DbTest", pMySql);
//建表
DealSql("create table if not exists TableTest (id int not null "
"auto_increment, name varchar(50) not null, value int,"
"primary key(id))", pMySql);
//查询表结构
DealSql("show columns from TableTest", pMySql);
dVecSqlResult.clear();
GetDealResult(pMySql, dVecSqlResult);
/*
dVecDbName =
[6]("id","int(11)","NO","PRI","NULL","auto_increment"),
[6]("name","varchar(50)","NO","","NULL",""),
[6]("value","int(11)","YES","","NULL","")
*/
//插入数据
DealSql("insert into tableTest (name, value) values"
"(\"s0\", 100), (\"s1\", 99)", pMySql);
//检索表内所有数据
DealSql("select * from tableTest", pMySql);
dVecSqlResult.clear();
GetDealResult(pMySql, dVecSqlResult);
//dVecSqlResult = [2]([3]("1","s0","100"),[3]("2","s1","99"))
//删除指定行
DealSql("delete from tabletest where name = \"s0\"", pMySql);
//删除表
DealSql("drop table tabletest", pMySql);
//删除数据库
DealSql("drop database dbtest", pMySql);
//关闭连接
mysql_close(pMySql);
return 0;
}
网友评论