当前位置: 首页 > news >正文

MySQL 错误码

作为 Java 开发者,我们每天都在与 MySQL 打交道,而错误码就像数据库抛出的 “密码”—— 解读对了,问题迎刃而解;解读错了,可能陷入数小时的排查僵局。从连接失败到数据冲突,从权限问题到性能瓶颈,MySQL 的错误码体系隐藏着丰富的信息。本文将系统梳理 MySQL 最常见的错误码,不仅告诉你 “是什么”,更会教你 “为什么” 和 “怎么办”,让你面对数据库报错时不再手足无措。

一、连接与通信类错误:数据库的 “门禁系统” 故障

连接数据库是所有操作的第一步,这一环节的错误码往往直接阻断后续工作。这类错误多与网络、权限、服务状态相关,解决它们需要兼顾数据库配置与环境检查。

1.1 错误码 1045:Access denied for user 'xxx'@'xxx' (using password: YES/NO)

错误含义:用户访问被拒绝,可能是用户名、密码错误或权限不足。

出现场景

  • 应用程序连接数据库时输入的密码错误
  • 数据库用户没有从当前 IP 地址访问的权限
  • 用户被锁定或已过期
  • 密码加密方式与 MySQL 版本不兼容(如 MySQL8.0 默认 caching_sha2_password,旧客户端不支持)

解决方法

  1. 验证用户名和密码的正确性
  2. 检查用户的主机访问权限
  3. 确认用户状态(是否锁定、过期)
  4. 调整密码加密方式(如需兼容旧客户端)

示例 SQL

-- 查看用户权限信息
SELECT user, host, authentication_string, plugin, account_locked, password_expired 
FROM mysql.user WHERE user = 'app_user';-- 授予用户从指定IP访问的权限
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'192.168.1.%' WITH GRANT OPTION;
FLUSH PRIVILEGES;-- 修改用户密码并指定加密方式(兼容旧客户端)
ALTER USER 'app_user'@'192.168.1.%' 
IDENTIFIED WITH mysql_native_password BY 'new_secure_password';
FLUSH PRIVILEGES;

Java 处理示例

package com.example.db.util;import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;@Slf4j
public class DbConnectionUtil {private static final String DRIVER_CLASS = "com.mysql.cj.jdbc.Driver";private static final String DB_URL = "jdbc:mysql://localhost:3306/app_db?useSSL=false&serverTimezone=UTC";private static final String USERNAME = "app_user";private static final String PASSWORD = "app_password";/*** 获取数据库连接*/public static Connection getConnection() {Connection connection = null;try {// 加载驱动Class.forName(DRIVER_CLASS);// 设置连接属性Properties props = new Properties();props.setProperty("user", USERNAME);props.setProperty("password", PASSWORD);// 建立连接connection = DriverManager.getConnection(DB_URL, props);log.info("数据库连接成功");} catch (ClassNotFoundException e) {log.error("MySQL驱动类未找到", e);} catch (SQLException e) {// 处理1045错误if (e.getErrorCode() == 1045) {String message = e.getMessage();if (message.contains("using password: YES")) {log.error("1045错误:密码错误或用户无权限访问", e);// 实际应用中可触发告警或密码重置流程} else {log.error("1045错误:未提供密码或密码为空", e);}} else {log.error("数据库连接异常,错误码:{}", e.getErrorCode(), e);}}return connection;}
}

1.2 错误码 2003:Can't connect to MySQL server on 'xxx' (10061 "Unknown error")

错误含义:无法连接到指定主机的 MySQL 服务器。

出现场景

  • MySQL 服务未启动
  • 服务器防火墙阻止了 3306 端口的访问
  • 网络不通或主机地址错误
  • MySQL 配置了 bind-address=127.0.0.1,仅允许本地连接

解决方法

  1. 检查 MySQL 服务状态并确保已启动
  2. 验证主机地址和端口号的正确性
  3. 检查防火墙规则,开放 3306 端口
  4. 调整 MySQL 配置文件中的 bind-address(如需远程访问)

示例操作

# 检查MySQL服务状态(Linux)
systemctl status mysqld# 启动MySQL服务
systemctl start mysqld# 查看防火墙3306端口规则(CentOS)
firewall-cmd --query-port=3306/tcp# 开放3306端口
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload

MySQL 配置调整(my.cnf 或 my.ini)

# 注释掉bind-address或改为0.0.0.0允许所有IP访问
# bind-address = 127.0.0.1
bind-address = 0.0.0.0# 重启MySQL使配置生效
systemctl restart mysqld

1.3 错误码 2013:Lost connection to MySQL server during query

错误含义:查询过程中与 MySQL 服务器的连接丢失。

出现场景

  • 长时间未活动的连接被服务器主动关闭
  • 查询执行时间过长,超过 wait_timeout 设置
  • 网络不稳定导致连接中断
  • 服务器内存不足或崩溃

解决方法

  1. 调整连接超时参数(wait_timeout、interactive_timeout)
  2. 优化慢查询,减少执行时间
  3. 实现连接池的心跳检测机制
  4. 检查服务器资源使用情况

示例 SQL(调整超时参数)

-- 查看当前超时设置
SHOW VARIABLES LIKE 'wait_timeout';
SHOW VARIABLES LIKE 'interactive_timeout';-- 临时调整超时时间(单位:秒,重启后失效)
SET GLOBAL wait_timeout = 3600;
SET GLOBAL interactive_timeout = 3600;

Spring Boot 连接池配置(application.yml)

spring:datasource:url: jdbc:mysql://localhost:3306/app_db?useSSL=false&serverTimezone=UTCusername: app_userpassword: app_passworddriver-class-name: com.mysql.cj.jdbc.Driverhikari:maximum-pool-size: 10minimum-idle: 5idle-timeout: 300000  # 5分钟,需小于MySQL的wait_timeoutconnection-timeout: 20000# 心跳检测查询connection-test-query: SELECT 1

二、SQL 语法与执行类错误:编写 SQL 时的 “语法陷阱”

这类错误通常是由于 SQL 语句不符合语法规范或执行逻辑有误导致的,编译器级别的错误往往容易排查,但某些边界情况可能隐藏较深。

2.1 错误码 1064:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'xxx' at line x

错误含义:SQL 语法错误,MySQL 无法解析语句。

出现场景

  • 关键字拼写错误(如 SELEC、FROm)
  • SQL 语句结构不正确(如缺少逗号、括号不匹配)
  • 使用了 MySQL 不支持的语法或函数
  • 表名、列名使用了关键字且未加反引号包裹

解决方法

  1. 仔细检查 SQL 语句的拼写和结构
  2. 对关键字作为标识符的情况,使用反引号 ` 包裹
  3. 确认使用的函数和语法与 MySQL 版本兼容
  4. 分段执行复杂 SQL,定位错误位置

错误示例与修正

-- 错误示例1:关键字拼写错误
SELEC id, name FROM user WHERE age > 18;  -- SELEC应为SELECT-- 错误示例2:关键字作为表名未处理
SELECT * FROM order WHERE id = 100;  -- order是关键字-- 错误示例3:括号不匹配
SELECT COUNT(*) FROM (SELECT id FROM user WHERE status = 1;  -- 缺少右括号-- 正确示例
SELECT id, name FROM user WHERE age > 18;SELECT * FROM `order` WHERE id = 100;  -- 使用反引号包裹关键字SELECT COUNT(*) FROM (SELECT id FROM user WHERE status = 1) AS t;  -- 补充右括号并添加别名

运行

2.2 错误码 1054:Unknown column 'xxx' in 'field list'

错误含义:在字段列表中存在未知的列名。

出现场景

  • 列名拼写错误
  • 引用了不存在的列
  • 表别名使用不当,导致列引用歧义
  • 多表连接时未指定列所属的表(当多表存在同名列时)

解决方法

  1. 核对表结构,确认列名的正确性
  2. 使用DESCRIBE table_name查看表的实际列名
  3. 多表查询时为表指定别名,并通过别名引用列
  4. 检查 ORM 框架的实体类与表结构是否映射正确

错误示例与修正

sql

-- 错误示例1:列名拼写错误
SELECT usr_id, usr_name FROM user;  -- 实际列名为user_id, user_name-- 错误示例2:多表连接列引用歧义
SELECT id, name FROM user, role WHERE user.role_id = role.id;  -- id在两个表中都存在-- 正确示例
SELECT user_id, user_name FROM user;-- 使用别名明确列所属表
SELECT u.id AS user_id, u.name AS user_name, r.name AS role_name
FROM user u
JOIN role r ON u.role_id = r.id;

2.3 错误码 1146:Table 'xxx.xxx' doesn't exist

错误含义:指定的表不存在。

出现场景

  • 表名拼写错误
  • 表确实未创建
  • 访问了错误的数据库(库名错误)
  • 用户没有访问该表的权限(有时也会报此错误)
  • 使用了大小写敏感的表名(在区分大小写的文件系统上)

解决方法

  1. 检查表名拼写和数据库名称是否正确
  2. 确认表已创建,可通过SHOW TABLES查看
  3. 验证当前数据库是否为目标数据库(SELECT DATABASE()
  4. 检查用户对表的访问权限
  5. 在区分大小写的系统上,确保表名大小写与创建时一致

示例 SQL 排查

-- 查看当前数据库
SELECT DATABASE();-- 切换到正确的数据库
USE target_db;-- 查看当前数据库中的表
SHOW TABLES;-- 检查表是否存在(精确匹配)
SHOW TABLES LIKE 'user';-- 查看用户权限
SHOW GRANTS FOR 'app_user'@'192.168.1.%';

三、数据完整性与约束类错误:数据库的 “数据防线” 报警

MySQL 通过主键、外键、唯一索引、非空等约束保证数据完整性,当操作违反这些约束时,会触发相应的错误码。理解这些错误是保证数据质量的关键。

3.1 错误码 1062:Duplicate entry 'xxx' for key 'xxx'

错误含义:违反唯一约束,插入或更新的数据在唯一索引列上存在重复值

出现场景

  • 向有唯一索引的列插入重复值
  • 更新数据导致唯一索引列出现重复
  • 复合唯一索引的组合值重复
  • 主键值重复(主键自动包含唯一约束)

解决方法

  1. 检查插入 / 更新的值,确保不违反唯一约束
  2. 使用INSERT IGNORE忽略重复记录(不推荐,可能隐藏问题)
  3. 使用INSERT ... ON DUPLICATE KEY UPDATE处理重复记录
  4. 调整唯一索引设计(如需允许重复)

示例 SQL 处理

-- 示例表结构
CREATE TABLE user (id BIGINT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(50) NOT NULL,email VARCHAR(100) NOT NULL,-- 唯一约束UNIQUE KEY uk_username (username),UNIQUE KEY uk_email (email)
);-- 错误示例:插入重复username
INSERT INTO user (username, email) 
VALUES ('zhangsan', 'zhangsan@example.com');-- 再次插入相同username会报1062错误
INSERT INTO user (username, email) 
VALUES ('zhangsan', 'zhangsan2@example.com');-- 正确处理方式1:使用ON DUPLICATE KEY UPDATE
INSERT INTO user (username, email) 
VALUES ('zhangsan', 'zhangsan2@example.com')
ON DUPLICATE KEY UPDATE email = VALUES(email);  -- 重复时更新email-- 正确处理方式2:先查询是否存在,再决定插入或更新
-- 检查是否存在
SELECT id FROM user WHERE username = 'zhangsan';
-- 不存在则插入,存在则更新(应用层逻辑)

3.2 错误码 1048:Column 'xxx' cannot be null

错误含义:向声明为 NOT NULL 的列插入了 NULL 值。

出现场景

  • 对非空列插入 NULL 值
  • 插入语句未包含非空列(且无默认值)
  • 更新操作将非空列设置为 NULL
  • 应用程序传递了 NULL 值到非空字段

解决方法

  1. 确保插入 / 更新时为非空列提供有效值
  2. 为非空列设置合理的默认值(DDL 层面)
  3. 应用程序层增加参数校验,避免传递 NULL 值
  4. 如需允许 NULL,可修改表结构去除 NOT NULL 约束(谨慎操作)

示例 SQL 处理

-- 示例表结构
CREATE TABLE product (id BIGINT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(100) NOT NULL,  -- 非空列price DECIMAL(10,2) NOT NULL,  -- 非空列description TEXT  -- 可空列
);-- 错误示例:非空列未提供值
INSERT INTO product (price) VALUES (99.99);  -- 缺少name字段-- 错误示例:非空列插入NULL
INSERT INTO product (name, price) VALUES (NULL, 99.99);  -- name为NULL-- 正确示例
INSERT INTO product (name, price) VALUES ('笔记本电脑', 5999.99);-- 为非空列添加默认值(修改表结构)
ALTER TABLE product 
MODIFY COLUMN price DECIMAL(10,2) NOT NULL DEFAULT 0.00;-- 修改后,可省略price字段(使用默认值)
INSERT INTO product (name) VALUES ('无线鼠标');  -- price使用默认值0.00

Java 中参数校验示例

package com.example.db.service;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;import java.math.BigDecimal;@Slf4j
@Service
public class ProductService {private final JdbcTemplate jdbcTemplate;@Autowiredpublic ProductService(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}/*** 创建产品,包含参数校验防止1048错误*/public Long createProduct(String name, BigDecimal price, String description) {// 参数校验:非空列必须有值if (!StringUtils.hasText(name)) {log.error("产品名称不能为空");throw new IllegalArgumentException("产品名称不能为空");}if (Objects.isNull(price) || price.compareTo(BigDecimal.ZERO) < 0) {log.error("产品价格必须大于等于0");throw new IllegalArgumentException("产品价格必须大于等于0");}String sql = "INSERT INTO product (name, price, description) VALUES (?, ?, ?)";try {// 使用GeneratedKeyHolder获取自增IDKeyHolder keyHolder = new GeneratedKeyHolder();jdbcTemplate.update(connection -> {PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);ps.setString(1, name);ps.setBigDecimal(2, price);// 可空字段允许为NULLps.setString(3, StringUtils.hasText(description) ? description : null);return ps;}, keyHolder);Long productId = keyHolder.getKey().longValue();log.info("产品[{}]创建成功,ID:{}", name, productId);return productId;} catch (Exception e) {log.error("创建产品失败", e);throw new RuntimeException("创建产品失败", e);}}
}

3.3 错误码 1452:Cannot add or update a child row: a foreign key constraint fails (xxx.xxx, CONSTRAINT xxx FOREIGN KEY (xxx) REFERENCES xxx (xxx))

错误含义:违反外键约束,无法添加或更新子表记录,因为父表中不存在对应的关联记录。

出现场景

  • 向子表插入的外键值在父表中不存在
  • 更新子表的外键值为父表中不存在的值
  • 删除父表中被引用的记录,而子表中仍有相关记录
  • 父表记录被删除,子表外键未设置级联删除

解决方法

  1. 确保插入 / 更新的外键值在父表中存在
  2. 调整外键约束的级联规则(如 ON DELETE CASCADE)
  3. 先删除子表关联记录,再删除父表记录
  4. 检查外键字段的数据类型是否与父表主键一致

示例 SQL 处理

-- 父表:部门
CREATE TABLE department (id BIGINT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL UNIQUE
);-- 子表:员工(包含外键)
CREATE TABLE employee (id BIGINT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,dept_id BIGINT,-- 外键约束CONSTRAINT fk_emp_dept FOREIGN KEY (dept_id) REFERENCES department(id)-- 可选:设置级联删除-- ON DELETE CASCADE
);-- 先插入父表数据
INSERT INTO department (name) VALUES ('研发部'), ('人事部');-- 正确示例:插入存在的部门ID
INSERT INTO employee (name, dept_id) VALUES ('张三', 1);  -- 1是研发部ID-- 错误示例:插入不存在的部门ID(100不存在)
INSERT INTO employee (name, dept_id) VALUES ('李四', 100);  -- 报1452错误-- 解决方法1:先插入对应的父表记录
INSERT INTO department (name) VALUES ('市场部');  -- 假设生成ID为3
INSERT INTO employee (name, dept_id) VALUES ('李四', 3);  -- 现在3是有效ID-- 解决方法2:修改外键约束为级联删除
ALTER TABLE employee 
DROP FOREIGN KEY fk_emp_dept;ALTER TABLE employee 
ADD CONSTRAINT fk_emp_dept FOREIGN KEY (dept_id) 
REFERENCES department(id) ON DELETE CASCADE;-- 此时删除部门,会自动删除关联的员工记录
DELETE FROM department WHERE id = 3;

四、资源与权限类错误:数据库的 “访问控制” 与 “资源限制”

MySQL 对资源使用和用户权限有严格控制,当操作超出资源限制或权限不足时,会触发相应的错误码。这类错误往往需要管理员介入处理。

4.1 错误码 1142:SELECT command denied to user 'xxx'@'xxx' for table 'xxx'

错误含义:用户没有执行 SELECT 操作的权限。

出现场景

  • 用户缺少对指定表的 SELECT 权限
  • 用户缺少对整个数据库的权限
  • 权限仅授予了特定主机,而当前连接来自其他主机
  • 权限已被撤销但未重新加载

解决方法

  1. 为用户授予必要的权限
  2. 检查权限对应的主机是否匹配当前连接的主机
  3. 授予权限后执行FLUSH PRIVILEGES刷新权限

示例 SQL 授权

-- 查看用户当前权限
SHOW GRANTS FOR 'app_user'@'192.168.1.%';-- 授予对特定表的SELECT权限
GRANT SELECT ON app_db.employee TO 'app_user'@'192.168.1.%';-- 授予对整个数据库的所有权限
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'192.168.1.%';-- 授予所有数据库的SELECT权限(谨慎操作)
GRANT SELECT ON *.* TO 'app_user'@'192.168.1.%';-- 刷新权限使设置生效
FLUSH PRIVILEGES;

4.2 错误码 1044:Access denied for user 'xxx'@'xxx' to database 'xxx'

错误含义:用户没有访问指定数据库的权限。

出现场景

  • 用户未被授予访问该数据库的权限
  • 数据库名称拼写错误(实际不存在该数据库)
  • 用户主机限制不匹配
  • 匿名用户优先匹配(MySQL 用户匹配规则导致)

解决方法

  1. 授予用户访问目标数据库的权限
  2. 确认数据库名称的正确性
  3. 检查用户的主机限制是否正确
  4. 清理可能导致冲突的匿名用户

示例 SQL 处理

-- 授予用户访问数据库的权限
GRANT ALL PRIVILEGES ON target_db.* TO 'app_user'@'192.168.1.%';
FLUSH PRIVILEGES;-- 检查数据库是否存在
SHOW DATABASES LIKE 'target_db';-- 如数据库不存在,创建数据库
CREATE DATABASE IF NOT EXISTS target_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;-- 检查并删除匿名用户(如存在)
DELETE FROM mysql.user WHERE user = '';
FLUSH PRIVILEGES;

4.3 错误码 1092:Too many connections

错误含义:数据库连接数超过了最大允许值。

出现场景

  • 应用程序未正确关闭连接,导致连接泄漏
  • 并发访问量过大,超过了 MySQL 的 max_connections 设置
  • 连接池配置不合理,最大连接数超过 MySQL 限制
  • 长连接未及时释放,占用连接资源

解决方法

  1. 调整 MySQL 的最大连接数设置
  2. 优化应用程序,确保连接正确关闭
  3. 合理配置连接池参数
  4. 监控并杀死长时间空闲的连接

示例操作

-- 查看当前连接数设置
SHOW VARIABLES LIKE 'max_connections';-- 临时调整最大连接数(重启后失效)
SET GLOBAL max_connections = 1000;-- 查看当前连接状态
SHOW PROCESSLIST;-- 杀死长时间空闲的连接(根据Id)
KILL 123;  -- 123是连接ID

MySQL 配置文件调整(my.cnf)

[mysqld]
max_connections = 1000
wait_timeout = 600  # 空闲连接超时时间(秒)
interactive_timeout = 600

Spring Boot 连接池优化配置

spring:datasource:hikari:maximum-pool-size: 50  # 小于MySQL的max_connectionsminimum-idle: 10idle-timeout: 300000  # 5分钟,小于MySQL的wait_timeoutmax-lifetime: 1800000  # 30分钟,定期更换连接connection-timeout: 20000

五、存储引擎与表空间类错误:数据库的 “存储底层” 问题

这类错误与 MySQL 的存储引擎(如 InnoDB)、表空间管理相关,通常涉及磁盘空间、文件权限或存储引擎特性。

5.1 错误码 1114:The table 'xxx' is full

错误含义:表已满,无法插入更多数据。

出现场景

  • 磁盘空间不足
  • 使用 MyISAM 引擎时,表大小达到操作系统文件大小限制
  • 配置了 innodb_data_file_path 的 autoextend=false,且表空间已满
  • MySQL 的 tmpdir 所在分区空间不足(临时表满)

解决方法

  1. 检查磁盘空间,清理不必要的文件
  2. 对于 MyISAM 表,转换为 InnoDB 引擎
  3. 调整 InnoDB 表空间配置,允许自动扩展
  4. 更换 tmpdir 到空间更大的分区

示例操作

-- 检查表引擎
SHOW TABLE STATUS LIKE 'large_table';-- 将MyISAM表转换为InnoDB
ALTER TABLE large_table ENGINE = InnoDB;-- 查看InnoDB表空间配置
SHOW VARIABLES LIKE 'innodb_data_file_path';-- 查看临时目录配置
SHOW VARIABLES LIKE 'tmpdir';

调整 InnoDB 表空间配置(my.cnf)

[mysqld]
innodb_data_file_path = ibdata1:10M:autoextend  # 允许自动扩展

5.2 错误码 1030:Got error 28 from storage engine

错误含义:存储引擎返回错误 28,通常表示 “磁盘空间不足”。

出现场景

  • 数据库所在磁盘分区空间已满
  • 临时文件所在分区空间不足
  • 数据库文件所在目录没有写入权限

解决方法

  1. 检查磁盘空间使用情况
  2. 清理磁盘释放空间
  3. 移动数据库文件到更大的分区
  4. 检查并修复文件目录权限

示例 Linux 命令

# 查看磁盘空间使用情况
df -h# 查看目录占用空间
du -sh /var/lib/mysql/*# 查看临时目录空间
df -h /tmp

六、MySQL 错误码排查的通用方法论

面对陌生的 MySQL 错误码,我们可以遵循以下步骤高效排查

  1. 精确获取错误信息:完整记录错误码和错误描述,不要遗漏任何细节
  2. 查阅官方文档:访问 MySQL 官方文档的错误码章节(https://dev.mysql.com/doc/refman/8.0/en/error-messages-server.html),获取权威解释
  3. 复现错误场景:尝试在测试环境复现错误,观察触发条件
  4. 分层排查
    • 应用层:检查 SQL 语句、参数传递、连接池配置
    • 数据库层:检查表结构、索引、约束、权限
    • 系统层:检查磁盘空间、内存、网络、进程状态
  5. 日志分析:查看 MySQL 的错误日志(通常在 /var/log/mysql/error.log)获取更多上下文
  6. 版本兼容性:确认使用的 MySQL 版本是否存在特定 bug,查看官方 changelog

错误日志配置示例(my.cnf)

[mysqld]
log_error = /var/log/mysql/error.log
log_warnings = 2  # 记录更多警告信息

七、总结:错误码是数据库的 “语言”,掌握它才能掌控数据

MySQL 的错误码体系是数据库与开发者沟通的 “语言”,每一个数字背后都隐藏着具体的问题原因和解决线索。从连接错误到约束冲突,从权限问题到资源限制,本文系统梳理了开发中最常见的 MySQL 错误码,不仅解释了 “是什么”,更重要的是提供了 “怎么办” 的具体方案。

http://www.dtcms.com/a/344498.html

相关文章:

  • Flutter Provider 详解:从状态管理痛点到实战落地
  • Linux权限详解
  • 电子基石:硬件工程师的器件手册 (十三) - 电源管理IC:能量供给的艺术
  • 使用html+css+javascript练习项目布局--创建导航栏
  • 高并发场景数据与一致性的简单思考
  • 理解音频响度:LUFS 标准及其计算实现
  • 在灵码中配置MCP服务
  • Basic Threejs (2)
  • Unity中国小游戏行业沙龙:抖音小游戏平台分析与规划
  • Excel处理控件Aspose.Cells教程:使用Python将 Excel 转换为 NumPy
  • AWS OpenSearch 是什么
  • 复合设计模式
  • 阿里云详解:与 AWS、GCP 的全方位比较
  • openEuler系统中home文件夹下huawei、HwHiAiUser、lost+found 文件夹的区别和作用
  • 农业-学习记录
  • vue中监听页面滚动位置
  • Playwright进阶指南 (5):拦截与模拟网络请求
  • 【LLMs篇】19:vLLM推理中的KV Cache技术全解析
  • SymPy 中抽象函数的推导与具体函数代入
  • 《器件在EMC中的应用》---磁珠在EMC中的应用
  • 一次性密码(OTP)原理及应用
  • 解决 PyTorch 导入错误:undefined symbol: iJIT_NotifyEvent
  • 数据结构之深入探索快速排序
  • Spring Start Here 读书笔记:第10章 Implementing REST services
  • vue vxe-gantt 甘特图自定义任务条样式模板 table 自定义插槽模板
  • 云手机是依靠哪些技术运行的?
  • Shell脚本源码安装Redis、MySQL、Mongodb、PostgreSQL(无报错版)
  • 遥感机器学习入门实战教程|Sklearn案例⑥:网格搜索与超参数优化
  • Logstash——性能、可靠性与扩展性架构
  • Python爬虫实战:构建古籍抄本数据采集分析系统