MySQL&C++快速上手(八)数据增删改查

1、新增记录

INSERT INTO table_name ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );

如果数据是字符型,必须使用单引号或者双引号,如:“value”

2、删除记录

DELETE FROM table_name WHERE Clause
  • 如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
  • 你可以在 WHERE 子句中指定任何条件。
  • 你可以在单个表中一次性删除记录。
  • 当你想删除数据表中指定的记录时 WHERE 子句是非常有用的。

3、记录更新

UPDATE table_name SET field1=new-value1, field2=new-value2,... WHERE Clause
  • 你可以同时更新一个或多个字段。
  • 你可以在 WHERE 子句中指定任何条件。
  • 你可以在一个单独表中同时更新数据。
  • 当你需要更新数据表中指定行的数据时 WHERE 子句是非常有用的。
  • WHERE 里面可以使用 AND 以外,还可以使用OR,来合并多个条件,形成一个更为复杂的条件。

4、记录查询

SELECT table_name.column_name,column_name,... FROM table_name,table_name2,... WHERE Clause
LIMIT N OFFSET M
  • 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用 WHERE 语句来设定查询条件。
  • SELECT 命令可以读取一条或者多条记录。
  • 你可以使用星号(*)来代替其他字段,SELECT 语句会返回表的所有字段数据。
  • 你可以使用 WHERE语句来包含任何条件。
  • 你可以使用 LIMIT 属性来设定返回的记录数。
  • 你可以通过 OFFSET 指定 SELECT语句开始查询的数据偏移量。默认情况下偏移量为 0。

记录查询代码范例:

void show_result(MYSQL_RES* res) {
    unsigned int nFields = mysql_num_fields(res);   // 获取列数
    my_ulonglong rows = mysql_num_rows(res);        // 获取行数
    MYSQL_FIELD* fields = mysql_fetch_fields(res);  // 获取所有列的定义

    for (unsigned int i = 0; i < rows; ++i) {
        MYSQL_ROW row = mysql_fetch_row(res); // 取一行数据
        if (row) {
            // 获取每行每列的名称
            for (unsigned int j = 0; j < nFields; ++j) {
                std::cout << "type:" << fields[j].type << " " << fields[j].name << ";" << row[j] << std::endl;
            }
        }
    }
}

int make_query(MYSQL* pDB) {
    std::string sql = "SELECT * FROM `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 ret;
    }

    MYSQL_RES* res = mysql_use_result(pDB);
    if (res) {
        show_result(res);
        mysql_free_result(res);
    }
    return 0;
}

4.1、mysql_use_result和mysql_store_result的区别

mysql_use_result 这个函数,执行后,并不会立刻查询,而是要等到 mysql_fetch_row 这个函数执行后,才会执行查询。
mysql_store_result 这个函数,执行后,会立刻查询,并且获取完整结果给客户端。
具体参考:mysql_use_result和mysql_store_result

完整代码范例:

 	MYSQL* mysql = new MYSQL();
    MYSQL* pDB = mysql_init(mysql);
    if (pDB == NULL) {
        std::cout << "mysql_init failed" << std::endl;
        return -1;
    }

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

    if (pDB) {

        std::string sql = "CREATE DATABASE hello"; // SQL语句可替换为自己实际需要执行的语句
        // 创建数据库
        int ret = mysql_real_query(mysql, sql.c_str(), (unsigned long)sql.size());
        if (ret != 0) {
            std::cout << "mysql error: " << mysql_error(pDB) << std::endl;
            return -1;
        }
        
        // 授予权限
        sql = "GRANT ALL ON hello.* TO 'hello'@'localhost';"; // SQL语句可替换为自己实际需要执行的语句
        ret = mysql_real_query(mysql, sql.c_str(), (unsigned long)sql.size());
        if (ret != 0) {
            std::cout << "mysql error: " << mysql_error(pDB) << std::endl;
            return -1;
        }

        // 指定数据库
        sql = "USE hello"; // SQL语句可替换为自己实际需要执行的语句
        ret = mysql_real_query(mysql, sql.c_str(), (unsigned long)sql.size());
        if (ret != 0) {
            std::cout << "mysql error: " << mysql_error(pDB) << std::endl;
            return -1;
        }

        // 创建表
        sql = "CREATE TABLE IF NOT EXISTS `hello` (`id` NVARCHAR(16) PRIMARY KEY)ENGINE=InnoDB DEFAULT CHARSET=utf8;";
        ret = mysql_real_query(mysql, sql.c_str(), (unsigned long)sql.size());
        if (ret != 0) {
            std::cout << "mysql error: " << mysql_error(pDB) << std::endl;
            return -1;
        }

		// TODO: 进行增删改查
        sql = "INSERT INTO `hello` (`id`) VALUES(\"9527\")";
        ret = mysql_real_query(mysql, sql.c_str(), (unsigned long)sql.size());
        if (ret != 0) {
            std::cout << "mysql error: " << mysql_error(pDB) << std::endl;
            return -1;
        }

        // 删除表
        sql = "DROP TABLE `hello`";
        ret = mysql_real_query(mysql, sql.c_str(), (unsigned long)sql.size());
        if (ret != 0) {
            std::cout << "mysql error: " << mysql_error(pDB) << std::endl;
            return -1;
        }

        // 删除数据库
        sql = "DROP DATABASE hello"; // SQL语句可替换为自己实际需要执行的语句
        ret = mysql_real_query(mysql, sql.c_str(), (unsigned long)sql.size());
        if (ret != 0) {
            std::cout << "mysql error: " << mysql_error(pDB) << std::endl;
            return -1;
        }

        mysql_close(pDB);
        std::cout << pDB << std::endl;
        delete mysql;
    }

    mysql = nullptr;

    return 0;
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值