MYSQL的常用实用功能
比如 >>desc 'order' 能够看到order表中的字段名称、字段类型、字段长度、是否允许为空,是否主键、默认值等信息。不能看到该表的索引信息
查看字段和索引数据直观呈现,例如:
show create table `order`;
(2)create table ... select
快速备份表。
通常情况下,可以分两步走:
- 创建一张临时表
- 将数据插入临时表
创建临时表可以使用命令:
create table order_2022121820 select * from `order`;
执行完之后,就会将order_2022121820表创建好,并且将order表中的数据自动插入到新创建的order_2022121820中,一个命令就能轻松搞定表备份。
(3)explain
我们优化一条sql语句的性能,需要查看索引执行情况。
答:可以使用explain命令,查看mysql的执行计划,它会显示索引的使用情况。
例如:explain select * from `order` where code='002';
索引失效的常见原因: 
(4)show processlist
线上sql或者数据库出现了问题。比如出现了数据库连接过多问题,或者发现有一条sql语句的执行时间特别长。
答:我们可以使用show processlist命令查看当前线程执行情况。
(5)mysqldump
使用mysqldump工具,该工具会将数据查出来,转换成insert语句,写入到某个文件中,相当于数据备份。
备份远程数据库中的数据库:
mysqldump -h 192.22.25.226 -u root -p123456 dbname > backup.sql
(6)防止重复数据的做法很多,比如:加唯一索引、加分布式锁等,
但这些方案,都没法做到让第二次请求也更新数据,它们一般会判断已经存在就直接返回了。
这种情况可以使用on duplicate key update语法。
该语法会在插入数据之前判断,如果主键或唯一索引不存在,则插入数据。如果主键或唯一索引存在,则执行更新操作。
但需要注意的是,在高并发的场景下使用
on duplicate key update语法,可能会存在死锁的问题,所以要根据实际情况酌情使用。(7)select ... for update
MYSQL数据库自带了悲观锁,它是一种排它锁,根据锁的粒度从大到小分为:表锁、间隙锁和行锁。
在我们的实际业务场景中,有些情况并发量不太高,为了保证数据的正确性,使用悲观锁也可以。
比如:用户扣减积分,用户的操作并不集中。但也要考虑系统自动赠送积分的并发情况,所以有必要加悲观锁限制一下,防止出现积分加错的情况发生。
这时候就可以使用MYSQL中的select ... for update语法了
例如:
begin;
select * from `user` where id=1
for update;
//业务逻辑处理
update `user` set score=score-1 where id=1;
commit;
(8)char_length 通过该函数就能获取字符长度
例:
select * from brand where name like '%苏三%' order by char_length(name) asc limit 5;
(9)group_concat
把name相同的code拼接在一起,放到另外一列中该怎么办呢?
答:使用group_concat函数。

浙公网安备 33010602011771号