#创建共享锁和排他锁 select ... for share;/lock in share mode; select ... forupdate; #创建全局锁 flush tables with read lock; #创建表级锁 lock tables tablename write;/read; #释放锁 unlock tables; #查看进程中是否有锁等待 show processlist;
索引
参考文章:一篇文章让你了解MySQL中的索引
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#创建普通索引 辅助,联合,覆盖 alter table tablename add index indxname(columnname1,columnname2); #创建主键索引 alter table tablename addprimary key(columnname); #创建唯一索引 alter table tablename addUNIQUE(columnname); #删除索引 drop index indexname on tablename; #查看一张表中的索引 show index from tablename; #查看select语句执行的时候是否使用了索引 explain select ...; #以树状的方式查看sql语句的执行计划 expalin format tree select... #在执行一条查询语句的时候指定索引 select*from table_name force/use index (index_name) wherecondition; #添加约束 alter table table_name add constraint check_name (condition);
全文索引
参考文章:全文索引&前缀索引
1 2 3 4 5 6 7 8
#在创建表的时候创建 create table ... ,fulltext key idexname(columnname1,columnname2); #在变更表结构的时候创建 alter table tablename add fulltext indexname(columnname); #在创建好表后在添加 create fulltext index indexname on tablename(columnname); #使用方法 select*from tablename wherematch(columnname) against('search keywords');
前缀索引
参考文章:全文索引&前缀索引
1 2
#创建前缀索引 create index index_name on table_name(column_name(length));
option: { FOR UPGRADE | QUICK | FAST | MEDIUM | EXTENDED | CHANGED } --FOR UPGRADE: 在升级MySQL服务器之前,检查表是否兼容新版本。 --QUICK: 执行快速检查,这种方式不会检查表中的每一行数据,主要用于检查表结构。 --FAST: 在MyISAM存储引擎中等同于QUICK,在InnoDB中没有效果。 --EXTENDED: 执行更详细的检查,比默认检查更彻底,可能更慢。 --CHANGED: 仅检查自最后一次检查以来被修改过的记录。
InnoDB
参考文章:InnoDB存储引擎
1 2 3 4 5 6 7 8
#查看InnoDB存储引擎状态 show engine innodb status\G #修改表的存储引擎 alter table table_name engine engine_name; #创建表的时候设置引擎 create ... engine engine_name; #查看当前数据库支持的存储引擎 show engines\G
查看变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#查询和修改 MySQL 服务器的配置变量 show variables like'variables_name'; #查看服务器的状态变量以及对应的值 showglobal status like'variables_name'; #查看查询分析器是否开启 show variables like'profiling'; #开启查询分析器 set profiling 1; #查询sql分析结果 show profiles; #查询特定语句执行详细信息 show profile for query query_id; #查看数据库的版本 select version();
查看二进制日志
参考文章:MySQL数据库日志详解
1 2 3 4
#查看二进制日志 show binlog events in'log_name'\G #显示二进制日志文件列表,可以查看log_name和log_size showbinary logs;
with cte_name (column1, column2, ..., columnN) as ( select expression1, expression2, ..., expressionN from tables where conditions ) select* from cte_name;
特殊的DML语法
1 2 3 4 5
#在发生重复键冲突时,不会报错或拒绝插入,而是执行 UPDATE 操作来更新已存在的记录 insert into ... on duplicate key update; #如果表中不存在具有相同主键或唯一索引的记录,则执行插入操作,类似于 INSERT INTO 语句;如果表中已经存在具有相同主键或唯一索引的记录,则先删除该记录,然后再插入新的记录,相当于先执行 DELETE 操作,再执行 INSERT 操作 replace into table_name (column1, column2, ...) values (value1, value2, ...);