[MySQL]细节与使用经验

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 本文是进步*于辰的博客中关于MySQL的一些实用技巧和注意事项的总结,涵盖命令行操作、解除死锁方法、字段使用细节、字符匹配与排序等内容。适合MySQL初学者和开发者参考。

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://developer.aliyun.com/article/1635957
出自【进步*于辰的博客

纯文字阐述,内容比较干。并且,由于考虑到时间长了恐有所遗漏,便即兴记录,并没有对内容进行筛选、排序。因此,大家在阅读时可以直接Ctrl + F进行检索。

1、细节锦集

  1. 进入命令行的方法:(1)开始 → MySQL → MySQL Command Line;(2)配置环境变量path指向MySQL安装目录下的bin目录,从 cmd 登录MySQL。
  2. 查看MySQL安装目录:show variables like '%char%'
  3. 登录MySQL命令:mysql -hA -PB -uC -pD E,如:mysql -hlocalhost -P3306 -uroot -p123456 bpmtest
  4. 查看MySQL版本方法:(1)status;(2)select version();(3)登录成功后显示。
  5. 驱动包类:(1)6.x版本及以下:com.mysql.jdbc.Driver;(2)6.x版本及以上:com.nysql.cj.jdbc.Driver

    2、解除死锁方法

    参考笔记二,P17.6。

无论何种事务隔离级别,都是通过“锁”来实现。在高并发情况下,容易出现“死锁”。(PS:如果大家想要了解事务隔离级别,可查阅博文《[SQL]事务》)。

如何解除死锁?这里涉及到几个表:
在这里插入图片描述
information_schema数据库记录了MySQL服务器所有数据库的信息,包括:数据库名、数据表、字段的数据类型和访问权限等。

其中,innodb_trx表用于存储当前运行的所有事务信息、innoda_locks表存储当前锁信息、innodb_lock_waits表存储所有锁等待的关系(数据表)信息、processlist存储事务线程信息。

解锁方法:

select * from information_schema.innodb_trx;

部分字段:
在这里插入图片描述
其中,trx_state是“事务状态”,trx_mysql_thread_id是“事务线程ID”。

找到事务状态是wait...的记录(“死锁”记录),使用以下命令“杀死”事务线程:

kill 线程ID;

3、关于字段

3.1 使用细节

  1. 尽量设置为not null,因为查询时不必考虑null对查询的影响;
  2. 存储如 国家省份性别 这类数据的字段,可以使用外键,但多连接会导致性能降低、以及工作量的增加,这是没必要的。由于此类字段已固定数据,则数据类型可以选enum,且可以用一些标识表示数据,如:0=男,1=女CN-中国,UK-英国
    MySQL会将enum视为“数值”处理,故==效率远高于字符类型==。但要注意:若此字段可能用于 连接、筛选,就要考虑有没有必要使用 enum,因为enum属于“字符”类型,查询时要加上''(单引号)、以及进行一些字符处理(额外工作量),如:性别,使用int优于enum

    3.2 字符匹配

    1、若字段类型为 数值 类型,可匹配字符。
    示例:
1select * from xx where id = 10;        √
2select * from xx where id = '10';        √

2、若字段类型为 字符 类型,不可匹配数字。
示例:

1select * from xx where no = '1001';        √
2select * from xx where no = 1001;        ×

4、字符排序

参考笔记二,P12.6、P17.7。

在查询中时常需要排序,普遍情况下(数据类型是数值)使用order by即可解决。若数据类型为字符,排序方法如下:

  • 方法一:order by 字段 + 0:会将数据进行数值转换后再进行比较,转换时以非数字结束,如:'58a13', + 0 → 58'ab' + 0 → 0
  • 方法二:order by cast(a, b) / order by convert(a, b):都用于将字段值转换为另一类型再进行比较。其中,a 是字段,b 为转换类型。b 的取值:(1)unsigned:无符号数字,不能表示小数;(2)signed:有符号数字,可以表示小数。

当然,这两种方法都不可能完全实现字符类型字段的排序,需要根据具体数据判断(此需求近似“伪需求”)。不过,这两种字符处理是有效的。

最后

本文中的例子是为了方便大家理解和阐述知识点而简单举出的,旨在阐明知识点,并不一定有实用性,仅是抛砖引玉。

如果大家想要了解一些MySQL知识点,可查阅博文《[MySQL]知识点》。

本文持续更新中。。。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
关系型数据库 MySQL 测试技术
MySQL的`IN`的优化经验
限制IN列表的长度:IN子句中的元素数量较多时,会显著降低查询性能。尽量减少IN中的项数量。
|
7月前
|
SQL 数据可视化 关系型数据库
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
643 0
|
2月前
|
SQL 关系型数据库 MySQL
MySQL中的 where 1=1会不会影响性能?看完官方文档就悟了!
本文探讨了在Mybatis中使用`where 1=1`进行动态SQL拼接是否会影响性能。通过MySQL官方资料和实际测试表明,`where 1=1`在MySQL 5.7及以上版本中会被优化器优化,因此对性能影响不大。文中详细对比了`where 1=1`与`<where>`标签的使用方法,并建议根据MySQL版本和团队需求选择合适的方式。最后,推荐查找官方资料以确保技术路线正确。
46 4
|
6月前
|
SQL 关系型数据库 MySQL
老程序员分享:MySQL性能调优的方法
老程序员分享:MySQL性能调优的方法
35 0
|
7月前
|
SQL 存储 缓存
认真学习MySQL的逻辑架构
认真学习MySQL的逻辑架构
81 0
|
7月前
|
SQL 缓存 关系型数据库
Mysql调优你不知道这几点,就太可惜了
Mysql调优你不知道这几点,就太可惜了
122 0
|
存储 监控 关系型数据库
【读书笔记】Mysql | 一图了解Mysql全貌
这段时间学习Mysql的笔记,对Mysql有个深入的了解。
|
SQL 数据采集 编解码
想不到吧,Mysql在项目中的优化场景这么多
想不到吧,Mysql在项目中的优化场景这么多
261 0
想不到吧,Mysql在项目中的优化场景这么多
|
存储 SQL 数据可视化
数据库编程 MySQL 技巧与经验
创建两个数据表,在它们之间添加外键约束,然后在被添加外键的表中添加数据,发现并没有提示报错,很正常地插入了数据,说明外键没有添加成功
数据库编程 MySQL 技巧与经验
|
存储 SQL 数据采集
库调多了,都忘了最基础的概念《Mysql 相关知识》
库调多了,都忘了最基础的概念《Mysql 相关知识》
131 0
库调多了,都忘了最基础的概念《Mysql 相关知识》