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;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/90582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【蓝桥杯选拔赛真题63】Scratch云朵降雨 少儿编程scratch图形化编程 蓝桥杯选拔赛真题解析

目录 scratch云朵降雨 一、题目要求 编程实现 二、案例分析 1、角色分析

AHH HackerHouse @Move大理站完美谢幕

Antalpha HackerHouse Move 大理站于2023年9月23日在面包树举办了Final DemoDay&#xff0c;这也代表着为期21天的 HackerHouse 活动完美谢幕。 自从9月3日开始&#xff0c;整整21天的共居时间里&#xff0c;我们从个体逐渐融汇成小团队&#xff0c;最终成为了一个紧密团结的大…

UI自动化测试 | Jenkins配置优化

前一段时间帮助团队搭建了UI自动化环境&#xff0c;这里将Jenkins环境的一些配置分享给大家。 背景&#xff1a; 团队下半年的目标之一是实现自动化测试&#xff0c;这里要吐槽一下&#xff0c;之前开发的测试平台了&#xff0c;最初的目的是用来做接口自动化测试和性能测试&…

软件测试之单元测试自动化入门基础

单元测试自动化 所谓的单元测试(Unit Test)是根据特定的输入数据&#xff0c;针对程序代码中的最小实体单元的输入输出的正确性进行验证测试的过程。所谓的最小实体单元就是组织项目代码的最基本代码结构&#xff1a;函数&#xff0c;类&#xff0c;模块等。在Python中比较知名…

OpenHarmony自定义组件介绍

一、创建自定义组件 在ArkUI中&#xff0c;UI显示的内容均为组件&#xff0c;由框架直接提供的称为系统组件&#xff0c;由开发者定义的称为自定义组件。在进行 UI 界面开发时&#xff0c;通常不是简单的将系统组件进行组合使用&#xff0c;而是需要考虑代码可复用性、业务逻辑…

安装ipfs-swarm-key-gen

安装ipfs-swarm-key-gen Linux安装go解释器安装ipfs-swarm-key-gen Linux安装go解释器 https://blog.csdn.net/omaidb/article/details/133180749 安装ipfs-swarm-key-gen # 编译ipfs-swarm-key-gen二进制文件 go get -u github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm…

Redis代码实践总结(二)

使用 CLI 探索 Redis 外部程序使用 TCP 套接字和 Redis 特定协议与 Redis 进行通信。该协议在不同编程语言的 Redis 客户端库中实现。然而&#xff0c;为了使使用 Redis 进行黑客攻击变得更简单&#xff0c;Redis 提供了一个命令行实用程序&#xff0c;可用于向 Redis 发送命令…

odoo16 取消“系统各功能状态日报”的邮件

odoo16默认情况下每周都会发送一个“系统各功能状态日报”的邮件&#xff0c;而且是所有人都发&#xff0c; 这个功能在哪配置呢&#xff1f; 今天研究了一下&#xff0c; 线索是“系统各功能状态日报”&#xff0c;先全文检索吧 #. module: digest #: model:digest.digest,na…

KUKA机器人通过3点法设置工作台基坐标系的具体方法

KUKA机器人通过3点法设置工作台基坐标系的具体方法 具体方法和步骤可参考以下内容: 进入主菜单界面,依次选择“投入运行”—“测量”—基坐标,选择“3点法”, 在系统弹出的基坐标编辑界面,给基座标编号为3,命名为table1,然后单击“继续”按钮,进行下一步操作, 在弹出的…

批量删除wordpress文章修订版本/自动草稿残留数据(3种方法)及四种方法禁用WordPress文章历史修订/自动保存/自动草稿功能

目录 1、批量删除wordpress文章修订版本/自动草稿残留数据&#xff08;3种方法&#xff09; 方法一&#xff1a;SQL命令批量删除 命令&#xff1a; 方法二&#xff1a;利用PHP代码来删除 方法三&#xff1a;利用数据库清理优化插件 WP Clean Up 或 WP Cleaner 批量删除 2…

【STM32基础 CubeMX】从0带你点灯

文章目录 前言一、GPIO的概念二、CubeMX配置GPIO2.1 基础配置2.2 GPIO配置 三、点灯代码讲解3.1 cubemx生成的代码3.2 1个库函数 四、LED闪烁总结 前言 一、GPIO的概念 STM32是一系列微控制器芯片的品牌&#xff0c;它们用于控制各种电子设备。其中的GPIO是通用输入/输出端口的…

触觉智能 PurPle Pi OH(OpenHarmony)开发板

资料汇总 内容预览 产品介绍 PurPle-Pi OH 规格书​​​​​​ 系统编译 Purple-Pi-OH Linux SDK编译 Purple-Pi-OH OHOS SDK编译 使用手册 Purple-Pi-OH Ubuntu系统使用手册 常见FAQ 常见问题 官网 官网地址 Purple Pi OH介绍 Purple Pi OH作为一款兼容树莓派的开…

Hive【Hive(三)查询语句】

前言 今天是中秋节&#xff0c;早上七点就醒了&#xff0c;干啥呢&#xff0c;大一开学后空教室紧缺&#xff0c;还不趁着假期来学校等啥呢。顺便偷偷许个愿吧&#xff0c;希望在明年的这个时候&#xff0c;秋招不知道赶不赶得上&#xff0c;我希望拿几个国奖&#xff0c;蓝桥杯…

Spring结合自定义注解实现 AOP 切面功能

Spring结合自定义注解实现 AOP 切面功能 Spring AOP 注解概述Aspect 快速入门execution 切点表达式 拦截指定类的方法Pointcut("annotation(xx)") 拦截拥有指定注解的方法环绕通知 实现开关目标方法案例1&#xff1a;自定义注解切面实现统一日志处理1.自定义日志注解…

多线程总结(线程池 线程安全 常见锁)

本篇文章主要是对线程池进行详解。同时引出了单例模式的线程池&#xff0c;也对线程安全问题进行了解释。其中包含了智能指针、STL容器、饿汉模式的线程安全。也对常见的锁&#xff1a;悲观锁&#xff08;Pessimistic Locking&#xff09;、乐观锁&#xff08;Optimistic Locki…

brew 安装MySQL 5.7

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…

openlayers-18-聚合显示补充(切换聚合与非聚合状态)

最近有一些网友问我&#xff0c;聚合显示怎么实现聚合与不聚合之间的切换&#xff0c;有很多方法能够实现&#xff0c;下面是一个示例作为参考。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-…

Servlet开发-session和cookie理解案例-登录页面

项目展示 进入登录页面&#xff0c;输入正确的用户名和密码以后会自动跳到主页 登录成功以后打印用户名以及上次登录的时间&#xff0c;如果浏览器和客户端都保存有上次登录的信息&#xff0c;则不需要登录就可以进入主页 编码思路 1.首先提供一个登录的前端页面&…

DDS信号发生器Verilog波形发生器FPGA

名称&#xff1a;DDS信号发生器Verilog波形发生器 软件&#xff1a;Quartus 语言&#xff1a;Verilog 要求&#xff1a; 1.可产生正弦波&#xff0c;锯齿波&#xff0c;三角波&#xff0c;方波4种波形&#xff0c;频率可调 2.具有波形选择、起动、停止功能。 代码下载&…

QT信号槽

目录 信号槽的概念 按钮的常用信号 自定义槽函数 自定义信号函数 自定义槽和信号注意的事项 信号与槽的拓展 lambda表达式 信号槽的概念 信号槽是Qt框架引以为豪的机制之一。所谓信号槽&#xff0c;实际就是观察者模式。当某个事件发生之后&#xff0c;比如&#xff0c…