Linux 下使用 MySQL
卸载 MySQL
1、检查 mysql service
systemctl status mysqld.service
2、关闭 mysql 服务
systemctl stop mysqld.service
3、查看当前 mysql 安装状况
(1)方式一
rpm -qa | grep -i mysql
(2)方式二
yum list installed | grep mysql
4、卸载上述命令查询出的已安装程序
#MySQL有多个程序
yum remove mysql-xxx mysql-xxx mysql-xxx mysql-xxx
5、多次执行 rpm -qa | grep -i mysql 确认是否有卸载残留
6、删除 mysql 相关文件
(1)查找相关文件
find / -name mysql
(2)删除上述命令查找出的相关文件
rm -rf xxx
7、删除 my.cnf
rm -rf /etc/my.cnf
安装 Linux 版本 MySQL
1、安装方式
(1)rpm 命令:安装扩展名为 .rpm 的软件包
(2)yum命令:需联网,从 互联网获取 的yum源,直接使用yum命令安装
(3)编译安装源码包:针对 tar.gz 这样的压缩格式,使用 tar 命令解压;如果是其它压缩格式,则使用其它命令
安装方式 | 特点 |
rpm | 安装简单,灵活性差,无法灵活选择版本、升级 |
rpm repository | 安装包极小,版本安装简单灵活,升级方便,需要联网安装 |
通用二进制包 | 安装比较复杂,灵活性高,平台通用性好 |
源码包 | 安装最复杂,时间长,参数设置灵活,性能好 |
2、RPM Bundle 全量包:包括所有组件
CentOS 7 检查 MySQL 依赖
1、检查 /tmp 临时目录权限(必须)
(1)由于 mysql 安装过程中,会通过 mysql 用户在 /tmp 目录下新建 tmp_db 文件,所以请给 /tmp较大的权限
chmod -R 777 /tmp
2、安装前,检查依赖
(1)检查 libaio 包
rpm -qa|grep libaio
(2)检查 net-tools 包
rpm -qa|grep net-tools
3、若不存在,需要到 CentOS 安装盘中进行 rpm 安装
4、若安装 Linux 时,带图形化界面,以上包已安装
CentOS 7 下 MySQL 安装
1、将安装程序拷贝到 /opt 目录下
2、在 mysql 安装文件目录下执行(必须按照顺序执行)
rpm -ivh mysql-community-common-8.0.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-plugins-8.0.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.25-1.el7.x86_64.rpm
(1)注意:若在检查工作时,没有检查 mysql 依赖环境,在安装 mysql-community-server 时会报错
(2)rpm:Redhat Package Manage,通过 RPM 管理,用户可以把源代码包装成以 rpm 为扩展名的文件形式,易于安装
(3)-i、--install:安装软件包
(4)-v、--verbose:提供更多的详细信息输出
(5)-h、--hash:软件包安装的时,列出哈希标记,展示进度条
3、可能产生的错误:mariadb-libs 被 mysql-community-libs-8.0.25-1.e7.×86_64 取代
(1)清除之前安装过的依赖即可
yum remove mysql-libs
4、查看 MySQL 版本
(1)执行如下命令,若成功,表示成功安装 mysql
mysql --version
#或
mysqladmin --version
5、初始化服务
(1)为了保证数据库目录,与文件的所有者为 mysql 登录用户,若以 root 身份运行 mysql 服务,需要执行下面的命令初始化
mysqld --initialize --user=mysql
(2)--initialize 选项默认以安全模式初始化,则会为 root 用户生成一个密码,并将该密码标记为过期,在日志中记录生成的临时密码,登录后需要设置一个新的密码
(3)查看密码,root@localhost: 后为初始化密码
cat /var/log/mysqld.log
6、启动MySQL,查看状态
(1)允许省略 .service 后缀
(2)启动
systemctl start mysqld.service
(3)关闭
systemctl stop mysqld.service
(4)重启
systemctl restart mysqld.service
(5)查看状态
systemctl status mysqld.service
(6)mysqld 可执行文件,代表 MySQL 服务器程序,运行 mysql 可以直接启动一个服务器进程
7、查看进程
ps -ef | grep -i mysql
8、查看 MySQL 服务是否自启动
systemctl list-unit-files | grep mysqld.service
(1)默认为 enabled
(2)设置自启动
systemctl enable mysqld.service
(3)设置手动启动
systemctl disable mysqld.service
登录 MySQL
1、首次登录
mysql -hlocalhost -P3306 -uroot -p
(1)在 Enter password: 录入初始化密码
2、修改密码
(1)因为初始化密码默认是过期的,所以查看数据库会报错
(2)修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
(3)5.7 版本之后(不含 5.7),mysql 加入全新密码安全机制,设置新密码太简单会报错
设置远程登录
1、Mysql 配置不支持远程连接引起错误
2、确认网络
(1)保证网络畅通:在远程机器上使用 ping ip地址
(2)保证端口号开放访问:在远程机器上使用 telnet 命令
(3)开启 telnet 命令:控制面板 -> 程序和功能 -> 启用或关闭 Windows 功能 -> Telnet 客户端
3、关闭防火墙或开放端口
(1)方式一:关闭防火墙(不使用)
#CentOS 7
#开启防火墙
systemctl start firewalld.service
#查询防火墙状态
systemctl status firewalld.service
#关闭防火墙
systemctl stop firewalld.service
#设置开机启用防火墙
systemctl enable firewalld.service
#设置开机禁用防火墙
systemctl disable firewalld.service
(2)方式二:开放端口
#查看开放的端口号
firewall-cmd --list-all
#永久开放http服务
firewall-cmd --add-service=http --permanent
#设置开放的端口号
firewall-cmd --add-port=端口号/tcp --permanent
#重启防火墙
firewall-cmd --reload
4、查看用户的当前主机配置信息
USE mysql;
SELECT Host,User FROM user;
5、修改 Host 为通配符 %,Host 设置 % 后,便可以允许远程访问
UPDATE user SET Host = '%' WHERE user ='用户名';
(1)Host 列指定允许用户登录所使用的 IP
(2)localhost:表示只能通过本机客户端去访问
(3)%:通配符 ,若 Host=192.168.1.%,表示只要是 IP 地址前缀为 192.168.1. 的客户端都可以连接;若 Host=% ,表示所有 IP 都有连接权限
(4)注意:在生产环境下,将 Host 设置为 % 产生安全问题,具体根据生产环境 IP 进行设置
(5)Host 修改完成后,使配置立即生效
flush privileges;
6、图形界面工具连接 MySQL 8 时,可能出现错误:Authentication plugin 'caching_sha2_password' cannot be loaded
(1)原因:MySQL 8 之前的版本中,加密规则:mysql_native_password,在 MySQL 8 之后,加密规则:caching_sha2_password
(2)方式一:升级图形界面工具版本
(2)方式二:把 MySQL 8 用户登录密码加密规则,还原为 mysql_native_password
#使用mysql数据库
USE mysql;
#修改'root'@'localhost'用户的密码规则和密码
ALTER USER '用户名'@'可连接IP地址' IDENTIFIED WITH mysql_native_password BY '用户的新密码';
#刷新权限
FLUSH PRIVILEGES;
密码强度评估
1、在 MySQL 8.0 之前,MySQL 使用 validate_password 插件检测、验证账号密码强度,保障账号的安全性
2、安装 / 启用插件方式一:在参数文件 my.cnf 中添加参数
[mysqld]
plugin-load-add=validate_password.so
\#ON/OFF/FORCE/FORCE_PLUS_PERMANENT: 是否使用该插件(及强制/永久强制使用)
validate-password=FORCE_PLUS_PERMANENT
(1)plugin library 中的 validate_password 文件名的后缀名,根据平台不同有所差异
(2)对于 Unix 和 Unix-like 系统而言,文件后缀名是 .so
(3)对于 Windows 系统而言,文件后缀名是 .dll
(4)修改参数后,必须重启 MySQL 服务才能生效
(5)参数 FORCE_PLUS_PERMANENT,防止插件在 MySQL 运行时被卸载
3、安装 / 启用插件方式二:运行时命令安装(建议)
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
(1)此方法也会注册到元数据,即 mysql.plugin 表中,所以 MySQL 重启后插件不会失效
4、卸载插件、组件
(1)卸载插件
UNINSTALL PLUGIN validate_password;
(2)卸载组件
UNINSTALL COMPONENT 'file://component_validate_password';
MySQL 8 之前的安全策略
1、使用 validate_password 插件检测、验证账号密码强度,保障账号的安全性
2、安装 / 启用插件方式一:在参数文件 my.cnf 中添加参数
[mysqld]
plugin-load-add=validate_password.so
#ON(开启)/OFF(关闭)/FORCE(强制使用)/FORCE_PLUS_PERMANENT(永久强制使用)
validate-password=FORCE_PLUS_PERMANENT
(1)plugin library 中的 validate_password 文件后缀名根据平台不同有所差异,对于 Unix、Unix-like 系统,文件后缀名为 .so,对于 Windows 系统,文件后缀名为 .dll
(2)修改参数后,必须重启 MySQL 服务才能生效
(3)参数 FORCE_PLUS_PERMANENT 是为了防止插件在 MySQL 运行时被卸载,当卸载插件时就会报错
UNINSTALL PLUGIN validate_password;
ERROR 1702 (HY000): Plugin 'validate_password' is force_plus_permanent and can not be unloaded
3、安装 / 启用插件方式二:运行时命令安装(建议)
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
(1)此方法同时注册到元数据,即 mysql.plugin 表中
(2)MySQL 重启后,插件不会失效
MySQL 8 安全策略
1、validate_password
(1)MySQL 8.0,引入特性:服务器组件,validate_password 插件已用服务器组件重新实现
(2)8.0.25 版本的数据库中,默认自动安装 validate_password 组件
(3)validate_password 组件对应的系统变量
选项 | 默认值 | 参数描述 |
validate_password_check_user_name | ON | 设置为 ON 时,表示能将密码设置成当前用户名 |
validate_password_dictionary_file | 用于检查密码的字典文件的路径名,默认为空 | |
validate_password_length | 8 | 密码的最小长度,即密码长度必须大于等于 8 |
validate_password_mixed_case_count | 1 | 如果密码策略是中等或更强,validate_password 要求密码具有的小写和大写字符的最小数量 |
validate_password_number_count | 1 | 密码必须包含的数字个数 |
validate_password_policy | MEDIUM | 密码强度检验等级,可以使用数值 0、1、2 或相应的符号值 LOW、MEDIUM、STRONG 来指定,0 / LOW:只检查长度,1 / MEDIUM:检查长度、数字、大小写、特殊字符,2 / STRONG:检查长度、数字、大小写、特殊字符、字典文件 |
validate_password_special_char_count | 1 | 密码必须包含的特殊字符个数 |
(4)组件和插件的默认值可能有所不同,MySQL 5.7 validate_password_check_user_name 默认值为 OFF
2、修改安全策略
(1)修改密码验证安全强度
SET GLOBAL validate_password_policy=LOW;
SET GLOBAL validate_password_policy=MEDIUM;
SET GLOBAL validate_password_policy=STRONG;
#For LOW
SET GLOBAL validate_password_policy=0;
#For MEDIUM
SET GLOBAL validate_password_policy=1;
#For HIGH
SET GLOBAL validate_password_policy=2;
#注意,若为插件,SQL为set global validate_password_policy=LOW
(2)修改密码中字符的长度
SET GLOBAL validate_password_length=1;
(3)其余略
3、测试密码强度
SELECT VALIDATE_PASSWORD_STRENGTH('被测试密码');
(1)如果没有安装 validate_password 组件或插件的话,则函数永远都返回 0
(2)密码复杂度对应的密码复杂度策略
密码测试 | 返回值 |
Length < 4 | 0 |
Length ≥ 4 and < validate_password.length | 25 |
Satisfies policy 1 (LOW) | 50 |
Satisfies policy 2 (MEDIUM) | 75 |
Satisfies policy 3 (STRONG) | 100 |
(3)当评估在 100 时,说明使用上最基本的规则:大写 + 小写 + 特殊字符 + 数字组成 8 位以上密码
MySQL 5.7 修改字符集
1、在 MySQL 8.0 版本之前,默认字符集为 latin1 ,utf8 字符集指向 utf8mb3
2、从 MySQL 8.0 开始,数据库默认编码为 utf8mb4,避免乱码问题
3、查看默认使用的字符集
show variables like 'character%';
#或
show variables like '%char%';
4、修改字符集
vim /etc/my.cnf
(1)在 MySQL 5.7 或之前的版本中,在文件最后加上中文字符集配置
character_set_server=utf8
5、重新启动 MySQL 服务
systemctl restart mysqld
(1)原库、原表设定不会发生变化,参数修改只对新建的数据库生效
6、修改已有库、表字符集
(1)修改已创建数据库的字符集
alter database 数据库名 character set 'utf8';
(2)修改已创建数据表的字符集
alter table 表名 convert to character set 'utf8';
(3)原有数据若使用非 utf8 编码,数据本身编码不会发生改变,已有数据需要导出或删除,然后重新插入
各级别的字符集
1、MySQL 4 个级别的字符集和比较规则
(1)服务器级别
(2)数据库级别
(3)表级别
(4)列级别
2、查看默认字符集
show variables like 'character%';
(1)character_set_server:服务器级别的字符集
(2)character_set_database:当前数据库的字符集
(3)character_set_client:服务器解码请求时,使用的字符集
(4)character_set_connection:服务器处理请求时,把请求字符串从 character_set_client 转为 character_set_connection
(5)character_set_results:服务器向客户端返回数据时,使用的字符集
3、服务器级别
(1)character_set_server:服务器级别的字符集
(2)可以在启动服务器程序时,通过启动选项,或在服务器程序运行过程中,使用 SET 语句修改以下两个变量的值
[server]
#默认字符集
character_set_server=gbk
#对应的默认的比较规则
collation_server=gbk_chinese_ci
(3)查看服务器的字符集和比较规则
SHOW VARIABLES LIKE '%_server';
4、数据库级别
(1)character_set_database:当前数据库的字符集
(2)创建和修改数据库的时,可以指定该数据库的字符集和比较规则
CREATE DATABASE 数据库名
[[DEFAULT] CHARACTER SET 字符集名称]
[[DEFAULT] COLLATE 比较规则名称];
ALTER DATABASE 数据库名
[[DEFAULT] CHARACTER SET 字符集名称]
[[DEFAULT] COLLATE 比较规则名称];
(3)若创建数据库时,没有显式的指定字符集和比较规则,则使用该数据库默认用服务器的字符集和比较规则
(4)查看数据库的字符集和比较规则
SHOW VARIABLES LIKE '%_database';
(5)查看具体数据库的字符集
SHOW CREATE DATABASE 数据库名;
5、表级别
(1)可以在创建和修改表的时,指定表的字符集和比较规则
CREATE TABLE 表名 (列的信息)
[[DEFAULT] CHARACTER SET 字符集名称]
[COLLATE 比较规则名称]];
ALTER TABLE 表名
[[DEFAULT] CHARACTER SET 字符集名称]
[COLLATE 比较规则名称];
(2)若创建和修改表的语句中,没有指明字符集和比较规则,将使用该表所在数据库的字符集和比较规则,作为该表的字符集和比较规则
(3)查看表的字符集
SHOW CREATE TABLE 表名;
6、列级别
(1)对于存储字符串的列,同一个表中的不同的列也可以有不同的字符集和比较规则
(2)在创建和修改列定义时,可以指定该列的字符集和比较规则
CREATE TABLE 表名(
列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称],
其他列...
);
ALTER TABLE 表名 MODIFY 列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称];
(3)对于某个列,若在创建和修改的语句中,没有指明字符集和比较规则,将使用该列所在表的字符集和比较规则,作为该列的字符集和比较规则
(4)在转换列的字符集时注意,若转换后的字符集不能兼容,转换前列中存储数据,则报错
字符集与比较规则
1、utf8、utf8mb4
(1)utf8 字符集表示一个字符需要使用 1 ~ 4 个字节,
(2)utf8mb3:即 MySQL 中的 utf8,只使用 1 ~ 3 个字节表示字符
(3)utf8mb4:使用 1 ~ 4 个字节表示字符
2、比较规则
后缀 | 英文释义 | 描述 |
_ai | accent insensitive | 不区分重音 |
_as | accent sensitive | 区分重音 |
_ci | case insensitive | 不区分大小写 |
_cs | case sensitive | 区分大小写 |
_bin | binary | 以二进制方式比较 |
3、查看表的比较规则
SHOW CREATE TABLE 表名;
请求到响应过程中字符集的变化
系统变量 | 描述 |
character_set_client | 服务器解码请求时使用的字符集 |
character_set_connection | 服务器处理请求时会把请求字符串从 character_set_client 转为 character_set_connection |
character_set_results | 服务器向客户端返回数据时使用的字符集 |
1、客户端发送请求,使用操作系统字符集编码请求字符串
(1)一般情况下,客户端所使用的字符集和当前操作系统一致
(2)类 UNIX 系统:LC_ALL > LC_CTYPE > LANG,优先级依次递减,3 个环境变量决定操作系统当前使用的字符集
(3)Windows 系统:还与客户端启动时设置的 default-character-set 启动选项有关,这一点不适用于类 UNIX 系统
(4)如果使用可视化工具,可能会使用自定义的字符集来编码发送到服务器的字符串,而不采用操作系统默认的字符集
2、从 character_set_client 转换为 character_set_connection:服务器接收到客户端发送来的请求其实是一串二进制的字节,它会认为这串字节采用的字符集是 character_set_client ,然后把这串字节转换为 character_set_connection 字符集编码的字符
3、从 character_set_connection 转换为具体列使用的字符集:若某个列使用的字符集,和 character_set_connection 代表的字符集不一致,还需要进行一次字符集转换,因为列的字符集和排列规则的优先级更高
4、将查询结果从具体列使用的字符集,转换为 character_set_results
5、不同操作系统的客户端收到响应
(1)类 UNIX 操作系统:如果没有特殊设置,一般使用操作系统当前使用的字符集,解码响应字节序列
(2)Windows 操作系统:使用客户端的默认字符集来解释字节序列
SQL 大小写规范
1、在 SQL 中,关键字和函数名是不用区分字母大小写的
2、但需要确定大小写的规范,在 Linux 和 Windows 环境下,Windows 默认大小写不敏感,Linux 大小写敏感
3、查看规范
SHOW VARIABLES LIKE '%lower_case_table_names%';
(1)默认为 0,大小写敏感
(2)设置 1,大小写不敏感,创建的表,数据库都是以小写形式存放在磁盘上,对于 SQL 语句都是转换为小写对表和数据库进行查找
(3)设置 2,创建的表和数据库依据语句上格式存放,凡是查找都是转换为小写进行
4、MySQL 在 Linux 下数据库名、表名、列名、别名大小写规则
(1)数据库名、表名、表的别名、变量名是严格区分大小写
(2)关键字、函数名称在 SQL 中不区分大小写
(3)列名(字段名)与列的别名(字段别名)在所有的情况下均是忽略大小写
5、MySQL 在 Windows 环境下全部不区分大小写
Linux 下大小写规则设置
1、当想设置为大小写不敏感时,在 my.cnf 配置文件 [mysqld] 中加入 lower_case_table_names=1 ,然后重启服务器
(1)在重启数据库实例之前,需要将原来的数据库和表转换为小写,否则将找不到数据库名
(2)此参数适用 MySQL 5.7,在 MySQL 8 下禁止在重新启动 MySQL 服务时,将 lower_case_table_names 设置成不同于初始化 MySQL 服务时设置的 lower_case_table_names 值
2、MySQL 8 设置为大小写不敏感
(1)停止 MySQL 服务
(2)删除数据目录,即删除 /var/lib/mysql 目录
(3)在 MySQL 配置文件 /etc/my.cnf 中添加 lower_case_table_names=1
(4)启动MySQL服务
SQL 命名规范
1、变量名命名规范没有统一,可能产生错误
2、建议
(1)关键字和函数名称全部大写,因为数据库名、表名和字段名在 Linux MySQL 环境下是区分大小写的
(2)数据库名、表名、表别名、字段名、字段别名等全部小写,以便于区分数据库名、表名、字段名
(3)SQL 语句必须以分号结尾
sql_mode 合理设置
1、概述
(1)sql_mode 影响 MysQL 支持的 SQL 语法,以及它执行的数据验证检查,通过设置 sql_mode,可以完成不同严格程度的数据校验,有效地保障数据准确性
(2)MySQL 服务器可以在不同 SQL 模式下运行,并且可以针对不同的客户端,以不同的方式应用这些模式,具体取决于 sql_mode 系统变量的值
2、版本默认参数
(1)MySQL 5.6 默认值为空,即 NO_ENGINE_SUBSTITUTION,表示一个空值,没有模式设置,可以理解为宽松模式,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入
(2)MySQL 5.7 默认值为 STRICT_TRANS_TABLES,即严格模式,用于进行数据的严格校验,错误数据不能插入,报 error,并且事务回滚
3、宽松模式
(1)在插入一个错误的数据时,也可能会被接受,并且不报错
(2)应用场景 :保证大多数 SQL 符合标准的 SQL 语法,这样应用在不同数据库之间进行迁 时,则不需要对业务 SQL 进行较大的修改
4、严格模式
(1)在插入一个错误的数据时,则报错
(2)MySQL 5.7 版本就将 sql_mode 默认值改为了严格模式
(3)开发、测试、生产等环境中,必须采用的是严格模式
5、查看当前 sql_mode
#当前会话
SELECT @@session.sql_mode
#全局
SELECT @@global.sql_mode
#或
SHOW variables LIKE 'sql_mode';
6、临时设置方式:设置当前窗口中设置 sql_mode
(1)只在当前会话中生效,关闭当前会话就不生效
SET SESSION sql_mode = 'modes...';
(2)只在当前服务中生效,重启 MySQL 服务后失效
SET GLOBAL sql_mode = 'modes...';
7、永久设置方式:在 /etc/my.cnf 中配置 sql_mode
[mysqld]
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
(1)设置后重启 MySQL
(2)生产环境上是禁止重启 MySQL 服务的,所以采用:临时设置方式 + 永久设置方式,解决线上的问题
8、常用值
值 | 描述 |
ONLY_FULL_GROUP_BY | 对于 GROUP BY 聚合操作,如果在 SELECT 中的列,没有在 GROUP BY 中出现,则该 SQL 不合法,因为列不在 GROUP BY 从句中 |
NO_AUTO_VALUE_ON_ZERO | 该值影响自增长列的插入,默认设置下,插入 0 或 NULL 代表生成下一个自增长值,如果用户希望插入的值为 0,而该列又是自增长的,则该选项生效 |
STRICT_TRANS_TABLES | 在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制 |
NO_ZERO_IN_DATE
|
在严格模式下,不允许日期和月份为零 |
NO_ZERO_DATE
|
设置该值,mysq 数据库不允许插入零日期,插入零日期会抛出错误,而不是 NO_ZERO_DATE 警告 |
ERROR_FOR_DIVISION_BY_ZERO
|
在 INSERT 或 UPDATE 过程中,如果数据被零除,则产生错误而非警告,如果未给出该模式,则数据被零除时,MySQL 返回NULL |
NO_AUTO_CREATE_USER
|
禁止 GRANT 创建密码为空的用户
|
NO_ENGINE_SUBSTITUTION | 如果需要的存储引擎被禁用或未编译,则抛出错误,不设置此值时,用 NO_ENGINE_SUBSTITUTION 默认的存储引擎替代,并抛出一个异常 |
PIPES_AS_CONCAT
|
将 || 视为字符串的连接操作符,而非或运算符,这和 Oracle 数据库是一样的,和字符串的拼接函数 Concat 相类似
|
ANSI_QUOTES
|
启用 ANSI_QUOTES 后,不能用双引号来引用字符串,因为它被解释为识别符 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战