mysql函数

mysql实现窗口函数功能

余生长醉 提交于 2019-12-01 13:52:32
有时候我们想要得到每个分组的前几条记录,这个时候oracle中row_number函数使用非常方便,可惜MYSQL从8.0版本开始才支持窗口函数。本文介绍一些通过sql实现窗口函数效果的方法。 1.利用用户变量实现数据自增 表flow_task有phaseno(序列号),objectno(编号)等几个字段,我们想实现根据编号字段分组,然后组内根据序列号排序功能 select @rownum:=@rownum+1 rownum,a.objectno,a.phaseno, if(@objno=a.OBJECTNO or (@objno is null and a.objectno is null), @rank:=@rank+1, @rank:=1) as row_number, @objno:=a.OBJECTNO from(SELECT * from flow_task order by OBJECTNO,phaseno asc)a, (select @rownum :=0,@objno:=null,@rank:=0)b 注意:order by OBJECTNO,phaseno asc 分组字段在前,排序字段在后 原理是,先 order by OBJECTNO,phaseno asc,这样后相同编号的记录会在一块儿,并且已经是phaseno有序asc的

PHP 如何安全的使用 MySQL

别等时光非礼了梦想. 提交于 2019-12-01 13:26:20
大多数 PHP 程序员对 MySQL 肯定不陌生,至于各种 MySQL 函数的用法在开发手册和 w3school 这类网站上也有很多介绍。但是,你所用的写法真的安全吗?面对越来越猖獗的黑客攻击, SQL 注入 防范非常重要,所以使用 MySQL 也要有更正确的姿势。 ###关于 SQL 注入 SQL Injection:就是通过把 SQL 命令插入到 Web 表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令。 具体来说,它是利用现有应用程序,将(恶意)的 SQL 命令注入到后台数据库引擎执行的能力,它可以通过在 Web 表单中输入(恶意)SQL 语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行 SQL 语句。 在网上可以搜到一些简单例子,通过一步步有目的地调整 url 请求参数,让 server 返回其 MySQL 数据结构及内容,以达到获取敏感数据的目的。 ###防注入的方法 开发者要使用合适的数据库操作函数,这一点也是开发手册和教程上很少提到的。 举个例子,要实现一个简单的查询功能,一般会这样写: 这种用法相当不安全,如果被人盯上,会很容易地进行 sql 注入 所以有不少人推荐使用 mysql_real_escape_string,写法如下: 这种方法安全性比第一种更高

mysql 自定义函数

梦想的初衷 提交于 2019-12-01 12:19:09
#获取job的时间详情DROP FUNCTION IF EXISTS `get_job_actual_work_time`;DELIMITER $$CREATE FUNCTION `get_job_actual_work_time`( in_job_id char(50), in_action char(50)) RETURNS INT(10)BEGIN DECLARE out_times INT(10) DEFAULT 0; DECLARE in_job_id_2 char(50); DECLARE in_action_2 char(50); SET in_job_id_2 = CONCAT('"', in_job_id, '"'); SET in_action_2 = CONCAT('"', in_action, '"'); SELECT sum((case when end_time > 0 then end_time else unix_timestamp(now()) end) - start_time) AS job_times INTO out_times FROM t_worker_timeline WHERE job_id COLLATE=utf8mb4_unicode_ci=in_job_id_2 AND action COLLATE=utf8mb4

MySQL · 性能优化 · MySQL常见SQL错误用法

Deadly 提交于 2019-12-01 11:40:06
作者:db匠 来源: https://yq.aliyun.com/articles/72501 前言 MySQL在2016年仍然保持强劲的数据库流行度增长趋势。越来越多的客户将自己的应用建立在MySQL数据库之上,甚至是从Oracle迁移到MySQL上来。但也存在部分客户在使用MySQL数据库的过程中遇到一些比如响应时间慢,CPU打满等情况。阿里云RDS专家服务团队帮助云上客户解决过很多紧急问题。现将《ApsaraDB专家诊断报告》中出现的部分常见SQL问题总结如下,供大家参考。 常见SQL错误用法 1. LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,一般DBA想到的办法是在type, name, create_time字段上加组合索引。这样条件排序都能有效的利用到索引,性能迅速提升。 SELECT * FROM operation WHERE type = 'SQLStats' AND name = 'SlowLog' ORDER BY create_time LIMIT 1000, 10; 好吧,可能90%以上的DBA解决该问题就到此为止。但当 LIMIT 子句变成 “LIMIT 1000000,10” 时,程序员仍然会抱怨:我只取10条记录为什么还是慢? 要知道数据库也并不知道第1000000条记录从什么地方开始

mysql中的ifnull()函数判断空值

走远了吗. 提交于 2019-12-01 11:31:35
我们知道,在不同的数据库引擎中,内置函数的实现、命名都是存在差异的,如果经常切换使用这几个数据库引擎的话,很容易会将这些函数弄混淆。 比如说判断空值的函数,在Oracle中是NVL()函数、NVL2()函数,在SQL Server中是ISNULL()函数,这些函数都包含了当值为空值的时候将返回值替换成另一个值的第二参数。 但是在MySQL中,ISNULL()函数仅仅是用于判断空值的,接受一个参数并返回一个布尔值,不提供当值为空值的时候将返回值替换成另一个值的第二参数。 SELECT ISNULL('i like yanggb'); // 0 SELECT ISNULL(NULL); // 1 因此MySQL另外提供了一个IFNULL()函数。 简单介绍 IFNULL()函数是MySQL内置的控制流函数之一,它接受两个参数,第一个参数是要判断空值的字段或值(傻?),第二个字段是当第一个参数是空值的情况下要替换返回的另一个值。如果第一个参数不是NULL,则返回第一个参数;否则,将返回第二个参数。两个参数都可以是文字值或表达式。 函数的语法 IFNULL(v1, v2) 其中,如果v1不为NULL,则IFNULL函数返回v1; 否则返回v2的结果。 简单示例 SELECT IFNULL(NULL, 'i like yanggb'); // i like yanggb 在上面的例子中

mysql关键字

99封情书 提交于 2019-12-01 09:56:06
SELECT 用于数据的选择 语法: SELECT 列 FROM 表; #从表中选择某些列,也可以是*,代表全部列 DISTINCT 当某些列包含重复值的时候,DISTINCT用于过滤掉重复值,使重复值只显示一次。 语法: SELECT DISTINCT 列 FROM 表; WHERE 对选取的数据进行约束 语法: SELECT 列 FROM 表 WHERE 列 运算符 值; 运算符: = 等于 <>/!= 不等于 > 大于 < 小于 >= 大于等于 <= 小于等于 BETWEEN AND 在某个范围内 LIKE 搜索某种模式 AND & OR 运算符 AND 和 OR 运算符用于基于一个以上的条件对记录进行过滤。 语法: SELECT * FROM Persons WHERE 列1='A' AND 列2='B' SELECT * FROM Persons WHERE (列1='A' AND 列2='B') OR (列1='c' AND 列2='d') # 组合使用 ORDER BY 子句 ORDER BY 语句用于对结果集进行排序,默认升序。 语法: SELECT * FROM 表 ORDER BY 列 # 选择所有列,并且按照某一类进行进行排序,默认升序 SELECT * FROM 表 ORDER BY 列1,;列2 # 列1相同时,按照列2排序 DESC 默认情况下

MySQL如何选择随机记录?

ε祈祈猫儿з 提交于 2019-12-01 09:52:40
在本教程中,您将学习从MySQL的数据库表中选择随机记录的各种技术方法。 有时我们需要从表中选择随机记录,例如: 在博客中选择一些随机帖子,并在侧栏中显示。 在“每日报价”窗口小部件中显示随机报价。 在图库中选择随机图片,并作为特色图片。 MySQL使用ORDER BY RAND()选择随机记录 MySQL没有内置语句来从数据库表中选择随机记录。为了实现这个目的,可使用 RAND 函数。 以下查询是从数据库表中选择一个随机记录: SELECT * FROM tbl ORDER BY RAND() LIMIT 1; 让我们详细地看看上面的查询语句。 RAND() 函数为表中的每一行生成一个随机值。 ORDER BY 子句按照 RAND() 函数生成的随机数对表中的所有行进行排序。 LIMIT子句 选择随机排序的结果集中的第一行。 如果要从数据库表中选择 N 个随机记录,则需要修改 LIMIT 子句后指定的值,如下所示: SELECT * FROM table ORDER BY RAND() LIMIT N; 例如,要在 customer 表中选择 5 个随机客户,请使用以下查询: SELECT t.customer_id, t.customer_name FROM studymysql.customer AS t ORDER BY RAND() LIMIT 5; 执行上面的查询语句

单表

穿精又带淫゛_ 提交于 2019-12-01 07:57:46
单表 查询 单表查询的语法及关键字执行的优先级 单表查询语法 SELECT DISTINCT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 关键字执行的优先级 from where group by select distinct having order by limit 1.找到表:from 2.拿着where指定的约束条件,去文件/表中取出一条条记录 3. 将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组 4. 执行select( 去重) 5.将分组的结果进行having过滤 6.将结果按条件排序:order by 7.限制结果的显示条数 简单查询 company.employee 员工id id int 姓名 emp_name varchar 性别 sex enum 年龄 age int 入职日期 hire_date date 岗位 post varchar 职位描述 post_comment varchar 薪水 salary double 办公室 office int 部门编号 depart_id int #创建表 create table employee( id int not null unique auto

MySQL 05章_模糊查询和聚合函数

拥有回忆 提交于 2019-12-01 07:44:46
在之前的查询都需要对查询的关机中进行“精确”、“完整”完整的输入才能查询相应的结果, 但在实际开发过程中,通常需要考虑用户可能不知道“精确”、“完整”的关键字, 那么就需要提供一种不太严格的查询方式,即模糊查询,只需要输入大概的部分内容就能完成查询。 一、模糊查询 1、使用LIKE关键字 语法:SELECT <字段列表|*> FROM 表名 [WHERE 字段名 LIKE %关键字%]; 说明:通配符_(表示任意0到1个字符)、%(表示任意的0到多个字符) 举例:SELECT * FROM tb_student WHERE student_name LIKE '%娘%' OR phone LIKE '%娘%' OR address LIKE '%娘%' OR email LIKE '%娘%'; 2、使用BETWEEN END关键字 语法:SELECT <字段列表|*> FROM 表名 [WHERE 字段名 BETWEEN 起始值 AND 终止值]; 说明:“起始值”和“终止值”都包含 举例:SELECT * FROM tb_score WHERE student_score >=80 AND student_score <= 90; SELECT * FROM tb_score WHERE student_score BETWEEN 80 AND 90; 3、使用IN关键字 语法

4-2 单表查询

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-01 06:54:28
一 单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二 关键字的执行优先级(重点) 重点中的重点:关键字的执行优先级 from where group by having select distinct order by limit 1.找到表:from 2.拿着where指定的约束条件,去文件/表中取出一条条记录 3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组 4.将分组的结果进行having过滤 5.执行select 6.去重 7.将结果按条件排序:order by 8.限制结果的显示条数 详细见:http://www.cnblogs.com/linhaifeng/articles/7372774.html 三 简单查询 company.employee 员工id id int 姓名 emp_name varchar 性别 sex enum 年龄 age int 入职日期 hire_date date 岗位 post varchar 职位描述 post_comment varchar 薪水 salary double 办公室 office int 部门编号 depart_id int #创建表