(1)show create table
比如 >>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
语法。
该语法会在插入数据之前判断,如果主键或唯一索引不存在,则插入数据。如果主键或唯一索引存在,则执行更新操作。
INSERT INTO `brand`(`id`, `code`, `name`, `edit_date`) VALUES (123, '108', '苏三', now(3)) on duplicate key updatename='苏三',edit_date=now(3);但需要注意的是,在高并发的场景下使用
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
函数。
标签:实用功能,name,常用,update,索引,MYSQL,主键,order,select From: https://www.cnblogs.com/wangqian1002/p/17007759.html