美文网首页
MySql基础概念与操作

MySql基础概念与操作

作者: szn好色仙人 | 来源:发表于2018-03-17 21:55 被阅读0次

基础概念

  • 数据库:保存有组织的数据的容器,通常是一个或一组文件。
  • 表:某种特定类型数据的结构化清单。
  • 列:表中的一个字段。所有的表都由一个或多个列组成。每个列都有相应的数据类型,来限制该列中存储的数据。
  • 行:表中的一个记录。
  • 主键:一列或一组列,其值能唯一区分表中的每一行

基础操作

  • 登陆
  • 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;
}

相关文章

网友评论

      本文标题:MySql基础概念与操作

      本文链接:https://www.haomeiwen.com/subject/asksqftx.html