mysql数据库栏目_MySQL的一些小技巧(持续更新) - mysql数据库栏目

1.巧用RAND()提取随机行

在MySQL中,产生随机数的方法是RAND()函数,可以利用这个函数与ORDER BY子句一起完成随机抽取某些行的功能。它的原理其实就是ORDER BY RAND()能够把数据随机排序。

2.利用GROUP BY的WITH ROLLUP子句做统计

在SQL语句中,使用GROUP BY的WITH ROLLUP子句可以检索出更多的分组聚合信息。它不仅能像一般的GROUP BY语句那样检索出各组的聚合信息,还能检索出本组类整体聚合信息。当使用ROLLUP时,不能同时使用ORDER BY子句进行结果排序,因为它们两者是互相排斥的。 WITH ROLLUP反映的是一个OLAP思想,也就是说这一个GROUP BY语句执行完成后可以满足用户想要得到的任何一个分组以及分组组合的聚合信息值。

3.MySQL中的一些函数

CONCAT(str1,str2,...) 返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。

mysql> SELECT CONCAT('My', 'S', 'QL');

-> 'MySQL'

mysql> SELECT CONCAT('My', NULL, 'QL');

-> NULL

mysql> SELECT CONCAT(14.3);

-> '14.3'

group_concat函数,将取得的值用逗号连接。

select group_concat(id) from table_name;

得到的结果是(1,2,3,4,5)

CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END 在第一个方案的返回结果中, value=compare-value。而第二个方案的返回结果是第一种情况的真实结果。如果没有匹配的结果值,则返回结果为ELSE后的结果,如果没有ELSE 部分,则返回值为 NULL。

IF(expr1,expr2,expr3)函数如果expr1为True,则返回expr2,否则返回expr3。 expr1 作为一个整数值进行计算,就是说,假如你正在验证浮点值或字符串值, 那么应该使用比较运算进行检验。

mysql> SELECT IF(1>2,2,3);

-> 3

mysql> SELECT IF(1<2,'yes ','no');

-> 'yes'

mysql> SELECT IF(STRCMP('test','test1'),'no','yes');

-> 'no'

IFNULL(expr1,expr2) 假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。

mysql> SELECT IFNULL(1,0);

-> 1

mysql> SELECT IFNULL(NULL,10);

-> 10

mysql> SELECT IFNULL(1/0,10);

-> 10

mysql> SELECT IFNULL(1/0,'yes');

-> 'yes'

NULLIF(expr1,expr2) 如果expr1 = expr2 成立,那么返回值为NULL,否则返回值为 expr1。这和CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END相同。

mysql> SELECT NULLIF(1,1);

-> NULL

mysql> SELECT NULLIF(1,2);

-> 1

coalesce函数,返回参数中第一个不为空的值

select coalesce(a,b,c) from table_name;

如果a不为null,则选择a;如果a为null ,则选择b;如果b为null,则选择c;如果a、b、c都为null,则返回null。

GREATEST(value1,value2,...) 当有2或多个参数时,返回值为最大(最大值的)参数。比较参数所依据的规律同LEAST()相同。

mysql> SELECT GREATEST(2,0);

-> 2

mysql> SELECT GREATEST(34.0,3.0,5.0,767.0);

-> 767.0

mysql> SELECT GREATEST('B','A','C');

-> 'C'

UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date) 若无参数调用,则返回一个Unix timestamp ('1970-01-01 00:00:00' GMT 之后的秒数) 作为无符号整数。若用date 来调用UNIX_TIMESTAMP(),它会将参数值以'1970-01-01 00:00:00' GMT后的秒数的形式返回。date 可以是一个DATE 字符串、一个 DATETIME字符串、一个 TIMESTAMP或一个当地时间的YYMMDD 或YYYMMDD格式的数字。

mysql> SELECT UNIX_TIMESTAMP();

-> 882226357

mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');

-> 875996580

TO_DAYS(date) 给定一个日期date, 返回一个天数 (从年份0开始的天数 )。

mysql> SELECT TO_DAYS(950501);

-> 728779

mysql> SELECT TO_DAYS('1997-10-07');

-> 729669

MD5(str),返回字符串str的MD5值。常用于对应用中的数据进行加密。 select MD5('123456')

INET_ATON(IP地址),返回IP地址的网络字节序表示 INET_NTOA(num),返回网络字节序代码的ip地址。

4.删除表中的重复数据

在需要给表中某些字段加唯一索引时,而字段中又存在需要重复清理数据的问题,不少DBA都应该遇到过。一般在处理时总是想在数据库中只保留一条,其他的删除,但是这样的SQL写出来总是效率不高,怎么办?其实可以转换思路,把重复的都选出一条出来,存到一张临时表,然后删除原表中所有存在重复的,再把临时表的数据库全部插入原库,这是比较通用并且高效的做法。

5.大量数据导入MySQL数据库加快速度

对于MyISAM存储引擎的表,可以通过以下方式快速的导入大量的数据。

ALTER TABLE tbl_name DISABLE KEYS;

loading the data

ALTER TABLE tbl_name ENABLE KEYS;

DISABLE KEYS和ENABLE KEYS用来打开或者关闭MyISAM表非唯一索引的更新。

InnoDB因为主键聚集索引的关系,如果没有主键或者主键非序列的情况下,导入会越来越慢,如何快速的迁移数据到InnoDB?借助MyISAM的力量是很靠谱的。先关闭InnoDB的Buffer Pool,把内存空出来,建一张没有任何索引的MyISAM表,然后只管插入吧,concurrent_insert=2,在文件末尾并发插入。插入完成后,ALTER TABLE把索引加上,记得还有ENGINE=InnoDB,就把MyISAM转到InnoDB了,这样的速度远比直接往InnoDB里插乱序数据来得快。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557909.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Random类

Random类&#xff1a;用来生成随机数 Random rnew Random(); int numr.nextInt();//所有int范围&#xff0c;有正负两种 int num1r.nextInt();//[0,3)左闭右开

svn中项目管理中ec_Mac中使用svn进行项目管理

Mac中使用svn进行项目管理,借鉴了http://blog.csdn.net/q199109106q/article/details/8655204以下方案多人亲测可用转载请注明出处&#xff1a;http://blog.csdn.net/yc7369在Windows环境中&#xff0c;我们一般使用TortoiseSVN来搭建svn环境。在Mac环境下&#xff0c;由于Mac自…

10067mysql_MYSQL数据库mysql Non-Transactional Database Only(只支持MyISAM)

《MYSQL数据库mysql Non-Transactional Database Only(只支持MyISAM)》要点&#xff1a;本文介绍了MYSQL数据库mysql Non-Transactional Database Only(只支持MyISAM)&#xff0c;希望对您有用。如果有疑问&#xff0c;可以联系我们。MYSQL入门后来在做WordPress,一开始还不知道…

String中常用的方法

String中常用的方法 length():获取字符串当中含有的字符个数&#xff0c;拿到字符串长度&#xff1b; concat&#xff08;String str&#xff09;&#xff1a;当前字符串和参数字符串进行拼接 charAt&#xff08;int index&#xff09;&#xff1a;获取指定索引位置的单个字符&…

python self 值自动改变_Python,为什么传递和更改带有外部函数的类selfvariable用于操作iterable而不是变量...

Python的参数传递对所有对象都是一样的-传递原始对象(不是“副本”&#xff0c;不是“引用”&#xff0c;不是“指针”-传递的是对象本身)&#xff0c;而不管对象的类型&#xff0c;是否可变等等。然后这些对象作为局部变量绑定到其匹配参数的名称上。在您观察到的差异实际上是…

基本类型与字符串的相互转换

基本类型→字符串 基本类型的值“”&#xff1b;包装类的静态方法toString(参数),不是Object类的toString()重载 static String toString(int i)String类的静态方法valueOf(参数) static String valurOf(int i&#xff09; 字符串→基本类型 使用包装类的静态方法parseXXX(“…

java 三个点_Java,参数中的3个点

是瓦拉格斯 :)varargs是可变长度参数的缩写&#xff0c;它允许方法接受可变数量的参数(0或更多)。使用varargs&#xff0c;创建需要使用可变数量参数的方法变得非常简单。在Java 5中添加了变量参数的特性。varargs语法在数据类型之后&#xff0c;一个vararg由三个省略号(三个点…

时钟频率(HZ)与数据传输速率(bit/s)

时钟频率&#xff08;HZ&#xff09;与数据传输速率&#xff08;bit/s&#xff09;两者是相同的概念。 举例&#xff1a;IIC传输位速率在标准模式下可达100kbit/s&#xff0c;其中100kbit/s 是指1秒钟传输100kbit。1个时钟脉冲只能传输1bit数据。1秒中内要传输100kbit数据&…

java类的定义的实例_《Java基础知识》Java类的定义及其实例化

类必须先定义才能使用。类是创建对象的模板,创建对象也叫类的实例化。下面通过一个简单的例子来理解Java中类的定义:public classDog {String name;intage;void bark()//汪汪叫{System.out.println("汪汪&#xff0c;不要过来");}voidhungry(){System.out.println(&q…

[问题]假定网络中的路由器B的路由表有如下的项目(这三列分别表示“目的网络”、“距离”和“下一跳路由器”):

[问题]假定网络中的路由器B的路由表有如下的项目&#xff08;这三列分别表示“目的网络”、“距离”和“下一跳路由器”&#xff09;&#xff1a; N1 7 A N2 2 C N6 8 F N8 4 E N9 4 F 现在B收到从C发来的路由信息&#xff08;这两列分别表示“目的网络”“距离”&#xff09;&…

excel mysql插件_智分析Excel插件

智分析Excel插件官方版是一款好用的自助分析云平台&#xff0c;智分析Excel插件官方版是一款面向业务用户的EXCEL插件工具&#xff0c;智分析Excel插件官方版支持各类云端数据库、本地excel数据导入功能&#xff0c;软件能够将本地数据和线上数据结合起来分析。软件可以帮助办公…

controller中返回数据

1.返回ModelAndView 无敌的 带着数据返回路径 &#xff08;不建议使用&#xff09; 复制代码 2 //第一种返回ModelAndView 3 // //入门程序 第一 包类 类包 方法名 4 RequestMapping(value “/item/itemlist.action”) 5 public ModelAndView itemList(){ 6 //从Mysql中查询…

登录用户名和密码相同问题

当用户登录时&#xff0c;出现用户名和密码相同的情况&#xff0c;会出现异常TooManyResultsException&#xff0c;因为mybatis的底层会调用selectOne方法&#xff0c;返回多个结果出现异常 解决办法&#xff1a;不允许出现用户名同名&#xff0c;在添加的时候先对数据库中的数…

java访问本地文件_java 读取本地文件 更改

/*** Title: MakeHtml* Description: 创建html*paramfilePath 设定模板文件*paramconent 替换的内容*paramdisrPath 生成html的存放路径*paramfileName 生成html名字*returnvoid 返回类型*throws*/public static voidMakeHtml(String filePath,String conent,String disrPath,S…

HTML中如何给HTML元素添加事件

HTML中如何给HTML元素添加事件 方法一&#xff1a; 代码示例&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><script>function test(){alert("执行了");}</script><…

kewail node 短信_nodejs短信验证

nodejs短信验证申请配置信息&#xff1a;1.短信验证&#xff1a;阿里大鱼(http://www.alidayu.com/)2.创建应用3.下载nodejs的sdk下载super-alidayu短信验证组件[rootlocalhost aldy]#npm install super-alidayu --save[rootlacalhost aldy]#vim app.jsconst AliDaYu require(…

SpringBoot项目@Email不起作用

SpringBoot项目Email不起作用 新版本springboot要加上 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>

debian 安装java_debian9安装jdk1.8

//先跟新可用安装信息apt-get update//查看可以安装的jdk版本apt-cache search jdk//会显示如下内容&#xff1a;openjdk-8-dbg - Java runtime based on OpenJDK (debugging symbols)openjdk-8-demo - Java runtime based on OpenJDK (demos and examples)openjdk-8-doc - Ope…

yml和properties的加载顺序

yml和properties的加载顺序 正常的情况是先加载yml&#xff0c;接下来加载properties文件。如果相同的配置存在于两个文件中。最后会使用properties中的配置。最后读取的优先级最高。 两个配置文件中的端口号不一样会读取properties中的端口号。

python实现简单的名字管理系统_python列表使用实现名字管理系统

python列表使用实现名字管理系统来源&#xff1a;中文源码网 浏览&#xff1a; 次 日期&#xff1a;2019年11月5日【下载文档: python列表使用实现名字管理系统.txt 】(友情提示:右键点上行txt文档名->目标另存为)python列表使用实现名字管理系统本文实例为大家分享了…