MYSQL常用命令

一.数据类型

MySQL中有多种数据类型,每种类型用于存储不同类型的数据。以下是MySQL中常见的数据类型:

  1. 数值类型:

    • INT:整数类型,存储范围为-2,147,483,648到2,147,483,647。
    • BIGINT:大整数类型,存储范围为-9,223,372,036,854,775,808到9,223,372,036,854,775,807。
    • FLOAT:单精度浮点数类型。
    • DOUBLE:双精度浮点数类型。
    • DECIMAL:定点数类型,用于精确存储小数。
  2. 字符串类型:

    • CHAR:固定长度字符串,最大长度为255个字符。
    • VARCHAR:可变长度字符串,最大长度为65535个字符。
    • TEXT:长文本类型,最大长度为65,535个字符。
  3. 日期和时间类型:

    • DATE:日期类型,格式为'YYYY-MM-DD'。
    • TIME:时间类型,格式为'HH:MM:SS'。
    • DATETIME:日期和时间类型,格式为'YYYY-MM-DD HH:MM:SS'。
    • TIMESTAMP:时间戳类型,用于存储日期和时间的组合。(时间戳从1970.1.1的秒数)
  4. 布尔类型:

    • BOOL 或 BOOLEAN:布尔类型,存储true或false。
  5. 二进制类型:

    • BLOB:二进制大对象类型,用于存储二进制数据。
    • LONGBLOB:长二进制大对象类型,用于存储更大的二进制数据。

此外,MySQL还支持其他特殊数据类型,如枚举类型(ENUM)和集合类型(SET),用于存储从预定义选项中选择的值。

二.MYSQL基础知识

多个数据库服务器可以集群工作

一个服务器上有多个数据库,一个数据库上有多个数据表

数据库:数据表的集合

1.创建MYSQL对象并初始化
    MYSQL* mysql = new MYSQL();
    MYSQL* pDB = mysql_init(mysql);  //初始化mysql对象

    //这里两个变量 mysql和pDB 两个变量记录(指向)同一个值避免初始化失败后返回NULL指针内存泄漏的风险

    if (pDB == NULL) {
        std::cout << "mysql_init failed!" << std::endl;
        return -1;
    }
2.连接数据库

 pDB = mysql_real_connect(pDB, "localhost", "root", "1234", "mysql", 3306, NULL, 0);

补充:

3.创建新的用户

int creat_user(MYSQL* pDB){   //创建新用户
    std::string sql = "CREATE USER 'fc'@'localhost' IDENTIFIED BY ''";
    int ret = mysql_real_query(pDB, sql.c_str(), (unsigned long)sql.size());

    if (ret != 0) {
        std::cout << "mysql error:" << mysql_error(pDB) << std::endl;
        return -1;
    }
    return 0;
}
4.给用户授权权限和 撤销权限

int grant_userpower(MYSQL* pDB) {  //授予用户权限

    std::string sql = "GRANT ALL PRIVILEGES ON *.* TO 'fc'@'localhost' with grant option";
    int ret = mysql_real_query(pDB, sql.c_str(), (unsigned long)sql.size());

    if (ret != 0) {
        std::cout << "mysql error:" << mysql_error(pDB) << std::endl;
        return -1;
    }

    return 0;
}

5.删除用户
drop USER fc@localhost
6.MYSQL仓库的创建和删除

int creat_database(MYSQL* pDB) {  //创建数据仓库

    std::string sql = "CREATE DATABASE hello";
    int ret = mysql_real_query(pDB, sql.c_str(), (unsigned long)sql.size());

    if (ret != 0) {
        std::cout << "mysql error:" << mysql_error(pDB) << std::endl;
        return -1;
    }

    return 0;
}


int grant_database_power(MYSQL* pDB) {  //授予仓库权限

    std::string sql = "GRANT ALL ON hello.* TO 'fc'@'localhost'";
    int ret = mysql_real_query(pDB, sql.c_str(), (unsigned long)sql.size());

    if (ret != 0) {
        std::cout << "mysql error:" << mysql_error(pDB) << std::endl;
        return -1;
    }

    return 0;
}

三.MYSQL命令的执行

发送SQL命令

获取SQL执行结果

解析获取到的结果

MYSQL_RES* result = mysql_use_result(mysql);
if (result != NULL) {
    show_result(result);    //展示数据
    mysql_free_result(result);   //释放结果,与use_result相互对应
}
void show_result(MYSQL_RES* result) {

    //获取结果集列的数量
    unsigned nFiles = mysql_num_fields(result);

    //获取结果集行的数量
    my_ulonglong nRows = mysql_num_rows(result);

    //获取每一列的定义接口:
    MYSQL_FIELD* fields = mysql_fetch_fields(result);

    for (unsigned i = 0; i < nRows; i++) {  //遍历每一行
        MYSQL_ROW row = mysql_fetch_row(result);
        //获取每一行结果
        if (row != NULL) {
            for (unsigned j = 0; j < nFiles; j++) {
                //对于每一行遍历每列的信息
                std::cout << "type:" << fields[j].type << " " << fields[j].name << " : " << row[j] << std::endl;  
                //对应存储数据的值
            }
        }
        std::cout << "==================" << std::endl;
    }



}

附录:
完整代码

#include <iostream>
#include <mysql.h>


void show_result(MYSQL_RES* result) {

    //获取结果集列的数量
    unsigned nFiles = mysql_num_fields(result);

    //获取结果集行的数量
    my_ulonglong nRows = mysql_num_rows(result);

    //获取每一列的定义接口:
    MYSQL_FIELD* fields = mysql_fetch_fields(result);

    for (unsigned i = 0; i < nRows; i++) {  //遍历每一行
        MYSQL_ROW row = mysql_fetch_row(result);
        //获取每一行结果
        if (row != NULL) {
            for (unsigned j = 0; j < nFiles; j++) {
                //对于每一行遍历每列的信息
                std::cout << "type:" << fields[j].type << " " << fields[j].name << " : " << row[j] << std::endl;  //对应存储数据的值
            }
        }
        std::cout << "==================" << std::endl;
    }



}

int creat_user(MYSQL* pDB){   //创建新用户
    std::string sql = "CREATE USER 'fc'@'localhost' IDENTIFIED BY ''";
    int ret = mysql_real_query(pDB, sql.c_str(), (unsigned long)sql.size());

    if (ret != 0) {
        std::cout << "mysql error:" << mysql_error(pDB) << std::endl;
        return -1;
    }
    return 0;
}


int grant_userpower(MYSQL* pDB) {  //授予用户权限

    std::string sql = "GRANT ALL PRIVILEGES ON *.* TO 'fc'@'localhost' with grant option";
    int ret = mysql_real_query(pDB, sql.c_str(), (unsigned long)sql.size());

    if (ret != 0) {
        std::cout << "mysql error:" << mysql_error(pDB) << std::endl;
        return -1;
    }

    return 0;
}


int creat_database(MYSQL* pDB) {  //创建数据仓库

    std::string sql = "CREATE DATABASE hello";
    int ret = mysql_real_query(pDB, sql.c_str(), (unsigned long)sql.size());

    if (ret != 0) {
        std::cout << "mysql error:" << mysql_error(pDB) << std::endl;
        return -1;
    }

    return 0;
}


int grant_database_power(MYSQL* pDB) {  //授予仓库权限

    std::string sql = "GRANT ALL ON hello.* TO 'fc'@'localhost'";
    int ret = mysql_real_query(pDB, sql.c_str(), (unsigned long)sql.size());

    if (ret != 0) {
        std::cout << "mysql error:" << mysql_error(pDB) << std::endl;
        return -1;
    }

    return 0;
}

int fe() {

    MYSQL* mysql = new MYSQL();
    MYSQL* pDB = mysql_init(mysql);  //初始化mysql对象

    //这里两个变量 mysql和pDB 两个变量记录(指向)同一个值避免初始化失败后返回NULL指针内存泄漏的风险
    if (pDB == NULL) {
        std::cout << "mysql_init failed!" << std::endl;
        return -1;
    }

    pDB = mysql_real_connect(pDB, "localhost", "root", "1234", "mysql", 3306, NULL, 0);

    //连接数据库
    std::cout << pDB << std::endl;
    if (pDB) {
        //creat_user(pDB);
        //grant_userpower(pDB);
        //creat_database(pDB);
        //grant_database_power(pDB);

        //获取SQL的数据
        MYSQL_RES* result = mysql_use_result(mysql);
        if (result != NULL) {
            show_result(result);    //展示数据
            mysql_free_result(result);   //释放结果,与use_result相互对应
        }

    }

    mysql_close(pDB);

    delete(mysql);

    return 0;

}

int main()
{
    fe();
    return 0;
   
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值