=与:=区别

  • = 只有在set和update时才是和:=一样,赋值的作用,其它都是等于的作用。鉴于此,用变量实现行号时,必须用:=
  • := 不只在set和update时时赋值的作用,在select也是赋值的作用。

序列号:

两种创建变量并赋值的方式

SET @变量名 = 值;

SELECT 值 INTO @变量名;

select (@rowNO := @rowNo+1) AS rowno from blog,(select @rowNO :=0) b

必须要有select @rowNo:=0,不然查询出来的全是null

或者这样

set @rowNo=0;
select (@rowNO := @rowNo+1) AS rowno from blog;

分组:

一个user表,有id,name字段,name有重复,求id最小的不同name的记录表。

复杂的:

select * from user a where a.id=
(select id from user b where a.name=b.name limit 1)

group by:

select * from user where id in (select  min(id) from user group by name having count(1)>0)

子查询分组:

select * from (select * from `test` order by `date` desc) `temp`  group by category_id order by `date` desc

虽然没有理解,但是测下来是对的

上面三种,测试下来,还是groupby与子查询分组效率差不多,最上面的效率最低,不管是否有索引的情况,都最慢。

同数据库表数据迁移

-- 迁移统一账户数据
update hs_issue_info a ,hs_draw_info b set
a.add_person_p2p_account_draw=1,
a.add_person_p2p_account_draw_archive_id=b.unify_loan_account,
a.add_person_p2p_account_draw_p2p_account_id=b.p2p_account_id,
a.add_person_p2p_account_draw_p2p_account_name=b.p2p_account_name,
a.add_person_p2p_account_draw_p2p_account_tel=b.phone_number
where a.draw_id=b.draw_id and b.unify_loan_account is not null;

存储过程

delimiter $$
drop procedure if exists pro;
create procedure pro()
begin
declare num int default 0;
select count(1) from hs_draw_info where unify_loan_account is not null into num;
select num;
end
$$
delimiter ;
call pro();

delimiter 是分隔符,其实就是告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了。

默认情况下,delimiter是分号;命令行客户端中,如果有一行命令以分号结束,那么回车后,mysql将会执行该命令

最后一个$$就是告诉命令行,语句可以执行了。

案例,迁移数据

创建临时表,遍历插入数据

-- 创建临时表
CREATE TEMPORARY TABLE IF NOT EXISTS temp
(
id INT NOT NULL DEFAULT 0,
role_full_name VARCHAR(100) NOT NULL,
right_full_name VARCHAR(100) NOT NULL
) -- 初始化数据
set @rowNo=0;
insert into temp (id,role_full_name,right_full_name)
select (@rowNO := @rowNo+1) AS id,
a.full_name as role_full_name,
c.full_name as right_full_name
from role a
join role_right b
on a.role_id=b.role_id
join `right` c
on b.right_id=c.right_id
where a.application_id=39
and c.application_id=39; -- 修改数据-- 修改数据
update temp set role_full_name=replace(role_full_name,'huishi','huishi-pub');
update temp set right_full_name=replace(right_full_name,'huishi','huishi-pub');
update temp set role_full_name=replace(role_full_name,'huishi','huishi-pub');
update temp set right_full_name=replace(right_full_name,'huishi','huishi-pub');
-- 查看信息
select * from temp; select distinct role_full_name,right_full_name from temp;
select @rowNo; -- 创建存储过程,循环插入数据
delimiter $$
drop procedure if exists pro $$
create procedure pro()
begin
declare num int default 1;
declare totalNum int default 0;
declare role_id2 int default 0;
declare right_id2 int default 0;
declare role_full_name2 varchar(100) default '';
declare right_full_name2 varchar(100) default '';
set num=1;
while num<=@rowNo do
select role_full_name,right_full_name into role_full_name2,right_full_name2 from temp where id=num;
select role_id into role_id2 from role where full_name=role_full_name2;
select right_id into right_id2 from `right` where full_name=right_full_name2;
select count(1) into totalNum from role_right where role_id=role_id2 and right_id=right_id2;
if totalNum=0 then
INSERT INTO `role_right`(`role_id`, `right_id`, `creator`, `is_active`, `insert_time`, `update_time`) VALUES (role_id2, right_id2, NULL, 1, now(), now());
end if;
set num=num+1;
end while;
end $$
delimiter ;
-- 执行存储过程
call pro(); -- 删除临时表
DROP TABLE IF EXISTS temp;

参考:

mysql分组取最大(最小、最新、前N条)条记录

MySql存储过程及MySql常用流程控制语法

MySQL存储过程

mysql取出每个分组中最新的记录

MySql 语句收集的更多相关文章

  1. [mysql语句] mysql 语句收集

    // http://stackoverflow.com/questions/6666152/mysql-order-by-where 1. "select * from t_activity ...

  2. Filebeat使用内置的mysql模块收集日志存储到ES集群并使用kibana存储

    Filebeat内置了不少的模块,可以直接使用他们对日志进行收集,支持的模块如下: [root@ELK-chaofeng07 logstash]# filebeat modules list Enab ...

  3. MySQL语句和命令大全

    前言 这里记录的是这两年学习工作过程中遇到的常用的 MySQL 语句和命令,部分是网上收集来的,出处已经不记得了,这里先谢过这些大佬.本文包括常见 SQL 语句,还有部分运维语句和命令,没有做详细的说 ...

  4. 如何根据执行计划,判断Mysql语句是否走索引

    如何根据执行计划,判断Mysql语句是否走索引

  5. 让dede运行php代码和mysql语句

    一.dede运行php代码 举例1: {dede:name runphp='yes'} $str = "hello ";@me = $str;@me .= "world& ...

  6. php代码优化,mysql语句优化,面试需要用到的

    首先说个问题,就是这些所谓的优化其实代码标准化的建议,其实真算不上什么正真意义上的优化,还有一点需要指出的为了一丁点的性能优化,甚至在代码上的在一次请求上性能提升万分之一的所谓就去大面积改变代码习惯, ...

  7. mysql语句:批量更新多条记录的不同值[转]

    mysql语句:批量更新多条记录的不同值 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 帮助 1 UPDATE mytable SET myfield = 'value' WHERE ...

  8. Thinkphp用exp表达式执行mysql语句,查询某字段不为空is not null,自动增值

    Thinkphp用exp表达式执行mysql语句,查询某字段不为空is not null,自动增值 Thinkphp 的文档经常不够完整的表达MYSQL的各种组合,is not null在thinkp ...

  9. MySQL语句进行分组后的含有字段拼接方法

    MySQL语句: SELECT GROUP_CONCAT(DISTINCT transaction_no) FROM `lm_wh_trans` GROUP BY staff_code; 如果tran ...

随机推荐

  1. Other Problems

    http://www.cnblogs.com/coder211/p/7919749.html http://blog.jobbole.com/17763/http://www.open-open.co ...

  2. Spark学习之路 (十四)SparkCore的调优之资源调优JVM的GC垃圾收集器

    一.概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. jvm 中,程序计数器.虚拟机栈.本 ...

  3. 写自动更新程序出现"远程服务器返回错误: (404) 未找到"

    在win2003配置后,在客户端运行时能够下载exe和dll文件,但是在更新lib文件时总是报“远程服务器返回错误: (404) 未找到”错误,不明白咋会出现这个问题,去网上一查,发现以下解决办法: ...

  4. python 列表推导

    废话不多说,直接上代码 #coding=utf-8 def getitem(index, element): return '%d: %s' % (index, element) def getite ...

  5. CSRF(跨站请求伪造)攻击

    CSRF(跨站请求伪造)攻击 CSRF(Cross Site Request Forgery,跨站请求伪造)是一种近年来才逐渐被大众了解的网络攻击方式,又被称为One-Click Attack或Ses ...

  6. ClassThree__HomeWork

    作业一 使用类的静态字段和构造函数,可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”. 代码 public class TestOne {       ...

  7. linux 禁止22端口号

    重启防火墙命令#systemctl restart iptables.service 查看端口号#iptables -L首先修改配置文件 vi /etc/ssh/sshd_config 增加新端口号P ...

  8. Requests+BeautifulSoup+正则表达式爬取猫眼电影Top100(名称,演员,评分,封面,上映时间,简介)

    # encoding:utf-8 from requests.exceptions import RequestException import requests import re import j ...

  9. log4j2笔记 #03# PatternLayout

    该类的目标是格式化LogEvent并返回(字符串)结果.结果的格式取决于具体的模式字符串(pattern string).这里的模式字符串与c语言中printf函数的转换模式非常相似.模式字符串由“转 ...

  10. NOI2018 网络同步赛的启示

    D1D2一共6题,暴露出我的许多问题 D1 T1 100 T2 8 T3 0 D2 T1 90? T2 15? T3 0 D1T1:决不能在noip之后便不再写dijkstra 不再写kruskal和 ...