=与:=区别

  • = 只有在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. <6>Cocos Creator​​​​​​​调试

    高手在于调试,下面来谈Cocos Creator调试! 1. 网页平台调试 调试常见的三种形式为调试打印.运行时报错与断点调试,这里主要利用编辑器"VS Code"与"C ...

  2. Intel 80386 微处理器的存储器管理

    一.存储器的管理       存储器的管理是一种硬件机制,微处理器在总线地址上对物理存储器进行寻址.但是,为了给程序提供比物理存储器容量更大的空间,就引入了虚拟存储器的概念,它在外存(比如磁盘)的支持 ...

  3. django admim后台不转义提交的html

    autoescape¶ Controls the current auto-escaping behavior. This tag takes either on or off as an argum ...

  4. url中是否加斜杠/

    通常来说,不加斜杠的形式(如”example.jsp”)请求的是相对于当前页面路径的资源 http://localhost:8080/webapp/examole:加斜杠的形式(”/example.j ...

  5. Linux 运维测试及第三应用及测试工具

    一 .第三方应用及测试工具链接地址 https://pan.baidu.com/s/1rLQ5NCZvxcy93YQ4fGFaBQ 1.linux LSI系列raid卡监测工具 1)使用参数详解链接: ...

  6. 爬取小说 spider

    1.代码: # -*- coding:UTF- -*- from bs4 import BeautifulSoup import requests, sys """ 类说 ...

  7. python 读写json数据

    json 模块提供了一种很简单的方式来编码和解码JSON 数据. 字符串操作 其中两个主要的函数是json.dumps() 和json.loads() ,要比其他序列化函数库如pickle 的接口少得 ...

  8. android studio 添加get,set方法快捷方式

    android studio 添加get,set方法快捷方式

  9. GUI常用对象的属性

    %常用对象的属性 %.figure %hf=figure; %get(hf); %改变颜色 set Color %set(hf,'Color','w'); %去掉默认的菜单 Menubar %set( ...

  10. centos 安装MySQL全过程

    1.到chinaunix下载mysql 下载地址: http://download.chinaunix.net/download/0008000/7159.shtml 2.上传到CentOS服务器 本 ...