纯文字阐述,内容比较干。并且,由于考虑到时间长了恐有所遗漏,便即兴记录,并没有对内容进行筛选、排序。因此,大家在阅读时可以直接Ctrl + F进行检索。
细节锦集
- 通配符:
%表示任意多个字符,_表示任意单个字符。
二、解除死锁方法
无论何种事务隔离级别,都是通过“锁”来实现。在高并发情况下,容易出现“死锁”。(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 注意
- 尽量设置为
not null,因为查询时不必考虑null对查询的影响; - 存储如 国家、省份、性别 这类数据的字段,可以使用外键,但多连接会导致性能降低、以及工作量的增加,这是没必要的。由于此类字段已固定数据,则数据类型可以选
enum,且可以用一些标识表示数据,如:0=男,1=女、CN-中国,UK-英国。 MySQL会将enum视为“数值”处理,故==效率远高于字符类型==。但要注意:若此字段可能用于 连接、筛选,就要考虑有没有必要使用enum,因为enum属于“字符”类型,查询时要加上''(单引号)、以及进行一些字符处理(额外工作量),如:性别,使用int优于enum。
3.2 字符匹配
1、若字段类型为 数值 类型,可匹配字符。 示例:
1、select * from xx where id = 10; √
2、select * from xx where id = '10'; √
2、若字段类型为 字符 类型,不可匹配数字。 示例:
1、select * from xx where no = '1001'; √
2、select * 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】知识点》。
本文持续更新中。。。