MySQL原生语句个人补漏
# insert插入
insert into table_name (field1,field2...fieldn) **values** (value1,value2...valuen);所有列需添加可不写列名。
多条插入:insert into table_name (field1,field2...fieldn) **values** (value1,value2...valuen), (valuea,valueb...valuen), (valueA,valueB...valueN);
# where子句
select * from table_name where **BINARY** field = 'php / PHP';where子句字符串比较不区分大小写,要求区分时引入BINARY关键字。
# update更新
update table_name set field1 = new value1, field2 = new value2, ... (+ where);
update table_name set field1 = **REPLACE**(field1, 'old_string', 'new_string')(+ where);替换字段中的字符。
# delete删除
delete from table_name where field = value;不加where,表数据全灭。
# union组合结果集
select value from table_name1(+ where) union all / distinct(default) select value from table_name2(+ where) orderby value;union组合两个以上的结果集输出新集,关键字默认distinct去重,为空不写,关键字all取全部数据包括重复。
# where,having
某种程度where与having作用相同,区别where筛选表字段;having对筛选字段进行再筛选,且常与聚合函数出没。
# join连接
inner join返回字段匹配的结果集(交集);left join返回左表所有记录和字段匹配的结果集;right join返回右表所有记录和字段匹配的结果集。
# sql执行顺序
写:select[distinct] - from - join - on - where - group by - having - union - order by - limit[offset]
执行:from - on - join - where - group by - having - select[distinct] - union - order by
# NULL
select * from table_name where field IS NULL; IS NOT NULL非null值。
# 索引
常用类型;primary key,unique,index,fulltext index,组合索引;
创建:create index indexname on table_name(field); alter table table_name add index indexname(field);
删除:drop index indexname on table_name; alter table table_name drop index indexname;
# and,or连接
and,or执行等级并列,多个or只执行首个,所以and出现在or之后一般不生效,二者同时应用时应写为“(or语句)”;
# explain执行分析
explain模拟执行SQL语句,分析查询语句和性能瓶颈;
## 执行计划包含信息:
- id:查询序列号,执行顺序由上到下;如果是子查询,id会递增,id值与执行优先级成正比;相同id遵循由上到下原则;
- select_type:
- --simple简单子查询,不含子查询或union;
- --primary包含复杂的子部分,外部被标记为primary;
- --subquery,select或where列表包含了子查询;
- --derived,from列表中的子查询标记为derived(衍生),结果存放临时表;
- --union,通过union连接多个结果,第二个select后的为union;
- table:当前执行表
- **type**:查询类型
- --**最佳到最差**:system - const - eq_ref - ref - range - index - all;一般至少达到range,最好达到ref,避免all;
- --system,表只有一行记录(等同于系统表,const类型特例,忽略不计);
- --const,通过索引一次找到;
- --eq_ref,唯一性索引扫描,对于每个索引键,表只有一条记录匹配(主键或唯一键索引);
- --ref,非唯一性索引,所有匹配索引值的行全部读取;
- --range,检索给定范围的行,使用一个索引选择行
- --index,与all相同(读全表),但index只遍历索引树,索引文件比数据文件小;
- --all,数据文件查全表;
- possible_keys:可能应用的索引;其中会出现已有索引并按优劣顺序排列,开发者编写测试sql的时候要注意,若是有效的索引应让这些索引(按顺序)尽量生效;
- **key**:引用的索引,没选择索引为NULL;
- key_len:索引长度,越短越好;
- ref:显示使用哪个列或常数与key一起执行;
- **rows**:得到结果集需查询的行数,越少越好(多行相乘可以估算要处理的行数);
- Extra:解决查询的详情;
- --**Using filesort**,mysql使用外部索引排序,而不是按照表内索引顺序读取;
- --**Using temporary**,使用了临时表保存中间结果,对查询结果排序时使用了临时表,常见order by,group by;
- --Using index,相应select操作使用了覆盖索引,避免了访问表的数据行,效率很高。如果同时出现using where表示索引被用来执行索引键值的查找,没出现using where表示读取动作;
- --Using where,使用where过滤;
- --Using join buffer,使用了连接缓存;
- --impossible where,where子句值为false,不能用来获取任何元组;
- --select tables optimized away,在没有GROUPBY子句的情况下,基于索引优化MIN/MAX操作或者对于MyISAM存储引擎优化COUNT(*)操作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即完成优化;
- --distinct,优化distinct操作,找到第一匹配的元组后即停止查找同样值的动作;
MySQL原生语句个人补漏的更多相关文章
- mysql原生语句基础知识
要操作数据库,首先要登录mysql: *mysql -u root -p 密码 创建数据库: *create database Runoob(数据库名); 删除数据库: *drop database ...
- 手撸Mysql原生语句--增删改查
mysql数据库的增删改查有以下的几种的情况, 1.DDL语句 数据库定义语言: 数据库.表.视图.索引.存储过程,例如CREATE DROP ALTER SHOW 2.DML语句 数据库操纵语言: ...
- 手撸Mysql原生语句--多表
在开始之前,我们需要建立表,做建表和数据的准备的工作. 1.建表 create table department( id int, name varchar(20) ); create table e ...
- 终于不再在懵逼mysql原生语句,orm超级登场
import sqlalchemy from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import cre ...
- 手撸Mysql原生语句--单表
select from where group by having order by limit 上面的所有操作是有执行的优先级的顺序的,我们将执行的过程可以总结为下面所示的七个步骤. 1.找到表:f ...
- Mysql存储之原生语句操作(pymysql)
Mysql存储之原生语句操作(pymysql) 关系型数据库是基于关系模型的数据库,而关系模型是通过二维表时实现的,于是构成了行列的表结构. 表可以看作是某个实体的集合,而实体之间存在联系,这个就需要 ...
- PHP数据库操作:从MySQL原生API到PDO
本文将举详细例子向大家展示PHP是如何使用MySQL原生API.MySQLi面向过程.MySQLi面向对象.PDO操作MySQL数据库的. 为了后面的测试,先建立数据库表test.包含表名user,s ...
- MySQL原生API、MySQLi面向过程、MySQLi面向对象、PDO操作MySQL
[转载]http://www.cnblogs.com/52fhy/p/5352304.html 本文将举详细例子向大家展示PHP是如何使用MySQL原生API.MySQLi面向过程.MySQLi面向对 ...
- [转]MySQL查询语句执行过程详解
Mysql查询语句执行原理 数据库查询语句如何执行?语法分析:首先进行语法分析,对使用sql表示的查询进行语法分析,生成查询语法分析树.语义检查:检查sql中所涉及的对象以及是否在数据库中存在,用户是 ...
随机推荐
- 用C#自定义一个简单的集合
闲来无聊来自己做了一个简单的'集合',用来加深自己对集合的理解 class listNode { private object value; public listNode(object _value ...
- MVC 实现自定义404错误页
直接进入正题. 在HomeController中有一个NotFound的Action方法. public ActionResult NotFound() { return View(); } 对应的视 ...
- .net网站转到出错页是如何实现的
<customErrors mode="On" defaultRedirect="GenericErrorPage.htm"><error s ...
- 12 Things Developers Will Love About Oracle Database 12c Release 2
by Chris Saxon-Oracle It's Here: Oracle Database 12c Release 2 (12.2) Is available on Oracle Cloud. ...
- Mybatis工作原理(含部分源码)
MyBatis的初始化 1.读取配置文件,形成InputStream String resource = "mybatis.xml"; // 加载mybatis的配置文件(它也加载 ...
- php面试题2018
一 .PHP基础部分 1.PHP语言的一大优势是跨平台,什么是跨平台? PHP的运行环境最优搭配为Apache+MySQL+PHP,此运行环境可以在不同操作系统(例如windows.Linux等)上配 ...
- 铁乐学Python_day07_集合and浅谈深浅copy
1.[List补充] 在循环一个列表时,最好不要使用元素和索引进行删除操作,一旦删除,索引会随之改变,容易出错. 如果想不出错,可以采用倒着删除的方法,因为倒着删除进行的话,只是后面元素的位置发生了变 ...
- vmware查看HBA卡、网卡驱动、firmware版本信息
在 ESXi 5.x 中,swfw.sh 命令随 vm-support 支持包收集工具一起提供.swfw.sh 命令可用来识别连接到主机的硬件的固件和驱动程序版本.要运行此命令,请使用该路径: # / ...
- IIS6与IIS7中的w3wp工作进程
在IIS6中,每一个网站都有对应的应用程序池,在应用程序池有运行着网站的Application,在默认情况下,所有的网站的应用程序都会分配到默认的应用程序池当中, 当然,我们可以新建一个应用程序池 ...
- Hadoop HBase概念学习系列之HBase里的4维坐标系统(第一步定位行键 -> 第二步定位列簇 -> 第三步定位列修饰符 -> 第四步定位时间戳)(十八)
HBase里的4维坐标系统(第一步定位行键 -> 第二步定位列簇 -> 第三步定位列修饰符 -> 第四步定位时间戳) HBase里的4维坐标系统(第一步定位行键 ...