[MySQL]细节与使用经验

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

纯文字阐述,内容比较干。并且,由于考虑到时间长了恐有所遗漏,便即兴记录,并没有对内容进行筛选、排序。因此,大家在阅读时可以直接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视为 “数值” \color{green}{“数值”} 数值处理,故效率远高于字符类型。但要 注意 \color{red}{注意} 注意:若此字段可能用于 连接 \color{purple}{连接} 连接 筛选 \color{blue}{筛选} 筛选,就要考虑有没有必要使用 enum,因为enum 字符 \color{red}{字符} 字符类型,查询时要加上''(单引号)、以及进行一些字符处理(额外工作量),如:性别,使用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知识点锦集》。

本文持续更新中。。。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进步·于辰

谢谢打赏!!很高兴可以帮到你!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值