mysql函数

不就是SELECT COUNT语句吗,竟然能被面试官虐的体无完肤

梦想与她 提交于 2019-12-02 00:34:12
原文: 不就是SELECT COUNT语句吗,竟然能被面试官虐的体无完肤 数据库查询相信很多人都不陌生,所有经常有人调侃程序员就是CRUD专员,这所谓的CRUD指的就是数据库的增删改查。 在数据库的增删改查操作中,使用最频繁的就是查询操作。而在所有查询操作中,统计数量操作更是经常被用到。 关于数据库中行数统计,无论是MySQL还是Oracle,都有一个函数可以使用,那就是COUNT。 但是,就是这个常用的COUNT函数,却暗藏着很多玄机,尤其是在面试的时候,一不小心就会被虐。不信的话请尝试回答下以下问题: 1、COUNT有几种用法? 2、COUNT(字段名)和COUNT(*)的查询结果有什么不同? 3、COUNT(1)和COUNT(*)之间有什么不同? 4、COUNT(1)和COUNT(*)之间的效率哪个更高? 5、为什么《阿里巴巴Java开发手册》建议使用COUNT(*) 6、MySQL的MyISAM引擎对COUNT(*)做了哪些优化? 7、MySQL的InnoDB引擎对COUNT(*)做了哪些优化? 8、上面提到的MySQL对COUNT(*)做的优化,有一个关键的前提是什么? 9、SELECT COUNT(*) 的时候,加不加where条件有差别吗? 10、COUNT(*)、COUNT(1)和COUNT(字段名)的执行过程是怎样的? 以上10道题

MYSQL组织结构设计构思(快速查上级和下级)

戏子无情 提交于 2019-12-01 23:55:32
简单3个方面:   1.数据结构设计   2.快速查询上面第几级   3.快速查询下级第几级 快速查询上级: SELECT * FROM oasis.oasis_user_info where id=(SELECT SPLIT_STR('1^.8^.9^.10', '^.',3) AS user_id) 快速查询下级 SELECT * FROM oasis_user_info WHERE layer_tree LIKE '1^.8^%' AND bind_level = 2 SPLIT_STR函数 CREATE FUNCTION SPLIT_STR( x TEXT,#这里改类型(varchar|char) delim VARCHAR(12), pos INT ) RETURNS VARCHAR(255) RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos), LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1), delim, ''); 来源: https://www.cnblogs.com/light-zhang/p/11722056.html

Mysql之DQL------基础查询

百般思念 提交于 2019-12-01 23:47:09
#笔记内容来自于B站尚硅谷教学视频(av49181542)use myemployees; 查询表中的单个字段 SELECT last_name FROM employees; 查询表中的多个字段 #字段名可以用着重号括起来SELECT last_name,salary,email FROM employees; 查询表中的所有字段 #此方式可以自定义字段显示的先后顺序SELECT `employee_id`, `first_name`, `last_name`, `phone_number`, `last_name`, `job_id`, `phone_number`, `job_id`, `salary`, `commission_pct`, `manager_id`, `department_id`, `hiredate` FROM employees ; #此方式,按表中各字段已有的顺序显示SELECT * FROM employees; 查询常量值 SELECT 100; SELECT 'john'; 查询表达式 SELECT 100%98; 查询函数 SELECT VERSION(); 起别名 #方式1:使用asSELECT 100%98 AS 结果; SELECT last_name AS 姓,first_name AS 名 FROM employees; #方式2

mysql中bigint、int、mediumint、smallint 和 tinyint的取值范

删除回忆录丶 提交于 2019-12-01 23:43:17
mysql数据库设计,其中,对于数据性能优化,字段类型考虑很重要,搜集了些资料,整理分享出来,这篇为有关mysql整型bigint、int、mediumint、smallint 和 tinyint的语法介绍,如下: 1、bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字),无符号的范围是0到 18446744073709551615。一位为 8 个字节。 2、int 一个正常大小整数。有符号的范围是-2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字),无符号的范围是0到4294967295。一位大小为 4 个字节。 int 的 SQL-92 同义词为 integer。 3、mediumint 一个中等大小整数,有符号的范围是-8388608到8388607,无符号的范围是0到16777215。 一位大小为3个字节。 4、smallint 一个小整数。有符号的范围是-2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据,无符号的范围是0到65535。一位大小为 2 个字节。MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。 5

Mysql常用查询

丶灬走出姿态 提交于 2019-12-01 23:31:45
IN/NOT IN操作符:查询满足(不满足)指定范围内的条件的记录。 s_id为101和102的记录: MYSQL> SELECT s_id, s_name FROM fruits WHERE s_id IN (101,102); s_id不等于101和102的记录: MYSQL> SELECT s_id, s_name FROM fruits WHERE s_id NOT IN (101,102); BETWEEN AND/NOT BETWEEN AND查询: 查询指定范围内(外)的值(包括两个端点值),参数:范围的开始值和结束值。 查询f_price在2~10之间的记录: MYSQL> SELECT f_name, f_price FROM fruits WHERE f_price BETWEEN 2 AND 10; LIKE操作符: 模糊查询,“%”匹配任意长度的字符,“_”匹配任意一个字符。 查询以b开头的记录: MYSQL> SELECT f_name FROM fruits WHERE f_name LIKE 'b%'; 查询匹配ball的记录: MYSQL> SELECT f_name FROM fruits WHERE f_name LIKE 'bal_'; NULL值查询: 如果某个字段设置为NULL(NULL不等于0,也不等于空字符串),则可使用IS

mysql 自定义函数SPLIT_STR

烈酒焚心 提交于 2019-12-01 23:03:23
CREATE FUNCTION SPLIT_STR( x VARCHAR(255), delim VARCHAR(12), pos INT ) RETURNS VARCHAR(255) RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos), LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1), delim, '');    来源: https://www.cnblogs.com/light-zhang/p/11720205.html

PHP笔记学习节选(创世纪新篇)

泄露秘密 提交于 2019-12-01 22:22:17
if ,true,false,return value. php之SQL语句中的模糊查找 主要通过LIKE(不区分大小写)关键字实现模糊查找。LIKE条件一般用在指定搜索某字段的时候, 通过"%"或者" _" 通配符的作用实现模糊查找功能,通配符可以在字段前面也可以在后面或前后都有。只通过LIKE是无法实现模 糊查找的,因此通配符的作用不可忽略。 下面是三个实例: 搜索以PHP开头: SELECT * FROM table WHERE title LIKE 'PHP%' 搜索以PHP结束: SELECT * FROM table WHERE title LIKE '%PHP' 搜索包含PHP100: SELECT * FROM table WHERE title LIKE '%PHP%' 注:%表示0个或多个字符构成的字符串,_表示单个字符,类似于正则表达式中元字符的作用 在LIKE后面可以增加其他条件,类似于if语句 例子的数据库中的内容 [php] view plain copy <?php $conn = @mysql_connect( "localhost" , "root" , "" ) or die ( "数据库链接错误" ); mysql_select_db( "bbs" , $conn ); mysql_query( "set names 'GBK'" ); /

mysqldump备份mysql数据库脚本

偶尔善良 提交于 2019-12-01 21:49:59
可定义为定时任务,于凌晨2点执行。 中小型数据库采用全库全备方式,然后删除10天前的备份。 对于体积超过100G的还可以更改为增量备份脚本,节省空间。 #!/bin/bash #全库全备方式,一般在从机上执行,适用于小中型mysql数据库 #删除10天以前备份 #时间:2017.09.10 source /etc/profile #加载系统环境变量 source ~/.bash_profile #加载用户环境变量 user="root" #改成自己的数据 password="123456" #改成自己的数据 host="localhost" port="3306" db=("test") #需备份的数据库,请自行修改 #备份时加锁方式,MyISAM为锁表--lock-all-tables,InnoDB为锁行--single-transaction lock="--single-transaction" mysql_path="/usr/local/mysql" backup_path="${mysql_path}/backup" date=$(date +%Y-%m-%d_%H-%M-%S) day=10 backup_log="${mysql_path}/backup.log" #建立备份目录 if [ ! -e $backup_path ];then mkdir -p

整理了一份招PHP高级工程师的面试题

佐手、 提交于 2019-12-01 21:41:56
转发: https://www.cnblogs.com/skitson/articles/10473940.html 整理了一份招PHP高级工程师的面试题 HTTP协议中几个状态码的含义:1xx(临时响应) Php代码 表示临时响应并需要请求者继续执行操作的状态代码。 代码 说明 100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。 101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。 2xx (成功) 表示成功处理了请求的状态代码。 代码 说明 200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。 201 (已创建) 请求成功并且服务器创建了新的资源。 202 (已接受) 服务器已接受请求,但尚未处理。 203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。 204 (无内容) 服务器成功处理了请求,但没有返回任何内容。 205 (重置内容) 服务器成功处理了请求,但没有返回任何内容。 206 (部分内容) 服务器成功处理了部分 GET 请求。 3xx (重定向) 表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。 代码 说明 300 (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作

MySql性能优化知识整理

人走茶凉 提交于 2019-12-01 21:30:44
一、数据类型 慷慨是不明智的,举例varchar(5)和varchar(200)存储‘Word’的空间是一样的,那为什么又说慷慨是不明智的呢? 实验证明更长的列会消耗更多的内存,因为mysql通常会分配固定大小的内存块来保存内部值。尤其是使用内存临时表进行排序或操作时会特别槽糕。 所以最好的策略是只分配真正需要的空间。所以什么数据选择怎样的数据类型也是很重要的。对于钱,提一句,使用int或者bigint进行存储就够了。 二、查询优化 1.切分查询 有时候对于一个大查询我们需要“分而治之”,将大查询切分成小查询,每个查询功能完全一样,值完成一小部分,每次只返回一下部分结果。删除旧的数据就是一个很好的列子。定期地清除大量数据时,如果用一个大的语句一次性完成的话,则可能需要一次锁住很多数据,占满整个事务日志,耗尽系统资源,阻塞很多小的但重要的查询。将一个大的delete语句切分多个较小的查询可以尽可能小地影响mysql性能,同时还可以减少mysql复制的延迟。例如:我们需要每个月运行一次下面的查询: delete from message where create < date_sub(NOW(),INTERVAL 3 MONTH) 那么可以用类似下面的方法来完成: rows_affected = 0 do { rows_affected = do_query( "delete from