mysql 学习记录
cancat()和concat_ws()函数这两个函数都是将两个或多个字符串连接在一起的方法。
区别:
+ concat_ws() 第一个参数是分隔符
+ concat_ws() 如果有null值会忽略它
+ cancat() 如果有null 会直接返回null
示例:
select concat(user_id,' ', user_name,' : ',user_pwd)as user_info from users where user_id=29; +------------------------------------------------------------------------------------------------------------+ | user_info | +------------------------------------------------------------------------------------------------------------+ | 29 xy_test : pbkdf2:sha256:50000$qHeEjSQW$f7ccbdb92d084be4bf89d1345057010ca4530bfa65a6a83bca3e66b46300e3ba |show full processlist;
show full processlist 返回的结果是实时变化的,是对 mysql 链接执行的现场快照,用来处理突发事件非常有用。它可以查看当前 mysql 的一些运行情况,是否有压力,都在执行什么 sql,语句耗时几何,有没有慢 sql 在执行等等。
mysql> show full processlist
-> ;
+------+-----------------+-----------------+-------------------+---------+---------+------------------------+-----------------------+
| Id | User | Host | db | Command | Time | State | Info |
+------+-----------------+-----------------+-------------------+---------+---------+------------------------+-----------------------+
| 5 | event_scheduler | localhost | NULL | Daemon | 4904362 | Waiting on empty queue | NULL |
| 1071 | root | localhost:52588 | exchangeservicedb | Query | 0 | init | show full processlist |
| 1072 | root | localhost:52624 | exchangeservicedb | Sleep | 565 | | NULL |
| 1073 | root | localhost:52625 | exchangeservicedb | Sleep | 565 | | NULL |
+------+-----------------+-----------------+-------------------+---------+---------+------------------------+-----------------------+
4 rows in set (0.08 sec)
mysql 链接执行的现场快照是存储在 information_schema 表中的,所以也可对其使用下面命令进行过滤排序等数据库查询操作:
SELECt id, db, USER, HOST, command, time, state, info FROM information_schema. PROCESSLIST WHERe command != 'Sleep' ORDER BY time DESC;
返回各字段含义:
- Id:链接 mysql 服务器线程的唯一标识,可以通过 kill 来终止此线程的链接。
- User:当前线程链接数据库的用户
- Host:显示这个语句是从哪个 ip 的哪个端口上发出的。可用来追踪出问题语句的用户
- db: 线程链接的数据库,如果没有则为 null
- Command: 显示当前连接的执行的命令,一般就是休眠或空闲(sleep),查询(query),连接(connect)
- Time: 线程处在当前状态的时间,单位是秒
- State:显示使用当前连接的 sql 语句的状态,很重要的列,后续会有所有的状态的描述,请注意,state 只是语句执行中的某一个状态,一个 sql 语句,已查询为例,可能需要经过 copying to tmp table,Sorting result,Sending data 等状态才可以完成
- Info: 线程执行的 sql 语句,如果没有语句执行则为 null。这个语句可以使客户端发来的执行语句也可以是内部执行的语句
explain 命令获取 select 语句的执行计划,通过 explain 我们可以知道以下信息:表的读取顺序,数据读取操作的类型,哪些索引可以使用,哪些索引实际使用了,表之间的引用,每张表有多少行被优化器查询等信息。
主要显示信息有:
- select_type 表示对应行是是简单还是复杂的查询
- possible_keys 这一列显示查询可能使用哪些索引来查找
- key 这一列显示mysql实际采用哪个索引来优化对该表的访问
- key_len 这一列显示了mysql在索引里使用的字节数
- 查询显示表的相关信息:
show table status like 'table_name' G;
返回诸如表的名称、引擎、行数、最大容量、索引大小、创建修改时间等信息。 - 拷贝已有表(顺便改变其引擎):
create table new_table like old_table; # 创建一张与old_table一样格式的新表 new_table alter table new_table engine=innodb; # 修改新表引擎 insert into new_table select * from old_table; # 将原表内容复制到新表



