【MySQL】笔记

86 阅读3分钟

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

细节锦集

  1. 通配符:%表示任意多个字符,_表示任意单个字符。

二、解除死锁方法

无论何种事务隔离级别,都是通过“锁”来实现。在高并发情况下,容易出现“死锁”。(PS:如果大家不熟悉事务隔离级别,可阅读博文《# 【SQL】JDBC事务》)。

如何解除死锁?这里涉及到几个表:

在这里插入图片描述

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.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;		×

3.3 字符排序

在查询中时常需要排序,普遍情况下(数据类型是数值)使用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】知识点》。

本文持续更新中。。。