多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ## 1. 统计员工任务个数和任务得分之和(按照员工姓名和部门编号分组) ~~~ -- auto-generated definition create table kpi_task ( id int auto_increment primary key, task_pid int not null comment '父任务id', task_pids varchar(64) not null comment '递归父任务id,逗号分隔', is_leaf int not null comment '0:不是叶子结点,1:是', task_name varchar(128) not null comment '任务名称(标题)', task_type varchar(8) not null comment '任务类别', task_owner varchar(64) not null comment '任务归属人,直接存人名', task_creator varchar(16) not null comment '任务创建人', task_createtime datetime not null comment '任务创建时间', task_projectid int not null comment '任务归属项目id(对应kpi_project表)', task_orgid int not null comment '任务归属组织id(对应sys_org表)', content varchar(1024) not null comment '任务内容', start_time datetime not null comment '任务开始时间', end_time datetime not null comment '任务结束时间', task_score int not null comment '任务打分', task_evaluate varchar(128) not null comment '任务评价', parent_score int not null comment '父任务评分,没有父任务此处填1' ) comment '员工任务表' ; ~~~ ![](https://box.kancloud.cn/23d6c2be4d52b5b97809f6d2200c69d7_1861x415.png) ~~~ SELECT sum(task_score * parent_score) emp_score, count(1) task_count, task_owner, task_orgid, extract(year_month from start_time) taskmonth FROM kpi_task WHERE is_leaf =1 GROUP BY task_owner,task_orgid,taskmonth; ~~~ 1. GROUP BY task_owner,task_orgid,taskmonth; 按照任务所属人,任务归属组织id,月份分组 2. sum(task_score * parent_score) emp_score 先对每条记录task_score * parent_score,然后对所有的乘积求和 3. count(1) :求分组记录数,1可以优化效率 4. extract(year_month from start_time) :提取年月 ![](https://box.kancloud.cn/fe22a95f0d45e1d7ba3d4f356bc8564a_903x190.png) ## 2. ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction 1. 去查看先当前库的线程情况: processlist命令的输出结果显示了有哪些线程在运行,可以检查当前数据库的运行状态 ~~~ mysql> show full processlist; +----+--------+--------------------+--------+---------+------+-------+-----------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+--------+--------------------+--------+---------+------+-------+-----------------------+ | 5 | zabbix | localhost | zabbix | Sleep | 3072 | | NULL | | 6 | zabbix | localhost | zabbix | Sleep | 3072 | | NULL | | 7 | zabbix | localhost | zabbix | Sleep | 3072 | | NULL | | 8 | zabbix | localhost | zabbix | Sleep | 759 | | NULL | | 9 | zabbix | localhost | zabbix | Sleep | 758 | | NULL | | 10 | zabbix | localhost | zabbix | Sleep | 3072 | | NULL | | 11 | zabbix | localhost | zabbix | Sleep | 4 | | NULL | | 12 | zabbix | localhost | zabbix | Sleep | 2 | | NULL | | 13 | zabbix | localhost | zabbix | Sleep | 7 | | NULL | | 14 | zabbix | localhost | zabbix | Sleep | 6 | | NULL | | 15 | zabbix | localhost | zabbix | Sleep | 11 | | NULL | | 16 | zabbix | localhost | zabbix | Sleep | 0 | | NULL | | 17 | zabbix | localhost | zabbix | Sleep | 3072 | | NULL | | 18 | zabbix | localhost | zabbix | Sleep | 4 | | NULL | | 19 | zabbix | localhost | zabbix | Sleep | 7 | | NULL | | 20 | zabbix | localhost | zabbix | Sleep | 3072 | | NULL | | 21 | zabbix | localhost | zabbix | Sleep | 15 | | NULL | | 22 | zabbix | localhost | zabbix | Sleep | 3 | | NULL | | 23 | zabbix | localhost | zabbix | Sleep | 3072 | | NULL | | 24 | zabbix | localhost | zabbix | Sleep | 3072 | | NULL | | 25 | zabbix | localhost | zabbix | Sleep | 3072 | | NULL | | 26 | zabbix | localhost | zabbix | Sleep | 4 | | NULL | | 38 | root | 192.168.56.1:49866 | exam | Sleep | 505 | | NULL | | 42 | root | localhost | exam | Query | 0 | init | show full processlist | | 48 | root | 192.168.56.1:49963 | exam | Sleep | 2224 | | NULL | | 49 | root | 192.168.56.1:49964 | exam | Sleep | 2210 | | NULL | +----+--------+--------------------+--------+---------+------+-------+-----------------------+ 26 rows in set (0.00 sec) ~~~ 列说明: > id: 一个标识 > user: 显示当前用户,如果不是root,这 个命令就只显示你权限范围内的sql语句。 > host: 显示这个语句是从哪个ip的哪个端口上发出的 > db: 显示 这个进程目前连接的数据库。 > command:显示当前连接的执行的命令,一般就是休眠(sleep),查询(query),连接 (connect)。 > time: 此这个状态持续的时间,单位是秒。 > state: 显示使用当前连接的sql语句的状态,只是语句执行中的某一个状态,一个sql语句,已查询为例,可能需要经过copying to tmp table,Sorting result,Sending data等状态才可以完成 > info: 显示这个sql语句,因为长度有限,所以长的sql语句就显示不全,但是一个判断问题语句的重要依据。 查看innodb的事务表INNODB_TRX,看下里面是否有正在锁定的事务线程,看看ID是否在show full processlist里面的sleep线程中,如果是,就证明这个sleep的线程事务一直没有commit或者rollback而是卡住了,我们需要手动kill掉。 ~~~ SELECT * FROM information_schema.INNODB_TRX\G; ~~~ 可以看到,有一个事务一直在执行,所以kill掉 ![](https://box.kancloud.cn/bc4f3dcd02e0f03b579e21d6ccb2b853_901x728.png) ## 2. update用一张表更新另一张表 ~~~ UPDATE driving_exam2 AS driving , app_study_item AS app SET driving.content_category_police = app.content_category_police WHERE driving.question = app.questions_content ~~~