MySQL介绍及使用
1. 安装、启动、配置 MySQL
1. 安装 MySQL
更新软件包索引
sudo apt update
安装 MySQL 服务器
sudo apt install mysql-server
安装过程中可能会提示你设置 root 用户密码。如果没有提示,可以跳过,后续可以手动设置。
2. 配置 MySQL
运行安全脚本
安装完成后,运行以下命令以提高 MySQL 的安全性:
sudo mysql_secure_installation
按照提示进行操作:
-
设置 root 用户密码(如果之前未设置)。
-
移除匿名用户(建议选择
Y
)。 -
禁止 root 用户远程登录(如果不需要远程访问,建议选择
Y
)。 -
删除测试数据库(建议选择
Y
)。 -
重新加载权限表(选择
Y
)。
3. 设置 MySQL 用户密码
如果在安装过程中没有设置密码,或者需要更改密码,可以通过以下步骤设置密码。
登录到 MySQL
sudo mysql -uroot -p
如果之前没有设置密码,直接按回车键即可登录。
设置密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
将 新密码
替换为你想要设置的密码。
FLUSH PRIVILEGES;
退出 MySQL
exit;
4. 配置远程访问(可选)
如果你需要从其他计算机远程访问 MySQL 数据库,可以按照以下步骤配置。
登录到 MySQL
sudo mysql -uroot -p
创建远程用户并授予权限
CREATE USER 'root'@'%' IDENTIFIED BY '新密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
-
CREATE USER
创建一个允许从任何 IP 地址访问的root
用户。 -
GRANT ALL PRIVILEGES
授予该用户所有数据库和表的完全访问权限。
刷新权限
FLUSH PRIVILEGES;
退出 MySQL
exit;
5. 配置 MySQL 服务:实现所有IP都能访问
编辑 MySQL 配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
修改 bind-address
bind-address = 127.0.0.1
bind-address = 0.0.0.0
保存并退出
保存文件并退出编辑器。
重启 MySQL 服务
sudo systemctl restart mysql
6. 测试远程访问(可选)
在另一台计算机上,使用以下命令测试远程访问:
mysql -uroot -h[MySQL服务器IP] -p
输入你设置的密码,如果能够成功连接,说明配置成功。
7. 安装 MySQL 客户端(可选)
如果你需要从其他计算机连接到 MySQL 数据库,可以在客户端计算机上安装 MySQL 客户端。
安装 MySQL 客户端
sudo apt install mysql-client
2.MySQL介绍
MySQL 是一个 关系型数据库管理系统(RDBMS),使用 结构化查询语言(SQL) 来管理和操作数据。
“关系”在这里指的是二维表格(表 / table),每张表由行(row) 和 列(column) 组成,数据以结构化形式存储。
名称 | 说明 |
---|---|
数据库(Database) | 数据的集合,一个数据库中可以有多张表 |
表(Table) | 类似 Excel 表格,用来存储结构化数据 |
行(Row) | 表中的一条记录,例如一个用户信息 |
列(Column) | 数据的字段,比如姓名、年龄、邮箱等 |
主键(Primary Key) | 每行的唯一标识,不可重复 |
外键(Foreign Key) | 引用其他表的主键,用于建立表之间的关系 |
1.数值类型
1. 整数类型
数据类型 | 存储大小(字节) | 范围(有符号) | 范围(无符号) |
---|---|---|---|
TINYINT | 1 | -128 到 127 | 0 到 255 |
SMALLINT | 2 | -32768 到 32767 | 0 到 65535 |
MEDIUMINT | 3 | -8388608 到 8388607 | 0 到 16777215 |
INT 或 INTEGER | 4 | -2147483648 到 2147483647 | 0 到 4294967295 |
BIGINT | 8 | -9223372036854775808 到 9223372036854775807 |
2. 浮点数类型
数据类型 | 存储大小(字节) | 范围 |
---|---|---|
FLOAT | 4 | 依赖于精度 |
DOUBLE | 8 | 依赖于精度 |
2、字符串类型
1. 字符类型
数据类型 | 存储大小 | 用途 |
---|---|---|
CHAR | 固定长度 | 存储固定长度的字符串,如电话号码 |
VARCHAR | 可变长度 | 存储可变长度的字符串,如用户名 |
2. 二进制字符串类型
数据类型 | 存储大小 | 用途 |
---|---|---|
BINARY | 固定长度 | 存储固定长度的二进制字符串 |
VARBINARY | 可变长度 | 存储可变长度的二进制字符串 |
3. 文本类型
数据类型 | 存储大小 | 用途 |
---|---|---|
TINYTEXT | 最大 255 字节 | 存储较短的文本 |
TEXT | 最大 65535 字节 | 存储中等长度的文本 |
MEDIUMTEXT | 最大 16777215 字节 | 存储较长的文本 |
LONGTEXT | 最大 4294967295 字节 | 存储非常长的文本 |
3.MySQL使用
SQL(结构化查询语言) 是操作关系型数据库的标准语言,包括:
-
SELECT
:查询数据 -
INSERT
:插入数据 -
UPDATE
:更新数据 -
DELETE
:删除数据 -
CREATE
/DROP
:创建或删除表和数据库 -
JOIN
:多表联查
1.SQL
1. 登录 MySQL
在终端中输入以下命令登录 MySQL:
mysql -u root -p
-
-u root
表示以管理员用户登录(root
是 MySQL 的默认管理员账号)。 -
-p
表示提示输入密码。输入你在安装过程中设置的 MySQL 管理员密码。
如果密码正确,你会看到 MySQL 的命令行提示符,类似如下:
mysql>
2. 查看数据库
登录后,查看当前数据库列表:
SHOW DATABASES;
你会看到类似以下输出:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
这些是 MySQL 系统自带的数据库。你可以创建自己的数据库。
3. 创建数据库
创建一个新的数据库,例如 mydatabase
:
CREATE DATABASE mydatabase;
4. 切换到新创建的数据库
USE mydatabase;
5. 创建表
在 mydatabase
数据库中创建一个表,例如 students
:
CREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) NOT NULL,age INT,grade VARCHAR(10)
);
-
id
是主键,自动递增。 -
name
是字符串类型,最大长度为 50,不能为空。 -
age
是整数类型。 -
grade
是字符串类型,最大长度为 10。
6. 插入数据
向 students
表中插入数据:
INSERT INTO students (name, age, grade) VALUES ('Alice', 20, 'A');
INSERT INTO students (name, age, grade) VALUES ('Bob', 22, 'B');
7. 查询数据
查询 students
表中的所有数据:
SELECT * FROM students;
+----+-------+-----+-------+
| id | name | age | grade |
+----+-------+-----+-------+
| 1 | Alice | 20 | A |
| 2 | Bob | 22 | B |
+----+-------+-----+-------+
8. 更新数据
更新表中的数据,例如将 Alice
的年龄改为 21:
UPDATE students SET age = 21 WHERE name = 'Alice';
9. 删除数据
删除表中的数据,例如删除 Bob
的记录:
sql复制
DELETE FROM students WHERE name = 'Bob';
再次查询数据,确认删除是否成功:
sql复制
SELECT * FROM students;
10. 退出 MySQL
EXIT;
11. 其他常用操作
-
查看表结构:
DESCRIBE students;
-
删除表:
DROP TABLE students;
-
删除数据库:
DROP DATABASE mydatabase;
2.列的完整性约束
1. 主键约束(Primary Key)
-
作用:唯一标识表中的每条记录。
-
特点:值必须唯一且不能为空。
-
示例:
sql复制
CREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) );
2. 外键约束(Foreign Key)
-
作用:建立表与表之间的关系。
-
特点:值必须是另一个表的主键值,或者为空。
-
示例:
sql复制
CREATE TABLE enrollments (student_id INT,FOREIGN KEY (student_id) REFERENCES students(id) );
3. 唯一约束(Unique)
-
作用:确保列中的值是唯一的。
-
特点:允许空值,但每个值必须唯一。
-
示例:
sql复制
CREATE TABLE users (email VARCHAR(100) UNIQUE );
4. 非空约束(NOT NULL)
-
作用:确保列中的值不能为空。
-
特点:插入或更新时必须提供值。
-
示例:
sql复制
CREATE TABLE employees (name VARCHAR(50) NOT NULL );
5. 默认值约束(DEFAULT)
-
作用:为列指定默认值。
-
特点:插入记录时未指定值时自动使用默认值。
-
示例:
sql复制
CREATE TABLE orders (order_date DATE DEFAULT CURRENT_DATE );
6. 检查约束(CHECK)
-
作用:限制列的值必须满足某些条件。
-
特点:确保数据符合特定规则。
-
示例:
sql复制
CREATE TABLE products (price DECIMAL(10, 2) CHECK (price > 0) );
7. 添加和删除约束
-
添加约束:
sql复制
ALTER TABLE table_name ADD CONSTRAINT constraint_name constraint_type;
-
删除约束:
sql复制
ALTER TABLE table_name DROP CONSTRAINT constraint_name;
4.操作 MySQL 的三种主流 C/C++ 接口/库
名称 | 语言 | 说明 |
---|---|---|
libmysqlclient-dev | C | 最底层、官方提供的 C API |
libmysql++ | C++ | C++ 封装库,封装了上面的 C API |
MySQL Connector/C++ | C++ | Oracle 官方维护的 C++ 驱动,现代化设计 |
1️⃣ libmysqlclient-dev
- 最底层的 C API(推荐了解)
-
作用:提供最基础的
C API
来操作 MySQL。 -
包管理器名(Debian/Ubuntu):
sudo apt install libmysqlclient-dev
-
常用头文件:
#include <mysql/mysql.h>
-
使用方式:
-
初始化连接
-
发送 SQL 查询
-
获取结果集
-
-
适合:底层开发、嵌入式开发、对性能控制要求高的场景。
#include <mysql++/mysql++.h>mysqlpp::Connection conn(false); conn.connect("testdb", "localhost", "root", "password");mysqlpp::Query query = conn.query("SELECT * FROM users"); mysqlpp::StoreQueryResult res = query.store();
✅ 优点:轻量、速度快、控制力强
❌ 缺点:接口是 C 风格,写起来繁琐、类型安全差、易出错
2️⃣ libmysql++
- 对 C API 的 C++ 封装(较旧但简单)
-
作用:基于
libmysqlclient
封装,提供更易用的 C++ 接口。 -
安装方式(Ubuntu):
sudo apt install libmysql++-dev
-
项目地址:http://tangentsoft.com/mysql++/
#include <mysql++/mysql++.h>mysqlpp::Connection conn(false);
conn.connect("testdb", "localhost", "root", "password");mysqlpp::Query query = conn.query("SELECT * FROM users");
mysqlpp::StoreQueryResult res = query.store();
✅ 优点:写起来比 C API 简洁
❌ 缺点:项目已经多年未更新,缺乏现代 C++ 特性(比如 smart pointer, exception 安全等)
3️⃣ MySQL Connector/C++
- Oracle 官方的现代 C++ 驱动(推荐)
-
作用:Oracle 提供的官方 C++ 库,支持 C++11/14 风格编程,模块化、支持连接池等。
-
安装方式(Ubuntu):
sudo apt install libmysqlcppconn-dev
-
头文件:
<mysql_driver.h>
、<mysql_connection.h>
等
#include <mysql_driver.h>
#include <mysql_connection.h>
#include <cppconn/prepared_statement.h>sql::mysql::MySQL_Driver* driver = sql::mysql::get_mysql_driver_instance();
std::unique_ptr<sql::Connection> con(driver->connect("tcp://127.0.0.1:3306", "root", "pwd"));
con->setSchema("testdb");std::unique_ptr<sql::PreparedStatement> stmt(con->prepareStatement("INSERT INTO users(name) VALUES(?)"));
stmt->setString(1, "Alice");
stmt->execute();
✅ 优点:
-
支持 prepared statements(防注入)
-
面向对象
-
官方维护,现代设计
❌ 缺点:比 C API 慢一点,依赖较多
✅ 总结:我该选哪个?
如果你是... | 推荐选择 | 理由 |
---|---|---|
新手/想快速开发 | MySQL Connector/C++ (libmysqlcppconn-dev ) | 现代 C++ 风格、易用、安全 |
想学底层 / 嵌入式 | libmysqlclient-dev | 学会底层原理,便于扩展 |
想用老项目代码 | libmysql++ | 有些老代码仍然使用它,但新项目建议不要用了 |
5.C/C++ 使用 MySQL API 操作 数据库
// include/db.hpp#pragma once
#include <string>
#include <vector>struct FileMeta {std::string filename;std::string filepath;std::string user;long size;
};bool init_db();
void close_db();
bool insert_file(const FileMeta &file);
std::vector<FileMeta> query_files_by_path(const std::string &path);
// src/db.cpp#include "db.hpp"
#include <iostream>
#include <mysql/mysql.h>MYSQL *conn = nullptr;bool init_db() {// 1.初始化一个 MySQL 连接句柄conn = mysql_init(nullptr);if (!conn) {std::cerr << "mysql_init failed\n";return false;}// 2.建立与 MySQL 数据库if (!mysql_real_connect(conn, "127.0.0.1", "root", "123456", "metadb", 3306,nullptr, 0)) {std::cerr << "mysql_real_connect failed: " << mysql_error(conn) << "\n";return false;}return true;
}void close_db() {if (conn) {//关闭与MySQL数据库的连接mysql_close(conn);conn = nullptr;}
}// 向数据库插入文件元数据
bool insert_file(const FileMeta &file) {// 1.SQL 插入语句格式化到 query 数组char query[1024];snprintf(query, sizeof(query),"INSERT INTO file_metadata (filename, filepath, user, size) VALUES ""('%s', '%s', '%s', %ld)",file.filename.c_str(), file.filepath.c_str(), file.user.c_str(),file.size);// 2.mysql_query 函数执行 SQL 查询语句if (mysql_query(conn, query)) {std::cerr << "Insert failed: " << mysql_error(conn) << "\n";return false;}return true;
}std::vector<FileMeta> query_files_by_path(const std::string &path) {std::vector<FileMeta> results;std::string query = "SELECT filename, filepath, user, size FROM ""file_metadata WHERE filepath = '" +path + "'";if (mysql_query(conn, query.c_str())) {std::cerr << "Query failed: " << mysql_error(conn) << "\n";return results;}// 3.mysql_store_result 函数获取查询结果。MYSQL_RES *res = mysql_store_result(conn);if (!res) {std::cerr << "mysql_store_result failed\n";return results;}// 4.mysql_fetch_row 函数逐行获取查询结果MYSQL_ROW row;while ((row = mysql_fetch_row(res))) {FileMeta file;file.filename = row[0];file.filepath = row[1];file.user = row[2];file.size = std::stol(row[3]);results.push_back(file);}mysql_free_result(res);return results;
}
//src/main.cpp
#include "db.hpp"
#include <iostream>int main() {if (!init_db()) {return 1;}FileMeta file = {"report.docx", "/home/user/docs", "alice", 5120};insert_file(file);auto files = query_files_by_path("/home/user/docs");for (const auto &f : files) {std::cout << f.filename << " (" << f.size << " bytes) - " << f.user << "\n";}close_db();return 0;
}
cmake_minimum_required(VERSION 3.10)
project(MetaFS_C_API)set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)# 设置头文件路径
include_directories(${PROJECT_SOURCE_DIR}/include)# 设置源文件
file(GLOB SOURCES${PROJECT_SOURCE_DIR}/src/*.cpp
)# 生成可执行文件
add_executable(meta_fs ${SOURCES})# 链接 MySQL client 库
target_link_libraries(meta_fs mysqlclient)
——————————————————————————————————————————
#pragma once
#include <string>
#include <vector>struct FileMeta {std::string filename;std::string filepath;std::string user;long size;
};bool init_db();
bool insert_file(const FileMeta &file);
std::vector<FileMeta> list_files(const std::string &path);
#include "db.hpp"
#include <cppconn/prepared_statement.h> //SQL执行
#include <cppconn/resultset.h> //查询结果
#include <fstream>
#include <mysql_connection.h> //链接数据库
#include <mysql_driver.h> //驱动
#include <nlohmann/json.hpp>using json = nlohmann::json;
static sql::Connection *conn = nullptr;bool init_db() {std::ifstream file("config/db_config.json");json cfg;file >> cfg;// 1.创建 MySQL 驱动对象,初始化驱动sql::mysql::MySQL_Driver *driver = sql::mysql::get_mysql_driver_instance();// 2. 建立连接conn = driver->connect(cfg["host"], cfg["user"], cfg["password"]);// 3. 选择数据库conn->setSchema(cfg["database"]);return true;
}// 将文件元数据插入到数据库中
bool insert_file(const FileMeta &file) {// 1.准备SQL语句sql::PreparedStatement *stmt =conn->prepareStatement("INSERT INTO file_metadata(filename, filepath, ""user, size) VALUES (?, ?, ?, ?)");// 2.设置参数stmt->setString(1, file.filename);stmt->setString(2, file.filepath);stmt->setString(3, file.user);stmt->setInt64(4, file.size);// 3.执行SQL语句stmt->execute();// 4.释放PreparedStatement对象,避免内存泄漏delete stmt;return true;
}//从数据库中查询指定路径下的所有文件元数据,并将结果存储到一个std::vector<FileMeta>
//中返回
std::vector<FileMeta> list_files(const std::string &path) {std::vector<FileMeta> files;sql::PreparedStatement *stmt =conn->prepareStatement("SELECT filename, filepath, user, size FROM ""file_metadata WHERE filepath = ?");stmt->setString(1, path);// 3.执行查询sql::ResultSet *res = stmt->executeQuery();// 4.处理查询结果while (res->next()) {files.push_back({res->getString("filename"), res->getString("filepath"),res->getString("user"), res->getInt64("size")});}delete res;delete stmt;return files;
}
#include "db.hpp"
#include <iostream>int main() {if (!init_db()) {std::cerr << "DB init failed\n";return 1;}FileMeta f1 = {"data.txt", "/home/user/docs", "alice", 2048};insert_file(f1);auto files = list_files("/home/user/docs");for (const auto &f : files) {std::cout << f.filename << " (" << f.size << " bytes) - " << f.user << "\n";}return 0;
}
-- sql/init.sqlCREATE DATABASE IF NOT EXISTS metadb;USE metadb;CREATE TABLE IF NOT EXISTS file_metadata (id INT AUTO_INCREMENT PRIMARY KEY,filename VARCHAR(255) NOT NULL,filepath VARCHAR(255) NOT NULL,user VARCHAR(64),create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,size BIGINT
);
cmake_minimum_required(VERSION 3.10)
project(MiniMetaFS)set(CMAKE_CXX_STANDARD 17)include_directories(include)add_executable(minifs src/main.cpp src/db.cpp)find_package(MySQL REQUIRED)
target_link_libraries(minifs mysqlcppconn)# 使用 nlohmann/json(假设你用的是头文件方式)
相关文章:
MySQL介绍及使用
1. 安装、启动、配置 MySQL 1. 安装 MySQL 更新软件包索引 sudo apt update 安装 MySQL 服务器 sudo apt install mysql-server 安装过程中可能会提示你设置 root 用户密码。如果没有提示,可以跳过,后续可以手动设置。 2. 配置 MySQL 运行安全脚本…...
九、重学C++—类和函数
上一章节: 八、重学C—动态多态(运行期)-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/147004745?spm1001.2014.3001.5502 本章节代码: cpp/cppClassAndFunc.cpp CuiQingCheng/cppstudy - 码云 - 开源中国…...
C++·包装器
目录 function 包装各种可调用对象 包装类成员函数 应用举例 bind 一般形式 arg_list 调整参数顺序 调整参数个数(绑死) 应用举例 小知识 function 包含在<functional>头文件中,是一个类模版,但本质还是仿函数。…...
Linux动态监控进程利器:top命令详解
动态监控进程利器:top命令详解 在Linux系统的日常管理中,实时监控进程状态和资源使用情况是一项至关重要的任务。top命令作为Linux系统自带的强大工具,以其动态更新的特性,成为了系统管理员和开发者的得力助手。本文将全面解析to…...
家庭路由器wifi设置LAN2LAN和LAN2WAN
一、LAN2LAN 方式:桥接模式,主路由器的LAN口接入子路由器的LAN口 子路由器先重置登录密码(知道密码可以不重置),登录后台 1、设置为动态IP模式 2、找到LAN口设置 1)ip设置和主路由器在一个网段上&#…...
Python实现NOA星雀优化算法优化LightGBM分类模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 在机器学习领域,分类问题是许多实际应用场景的核心任务之一,例如信用评估、…...
面试顺序优化:基于Matlab的高效决策方案
内容摘要 本文围绕面试顺序问题,通过建立数学模型并利用Matlab编程求解,寻找使面试总时长最短的面试顺序安排。详细介绍问题分析、模型构建及Matlab代码实现过程,为类似的时间优化问题提供参考,助力提升流程效率。 关键词&#x…...
【暑期实习之战】2024年美团秋招技术岗第一批笔试(练习)
选择题 6. 在MySQL中可以用来执行预处理语句的是() A execute B prepare C deallocate D using prepare:用于预编译SQL语句(为执行做准备),但并非执行动作本身。execute:专门用于执行已通过 PREPARE 预处理的语句,是运行预编译查询的关键步骤。✔deallocate prepare:…...
VLAN详解
VLAN(虚拟局域网)详解 1. 基本概念 VLAN(Virtual Local Area Network)是一种通过逻辑划分而非物理连接实现的局域网技术,允许在同一物理网络基础设施上创建多个独立的广播域。 2. 核心功能 功能说明广播域隔离不同V…...
[leetcode]1786. 从第一个节点出发到最后一个节点的受限路径数(Dijkstra+记忆化搜索/dp)
题目链接 题意 给定一个无向连通图,edges{u,v,w} 表示 u u u和 v v v之间有一条无向边,边权为 w w w n n n个点 [ 1 , n ] [1,n] [1,n] 每个点到 n n n的最短路为 d i s [ i ] dis[i] dis[i] 定义受限路径: 从起点 1 1 1到 n n n,路径上的…...
Ubuntu挂载HDD迁移存储PostgreSQL数据
关联博客:windows通用网线连接ubuntu实现ssh登录、桌面控制、文件共享 背景: 在个人ubuntu机器上安装了pgsql,新建了一张表插入了2000w数据用于模拟大批量数据分页查询用,但是发现查询也不慢(在公司测试环境查询1700…...
设计模式简述(五)建造者模式
建造者模式 描述基本要素协调类使用 描述 建造者模式属于创造型设计模式。 通常用于构建一系列复杂对象,这些对象有一定的共性。 我们可以通过不同的建造者,组装不同的对象 与工厂模式的区别,建造者模式更侧重与基于基础构件组装而非直接创…...
ARXML文件解析-2
目录 1 摘要2 常见ARXML文件注意事项以及常见问题2.1 注意事项2.2 常见问题2.3 答疑 3 ARXML解读/编辑指南3.1 解读ARXML文件的步骤3.2 编辑ARXML文件的方法3.3 验证与调试 4 总结 1 摘要 本文主要对ARXML文件的注意事项、常见问题以及解读与编辑进行详细介绍。 上文回顾&…...
Docker设置代理
目录 前言创建代理文件重载守护进程并重启Docker检查代理验证 前言 拉取flowable/flowable-ui失败,用DaoCloud源也没拉下来,不知道是不是没同步。索性想用代理拉镜像。在此记录一下。 创建代理文件 创建docker代理配置 sudo mkdir -p /etc/systemd/s…...
ASP.NET Core Web API 参数传递方式
文章目录 前言一、参数传递方式路由参数(Route Parameters)查询字符串参数(Query String Parameters)请求体参数(Request Body)表单数据(Form Data)请求头参数(Header Pa…...
火语言RPA--PgSQL-导入数据表格
【组件功能】:导入特定的表格数据到包含同样字段的数据表 将表格对象数据通过数据库操作对象导入到指定数据库。 配置预览 配置说明 源表格 表格来源有“来自表格对象”和“来自表达式”2种,表达式支持DataTable类型变量。 对象 对应来自表格对象&…...
Spring Cloud 网关及配置管理教学
一、课程目标 深入理解 Spring Cloud 中网关和配置管理的核心概念、原理及应用场景。熟练掌握 Spring Cloud Gateway 的配置与开发,能够实现请求路由、登录校验、用户信息传递等功能。学会使用 Nacos 进行配置管理,包括共享配置、配置热更新和动态路由的…...
202520 | 微服务
微服务 VS 单体架构 单体架构(Monolithic Architecture)和微服务架构(Microservices Architecture)是两种主流的软件设计模式,它们在开发、部署、扩展和维护等方面有显著差异。以下是两者的详细对比: 1. 定…...
32信号和槽_信号和槽存在的意义(2)
① 一个学生,可以选择多门课程来学习 一门课程,也可以被多个同学来选择 ② 张三这个同学,可以选 语文和数学 . 李四这个同学可以选 语文 和 英语 语文这门课程,既可以被张三选择,也可以被李四选择~~ ③ 引入第三张表作为关联表 ④一个信号,可以 connect 到多个槽函数上 一个槽…...
Mac 上使用 mysql -u root -p 命令,出现“zsh: command not found: mysql“?
一、确定 MySQL 安装路径: 如果你是使用 Homebrew 安装的 MySQL,通常安装路径是 /usr/local/mysql/bin 。 如果你是通过官方 DMG 安装包安装的 MySQL,默认安装路径可能是 /usr/local/mysql/bin 。你可以在终端中使用以下命令来查找 MySQL 的…...
Django REST Framework系列教程(9)——过滤与排序
目录 前情回顾 方法一: 重写get_queryset方法 方法二: 使用django-filter 安装django-filter 自定义FilterSet类 方法三: 使用SearchFilter类 自定义SearchFilter类 排序OrderingFilter类 在前面的DRF系列教程中,我们以博客为例介绍了序列化器(Serializer),…...
工业级主题系统程序设计
一、架构优化方案 #mermaid-svg-gB72o6CBc2UMgkrv {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-gB72o6CBc2UMgkrv .error-icon{fill:#552222;}#mermaid-svg-gB72o6CBc2UMgkrv .error-text{fill:#552222;stroke:#5…...
Java 逐梦力扣之旅_[204. 计数质数]
题目: 204. 计数质数 给定整数 n ,返回 所有小于非负整数 n 的质数的数量 。 示例 1: 输入:n 10 输出:4 解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。示例 2: 输入:n 0 输出&…...
[3.3] 阻塞与非阻塞通信 理论+代码
文章目录 1. 阻塞通信的发生和解决2. 点对点通信应用程序案例 - 随机步行(Random Walk) 1. 阻塞通信的发生和解决 MPI的p2p中包括两种模式: a. 阻塞通信(Blocking) MPI_Send 和 MPI_Recv 在返回前,必须满…...
node_modules\deasync: Command failed.
运行:“yarn install” 时报错 PS D:\WebPro\hainan-mini-program> yarn install yarn install v1.22.19 [1/4] Resolving packages... [2/4] Fetching packages... [3/4] Linking dependencies... warning " > babel-loader8.2.2" has un…...
二十种中药果实识别分类系统,Python/resnet18/pytorch
二十种中药果实识别分类系统,Python/resnet18/pytorch 基于pytorch训练, resnet18网络,可用于训练其他分类问题,也可自己重新训练 20类中药材具体包括:(1) 补骨脂,(2) 草豆蔻,(3) 川楝子,(4) 地肤子&…...
C++·异常
目录 概念 使用 异常的抛出和捕获 栈展开 catch匹配 继承体系例子 异常重新抛出 异常安全问题 例: 异常规范 小知识 概念 异常处理机制允许程序中独⽴开发的部分能够在运⾏时就出现的问题进⾏通信并做出相应的处理, 异常使得我们能够将问题的…...
C 语言高级编程指南:回调函数与设计模式
C 语言高级编程指南:回调函数与设计模式 目录 回调函数详解C语言中的设计模式高级回调函数应用内存管理与安全多线程环境下的设计模式 回调函数详解 1. 什么是回调函数? 回调函数(Callback Function)是一个通过函数指针调用的…...
SeaTunnel系列之:Apache SeaTunnel编译和安装
Apache SeaTunnel编译 Prepare编译克隆源代码本地安装子项目从源代码构建 SeaTunnel构建子模块安装 JetBrains IDEA Scala 插件安装 JetBrains IDEA Lombok 插件代码风格运行简单示例不仅如此 安装下载 SeaTunnel 发布包下载连接器插件从源代码构建 SeaTunnel 运行 SeaTunnel 在…...
zk基础—5.Curator的使用与剖析二
大纲 1.基于Curator进行基本的zk数据操作 2.基于Curator实现集群元数据管理 3.基于Curator实现HA主备自动切换 4.基于Curator实现Leader选举 5.基于Curator实现分布式Barrier 6.基于Curator实现分布式计数器 7.基于Curator实现zk的节点和子节点监听机制 8.基于Curator创…...
bge-m3+deepseek-v2-16b+离线语音能力实现离线文档向量化问答语音版
ollama run deepseek-v2:16b ollama pull bge-m3 1、离线听写效果的大幅度提升。50M 1.3G(每次初始化都会很慢)---优化到首次初始化使用0延迟响应。 2、文档问答历史问题处理与优化,文档问答离线策略讨论与参数暴露。 3、离线大模型答复中断…...
[leetcode]3123. 最短路径中的边(Dijkstra+反向搜索找边)
题目链接 题意 给定n个点的无向图 给定一个edges{u,v,w}数组 表示u到v有一条边权为w的无向边 返回一个bool数组ans,ans[i]1表示edges[i]在任意一条0到n-1的最短路中 思路 先Dijkstra找出最短路再从n-1出发 反向搜索 当前点i,邻接点j,边权…...
构建macOS命令速查手册:基于Flask的轻量级Web应用实践
构建macOS命令速查手册:基于Flask的轻量级Web应用实践 一、项目概述 本文介绍一个基于Flask框架开发的macOS命令速查Web应用。该应用通过结构化的命令数据存储和响应式前端设计,为用户提供便捷的命令查询体验,具备以下特点: 六…...
中国移动启动数字乡村“五新升级”:年底前,行政村5G覆盖达95%
大湾区经济网品牌观察报道,近日,在国家全面推进乡村振兴的战略背景下,中国移动近日发布数字乡村升级行动计划,以“AI大模型数智化平台”为核心引擎,围绕“五新升级”构建“两个新型”信息服务体系。 一、数字基建筑基&…...
借助mcpo在open-webui中使用mcp
open-webui前几天发布了0.6版本,我立即进行了升级。新版本中一个重要功能是通过mcpo方式支持了mcp server。本文将介绍mcpo是什么,以及如何在open-webui中使用它。同时,我也会分享几个在接入过程中遇到的问题及解决方案。 首先来介绍mcpo&…...
Mysql的备份还原
MySQL日志 日志类型 MySQL有几个不同的日志文件,可以帮助你找出mysqld内部发生的事情: 日志文件记入文件中的信息类型错误日志记录启动、运行或停止时出现的问题。查询日志记录建立的客户端连接和执行的语句。二进制日志记录所有更改数据的语句。主要用…...
测试:正交法设计测试用例
目录 一、什么是正交法 二、利用正交表设计测试用例 正交法设计测试用例的步骤 一、什么是正交法 正交法的目的是为了减少测试用例的数量,让尽可能少的用例覆盖两两组合。认识正交表。 最简单的正交表是L4(2^3),含意如下: “L”代表正…...
zk基础—5.Curator的使用与剖析一
大纲 1.基于Curator进行基本的zk数据操作 2.基于Curator实现集群元数据管理 3.基于Curator实现HA主备自动切换 4.基于Curator实现Leader选举 5.基于Curator实现分布式Barrier 6.基于Curator实现分布式计数器 7.基于Curator实现zk的节点和子节点监听机制 8.基于Curator创…...
VSCode中结合DeepSeek使用Cline插件的感受
前言 听网上有传言说AI智能插件Cline非常的好用,而且相对Cursor而言还是免费的,捆绑的大模型选择也比较的广泛。所以,特意安装试用了一下。 我的采用IDE是VSCode,捆绑的大模型是最近比较火的DeepSeek。总体使用下来感觉非常的棒。…...
安卓开发工程师-Java 常用数据结构
1. Java 中的数组和集合有什么区别? 数组: 长度固定:一旦声明,长度不能改变。类型单一:只能存储相同类型的元素。存储效率高:底层是连续的内存空间,访问速度快。示例代码: int[] …...
thinkphp8.0上传图片到阿里云对象存储(oss)
1、开通oss,并获取accessKeyId、accessKeySecret <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><tit…...
Angular 2 模板语法详解
Angular 2 模板语法详解 引言 Angular 2 作为一款强大的前端框架,以其组件化的开发模式和高效的性能被众多开发者所青睐。模板语法是Angular 2中用于定义组件UI的关键部分。本文将详细介绍Angular 2的模板语法,帮助开发者更好地理解和运用这一功能。 模板语法概述 Angula…...
进行性核上性麻痹护理攻略:多维度守护健康
日常起居护理 保证患者居住环境安全,清除地面障碍物,避免患者跌倒。家具摆放固定且合理,方便患者活动。为患者准备宽松、舒适、易于穿脱的衣物,减轻穿衣时的困难。在饮食上,提供富含营养、易于吞咽的食物,…...
MessageQueue --- RabbitMQ WorkQueue
MessageQueue --- RabbitMQ WorkQueue 什么是WorkQueue如何分发RoundRobinFair dispatch (Prefetch) --- 能者多劳 什么是WorkQueue Work queues,任务模型。简单来说就是让多个消费者绑定到一个队列,共同消费队列中的消息。当消息处理比较耗时的时候&…...
Redis内存碎片详解!
目录 一、 什么是内存碎片?🤔二、 为什么 Redis 会有内存碎片呢?🤷♀️三、 如何查看 Redis 内存碎片的信息?🔍四、 如何清理 Redis 内存碎片?🧹五、总结📝 dz…...
如何使用 Nginx 代理 Easysearch 服务
Nginx 是一个高性能的 HTTP 服务器和反向代理服务器,广泛用于负载均衡、缓存、SSL 终端和服务代理等场景。本篇将尝试使用 Nginx 代理 Easysearch 服务,方法同样适用于 Elasticsearch 和 Opensearch。 测试环境 Easysearch 集群版本为 1.10.0ÿ…...
用python输出OLED字模库的符号
提示:博主是小白,如有不足,望海涵和指出 在单片机上练习使用OLED显示屏时,可以看到有个OLED字模库 本文用python将这些字符打印出来,代码如下(本文只适用与128*64的OLED,如果是其它OLED…...
【java】Class.newInstance()
在 Java 中,Class.newInstance()是一个用于创建类的新实例的方法。它调用类的无参构造函数来创建对象。然而,从 Java 9 开始,Class.newInstance()方法已经被标记为废弃,推荐使用其他替代方法。 Class.newInstance()的使用 Class.…...
Apache Arrow 使用
下述操作参考 Building Arrow C — Apache Arrow v20.0.0.dev267 安装依赖组件 sudo apt-get install \build-essential \ninja-build \cmake 下载源码 git clone --recursive --shallow-submodules gitgithub.com:apache/arrow.git 配置 创建build目录并且进入 mkdir a…...
第二届图像处理与人工智能国际学术会议(ICIPAI2025)
重要信息 时间:2025年4月18日-20日 地点:吉林-长春(线上线下结合) 官网:www.icipai.org 简介(部分) 主题 其他 图像处理与人工智能(Image Processing & Artificial Intell…...