MYSQL的存储引擎:指用来存储,处理和保护数据的核心服务,也就是数据库的底层软件组织

InnoBD:是MYSQL5.1之后默认的存储引擎,支持事务,支持外健,支持崩溃修复和自增

delete drop 和truncate有什么区别?

1)delete

可用于删除表中的所有数据和部分数据,他的使用是:

delete from 表名 where+条件 order by 数字 limit 数字

我们要进行删除学生表里面数学排名最高的三个学生:

delete from student order by math desc limit 3

1)底层实现原理:在InnDB引擎里面,delete并不是真的把数据进行删除了,而是把数据打上删除标记,标记为删除状态,我们可以把MYSQL设置成非自动提交模式:

set autocommit=0;

先将第一个数据删除掉,在进行回滚操作

select * from student;
+----+-----------+
| id | name      |
+----+-----------+
|  1 | 李佳伟    |
|  2 | 李嘉欣    |
|  3 | 孙文浩    |
+----+-----------+
3 rows in set (0.00 sec)mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)mysql> delete from student;
Query OK, 3 rows affected (0.00 sec)mysql> rollback;
Query OK, 0 rows affected (0.00 sec)mysql> select * from student;
+----+-----------+
| id | name      |
+----+-----------+
|  1 | 李佳伟    |
|  2 | 李嘉欣    |
|  3 | 孙文浩    |
+----+-----------+

2)对于自增列来说,我们使用delete删除了所有的数据之后,并不会重置自增列为初始值,而是按照原来的列进行自增 

DDL:数据定义域,创建一张表,删除一张表,针对表结构进行操作,定义,定义结构

DML:数据表已经通过DDL来进行了创建,但是数据没有创建,结构已经存在(DDL),但是结果中没有数据,是一种数据操纵语言

DCL:归为事务控制语言,假设该数据库引擎支持事务,提交事务

2) truncate实现原理:-------不可以进行恢复

基本用法:truncate table+表名

delete可以使用条件表达式来进行删除部分数据,但是truncate不能加条件表达式,所以他只能删除所有数据,truncate加上了where条件就会报错

实现原理:truncate看似只删除了行数据,但是它本质上是DDL语句,delete属于DML语句,因为truncate本质上是新创建了一个表结构,再把原来的表整体删除掉(原来的表结构和数据都会删除),会重置自增列

3)drop是把表结构和行数据全部进行删除------不可以进行恢复

总结它们的区别:

1)数据恢复方面:delete可以恢复删除的数据,但是truncate和drop是不能恢复删除的数据的

2)执行速度方面:从执行速度来说,delete是进行逐行执行的,并且在进行执行之后会把操作日志记录下来,以备日后进行回滚操作使用,所以说delete的执行速度是比较慢的,但是truncate实现进行复制一个表结构,再把原来的表进行删除,所以执行速度居中,但是drop执行速度最快,会删除表的索引

3)删除数据方面:drop是删除整张表,包含行数据和字段,但是truncate和drop只删除了行数据,表结构没有进行给删除

4)添加条件:delete可以使用where表达式和group by来进行使用,来进行添加查询条件,但是truncate和drop不可以添加查询条件

5)重置自增列:在InnoDB引擎中,truncate可以重置自增列,但是delete不可以

6)delete属于DML语句,但是drop和truncate属于DDL语句

聚簇索引和非聚簇索引:

在MYSQL默认存储引擎中,索引可以大致分成两类:聚簇索引和非聚簇索引

一:聚簇索引:一般指的就是主键索引,是依靠B+树来进行实现的,在聚簇索引里面叶子结点存放的是用户信息的内存地址,我们可以使用内存地址直接找到对应的行数据,存放的是行数据

1)但是聚簇索引不一定是主键索引,当你创建一张表的时候,创建了主键,那么聚簇索引就是主键索引

2)如果一张表里面没有主键,InnoDB会使用第一个唯一索引unique,况且这个唯一索引使用了非空约束,我们就是用它作为聚簇索引;

3)如果一张表既没有主键索引,又没有符合条件的唯一索引,那么InnoDB会自动生成一个一个名为gen_cllust_index的隐藏聚簇索引,是6个字节

二:非聚簇索引:非聚簇索引在InnoDB引擎里面,也叫作二级索引,我们可以看出,在非聚簇索引的叶子节点存放的并不是真正的行数据,而是主键ID,所以当我们进行使用费聚簇索引进行查询的时候,首先会得到一个主键ID,再根据主键ID去聚簇索引上面进行查询数据会得到真正的行数据,我们把这个过程称之为回表查询

所以他们的区别是:

1)聚簇索引的叶子结点存放的是行数据,而非聚簇索引的叶子结点存储的是主键ID

2)聚簇索引查询效率比较高,而非聚簇索引需要进行回表查询,所以效率上面非聚簇索引不如聚簇索引

3)聚簇索引一般是主键索引,而主键一张表上面只能有一个,因此聚簇索引一张表也只能有一个,但是非聚簇索引是可以有多个的

SQL查询语句的注意事项:

在MYSQL中,所有的SQL查询语法要遵循下面的语法顺序:

select 

from 

where

group by

having

order by

limit

注意:1)group by后面不可以加where语句

2)having和group by可以单独使用:

 select * from student having id<5;
+----+-----------+
| id | name      |
+----+-----------+
|  1 | 李佳伟    |
|  2 | 李嘉欣    |
|  3 | 孙文浩    |
+----+-----------+
 select * from student group by id;
+----+-----------+
| id | name      |
+----+-----------+
|  1 | 李佳伟    |
|  2 | 李嘉欣    |
|  3 | 孙文浩    |
|  4 | 李佳伟    |
+----+-----------+select sum(id) from student group by name;
+---------+
| sum(id) |
+---------+
|       3 |
|       5 |
|       2 |
+---------+

having和where有什么区别?

1)在where的使用过程中,在where语句中不可以使用select中的别名,但是使用having和group by可以使用select中的别名

1)select (chinese+math+english)/3 as avg from student having avg> 50;----成功
2)select (chinese+math+english)/3 as avg from student where avg>30;ERROR 1054 (42S22): Unknown column 'avg' in 'where clause'

2)having只能用于select语句当中,但是where可以用在任何语句中

3)having后面的字句可以搭配聚合函数来进行使用,但是where后面的字句不可以使用聚合函数

4)having通常是在分组之后进行查询,where通常是在分组之前进行查询

char和varchar有什么区别?

1)长度范围不同:char的范围是255,但是varchar的范围是65535

2)比如说要进行存储字符"abc",使用char(10),那么实际上在数据库进行存储的时候,表示存储的时候最终会占用10个字节,查询的时候会自动进行截断尾部空格,但是咱们的varchar(10)实际上进行存储的时候只会占3个字节

3)char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。

4)char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节。

MYSQL深入理解:相关推荐

  1. MySQL——深入理解

    前言 MySQL--深入理解主要包括MySQL的存储引擎.索引以及索引对数据库操作的性能优化.SQL优化.视图.存储过程.存储函数.触发器.锁.innoDB引擎的结构原理和数据库的相关管理操作.在这篇 ...

  2. 个人对于MySQL的理解_MySQL锁的理解

    一.事务四要素:ACID原子性(Atomicity):要么做完,要么啥都不做,没有中间状态 一致性(Consistency):这个是个比较有争议的概念,个人理解是通过AID来保证数据正确性,保证从一个 ...

  3. 个人对于MySQL的理解_面试官:谈谈你对Mysql的MVCC的理解?

    MVCC(Mutil-Version Concurrency Control),就是多版本并发控制.MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问. 在Mysql的In ...

  4. mysql全套理解以及在php中的应用

    DB:数据库 DBMS:数据库管理系统(软件) SQL:用于 DB 和 DBMS 通信的语言(此为通用语言)这里主要学习 MySQL 数据库 1.开源免费 2.性能高 3.简单 4.可移植性好(可在w ...

  5. 浅谈mysql 平衡二叉树理解_浅析二分查找,二叉树,平衡二叉树,B树,B+树

    二分查找 二分查找是最基本的,后面的二叉树,平衡二叉树,B树,B+树都是基于二分查找演变而来的. 二分查找法作为一种常见的查找方法,将原本是线性时间提升到了对数时间范围,大大缩短了搜索时间,但它有一个 ...

  6. mysqld,mysqld_safe,mysql.server,mysqladmin,mysql,service mysql的理解

    刚接触mysql,很容易被mysqld,mysqld_safe,mysql.server,mysqladmin,mysql,service mysql弄晕 他们是命令.进程.服务.程序.脚本 最近学习 ...

  7. mysql 快照 理解_MySQL - 当前读和快照读

    当前读和快照读 InnoDB 给每一个事务生成一个唯一事务 ID 的方法称为生成快照,因此这种场景称为快照读. 但是对于更新数据不能使用快照读,因为更新数据时如果使用快照读会可能会覆盖其他事务的更改. ...

  8. mysql explain理解

    #1.explain中各个名称的解释: #1.1.id:查询ID id是一组数字,表示查询中执行select子句或操作表的顺序,如果id相同,则执行顺序从上至下,如果是子查询,id的序号会递增,id越 ...

  9. Mysql报文理解mtu拆包依据(tso/gro)

    速查: tso在网卡层面拆包,gro在网卡层面拼包 ethtool -k eth0 generic-receive-offload:ethtool -K eth0 gso on tcp-segment ...

最新文章

  1. sources root pycharm 怎么设置_使用python语言开发ROOT之搭建环境方法探索
  2. let const var 比较说明
  3. java初始化集合_Java 中初始化 List 集合的 6 种方式!
  4. Libsvm分类步骤
  5. 内存分区与栈帧使用分析
  6. 宇斯盾助中厚实现TurboERP远程应用
  7. AOJ0028 Mode Value【出现次数最多+map+vector+水题】
  8. STL中的序列式容器——queue(队列)
  9. 2018.8.25CCPC网络赛Find Integer题解(费马大定理+勾股数的求解)
  10. wps自动生成目录总是有正文内容
  11. 上传图片到淘宝 API
  12. C/C++银行账户管理系统
  13. shiro自定义filter,anon不生效
  14. 云文件共享服务器,云文件共享服务器软件
  15. BLE 技术(八)--- BLE MESH 各层报文是如何设计的(上)?
  16. Android---简易Snackbar
  17. 专访 | 外媒看FAST:刘慈欣说的黑暗森林法则成立吗
  18. js实现进入页面后自动跳转到锚点
  19. N点标定-坐标系变换
  20. 咸鱼硬件—Micropython介绍

热门文章

  1. C语言编程>第十二周 ③ 已知学生的记录由学号和学习成绩构成,M名学生的数据已存入a结构体数组中。请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数。
  2. 推荐算法架构2:粗排
  3. 16进制与byte的转换
  4. GEE (Google Earth Engine)高阶学习一 影像分割
  5. 逆向工程第006篇:简易游戏辅助的实现
  6. @Value读取配置文件报Could not resolve placeholder 'rabbitmq.host' in value'${rabbitmq.host}'或null的问题
  7. 2021-09-03 【N02】小程序开发学习笔记
  8. 网站是否被墙的辨别及解决方法
  9. 大数据:让马云化身商界福尔摩斯
  10. H3 BPM嵌入式流程解决方案 (文末附H3 BPM软件下载地址)