![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
mysql面试
mysql
WD技术
这个作者很懒,什么都没留下…
展开
-
delete,drop,truncate 区别
1、delete 和 truncate 仅仅删除表数据,drop 连表数据和表结构一起删除,打个比方,delete 是单杀,truncate 是团灭,drop 是把电脑摔了。2、delete 是 DML 语句,操作完以后如果没有不想提交事务还可以回滚,truncate 和 drop 是 DDL 语句,操作完马上生效,不能回滚,打个比方,delete 是发微信说分手,后悔还可以撤回,truncate 和 drop 是直接扇耳光说滚,不能反悔。3、执行的速度上,drop>truncate>del原创 2022-03-13 10:44:40 · 169 阅读 · 0 评论 -
SQL中where与having的区别
1.where和having的区别2.聚合函数和group by3.where 和having的执行顺序4.where不能使用聚合函数、having中可以使用聚合函数1.where和having的区别where:where是一个约束声明,使用where来约束来自数据库的数据;where是在结果返回之前起作用的;where中不能使用聚合函数。having:having是一个过滤声明;在查询返回结果集以后,对查询结果进行的过滤操作;在having中可以使用聚合函数。2.聚合函数和gro原创 2022-03-01 09:36:51 · 12859 阅读 · 1 评论 -
mysql行锁和表锁
123原创 2022-03-01 10:31:27 · 197 阅读 · 0 评论 -
ACID靠什么保证
A 原子性 由undo log日志保证,它记录了需要回滚的日志信息,事务回滚是撤销已经成功执行的sqlC 一致性 由其他三大特性保证、程序代码要保证业务上的一致性I 隔离性 由MVCC来保证D 持久性 由内存+redo log来保证,mysql修改数据同时在内存和redo log记录这次操作,宕机的时候可以从redo log 恢复。InnoDb redo log 写盘 ,InnoDB事务进入prepare状态。如果前面prepare成功,binlog写盘,再继续将事务日志持久化到binlog,如果原创 2022-03-01 09:35:15 · 167 阅读 · 0 评论 -
mvcc详解
https://www.cnblogs.com/xuwc/p/13873611.html原创 2022-03-01 09:35:31 · 86 阅读 · 0 评论 -
mysql中事务的启动方式
1、显示启动事务语句,begin或者start transcation。配套的提交语句是commit,回滚语句为rollback。形如:2、set autocommit=0,这个命令会将这个线程的更新自动提交掉。这意味着如果你只执行一个select语句,这个事务就启动了,并且不会自动提交。这个事务持续存在知道你主动执行commit或rollback语句,或者链接断开。...原创 2022-03-01 09:35:55 · 2496 阅读 · 0 评论 -
mysql事务的隔离级别
事务的并发问题这四种隔离级别采取不同的锁类型来实现,若读取的是同一个数据的话,就容易发生问题。例如:脏读(Drity Read):某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。不可重复读(Non-repeatable read):在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据。幻读(Phantom Read):在一个事务的两次查询中数据笔数不一致,例如有一个事务原创 2022-03-01 09:36:09 · 137 阅读 · 0 评论 -
SQL性能--left join和inner join的运行速度与效率
①大家都知道,sql尽量使用数据量小的表做主表,这样效率高,如果使用数据量大的表做主表,此时使用left join 就会比较慢,即使关联条件有索引。但如果使用inner join速度就较快。因为inner join 在执行的时候回自动选择最小的表做基础表,效率高,总之相比之下inner join不管从效率还是速度上都优于left join,毕竟left join 会多一部分逻辑运算,inner join 是只需要返回两个表的交集部分,left join多返回了一部分右表没有返回的数据。②选择inner j原创 2022-03-01 09:36:23 · 9676 阅读 · 0 评论 -
in会走索引吗
in通常是走索引的,当in后面的数据在数据表中超过30%的匹配时,会走全表扫描,即不走索引,因此in走不走索引和后面的数据有关系。原创 2022-03-01 09:36:34 · 1130 阅读 · 0 评论 -
SQL语句中exists和in的区别
https://www.cnblogs.com/emilyyoucan/p/7833769.html原创 2022-02-28 16:16:20 · 135 阅读 · 0 评论 -
sql添加删除主键、外键
在创建表时设立主键、外键create table student(sid integer,sname nvarchar2(64),teacherId integer,primary key(sid),foreign key(teacherId) references teacher(tid))给已存在的表添加主键语法:alter 表名 add constraint 主键约束名 primary key(列名)alter table Stu_PkFk_S add co原创 2022-02-28 15:53:30 · 2311 阅读 · 1 评论 -
SQL语言包含4个部分
※ 数据定义语言(DDL),例如:CREATE、DROP、ALTER等语句。※ 数据操作语言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。※ 数据查询语言(DQL),例如:SELECT语句。※ 数据控制语言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句。...原创 2022-02-28 15:37:58 · 229 阅读 · 0 评论 -
mysql 全值匹配什么意思
对索引中的列都指定具体值。EXPLAIN SELECT SQL_NO_CACHE * FROM emp WHERE emp.age=30EXPLAIN SELECT SQL_NO_CACHE * FROM emp WHERE emp.age=30 and deptid=4EXPLAIN SELECT SQL_NO_CACHE * FROM emp WHERE emp.age=30 and deptid=4 AND emp.name = ‘abcd...原创 2022-02-28 15:32:55 · 481 阅读 · 0 评论 -
MySQL-一条sql语句的执行顺序
sql语句:SELECT DISTINCT <select_list>FROM <left_table><join_type> JOIN <right_table>ON <join_condition>WHERE <where_condition>GROUP BY <group_by_list>HAVING <having_condition>ORDER BY <order_by_condi原创 2022-02-28 15:17:16 · 61 阅读 · 0 评论 -
mysql全表扫描和用索引的区别
全表扫描的意思就是要把表中所有数据过一遍才能显示数据结果,索引扫描就是索引,只需要扫描一部分数据就可以得到结果, 打个比方吧,在新华字典中,如果没有拼音或笔画索引,当我们查找“做”这个字就要从字典第一页一次往后查,一直插到Z开头的部分才能找到,即使找到也不确定后面是不是还有(假定字典是无序状态的),因此还得往后找,知道正本字典翻完,才确定“哦,原来刚才找到的那个记录就是想要的结果了”。索引扫描的意思就是我们预先知道“做”这个字在拼音的Z区域,然后根据前面目录查看"zuo"这个拼音在那一页,然后直接翻到那一页原创 2022-02-28 15:06:41 · 1620 阅读 · 0 评论 -
sql用什么替代or
(1) 用UNION替换OR (适用于索引列)通常情况下, 用UNION替换WHERE子句中的OR将会起到较好的效果. 对非索引列使用OR将造成全表扫描. 注重, 以上规则只针对多个索引列有效. 假如有column没有被索引, 查询效率可能会因为你没有选择OR而降低. 在下面的例子中, LOC_ID 和REGION上都建有索引.高效:SELECT LOC_ID , LOC_DESC, REGION FROM LOCATION WHERE LOC_ID = 10 UNION SELECT LOC_ID原创 2022-02-28 15:02:40 · 4980 阅读 · 0 评论 -
什么时候会引起索引失效
1、如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引2、对于多列索引,不是使用的第一部分,则不会使用索引3、like查询是以%开头4、如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引5、列与列对比某个表中,两个列a,b都建立了单独索引,下面这种查询条件不会走索引select * from test where a = b6、索引列上有计算select原创 2022-02-28 14:50:26 · 135 阅读 · 0 评论 -
sql语句的优化
https://blog.csdn.net/qq_34777600/article/details/81773725原创 2022-02-28 12:24:33 · 48 阅读 · 0 评论 -
union和union all有什么区别
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNIONUnion All:对两原创 2022-02-28 12:12:49 · 136 阅读 · 0 评论 -
mysql基础知识
数据库的创建、删除CREATE DATABASE testDROP DATABASE test;表的创建CREATE TABLE <表名>(<列表名1> <数据类型> <该列所需要的约束><列表名2> <数据类型> <该列所需要的约束><列表名3> <数据类型> <该列所需要的约束>……PRIMARY KEY <列表名1,列表名2……> – 根据需要设置某列或原创 2022-02-27 21:27:47 · 179 阅读 · 0 评论 -
什么是索引?
索引(Index)是一种帮助MySQL高效获取数据的数据结构,我们可以简单理解为:快速查找排好序的一种数据结构。原创 2022-02-27 21:18:48 · 261 阅读 · 0 评论 -
MyISAM与InnoDB 的区别
InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的(表数据文件本身就是按B+Tree组织的一个索引结构),必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先..原创 2022-02-27 21:11:26 · 93 阅读 · 0 评论 -
explain详解
在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用。expain出来的信息有10列,分别是id、select_type、table、typ原创 2022-02-27 20:24:35 · 322 阅读 · 0 评论 -
为什么重复值高的字段不能建索引(比如性别字段等)
结论(以innodb为例)a、非聚簇索引存储了对主键的引用,如果select字段不在非聚簇索引内,就需要跳到主键索引(上图中从右边的索引树跳到左边的索引树),再获取select字段值b、如果非聚簇索引值重复率高,那么查询时就会大量出现上图中从右边跳到左边的情况,导致整个流程很慢c、如果where值重复率高的字段,select用了limit,只查较少数据,也就是跳的次数很少的情况下,还是可以建索引的(后来想想也没必要,limit限制了数量,全表扫描也很快,除非字段值是排序的,必须扫描完前面的所有值)d原创 2022-02-27 16:59:53 · 744 阅读 · 0 评论 -
什么是 哈希索引?
哈希索引(hash index)基于哈希表实现,只有精确匹配索引所有列的查询才有效,对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码,哈希码是一个较小的值,并且不同键值的行计算出来的哈希码也不一样。哈希码索引将所有的哈希码存储在索引中,同时在哈希表中保存指向每个数据行的指针。通过Hash算法(常见的Hash算法有直接定址法、平方取中法、折叠法、除数取余法、随机数法),将数据库字段数据转换成定长的Hash值,与这条数据的行指针一并存入Hash表的对应位置;如果发生Hash碰撞(两个不同关键字的Has原创 2022-02-26 20:30:42 · 6193 阅读 · 1 评论 -
索引的匹配方式有哪些?
create table staffs( id int primary key auto_increment, name varchar(24) not null default '' comment '姓名', age int not null default 0 comment '年龄', pos varchar(20) not null default '' comment '职位', add_time timestamp not null default cu原创 2022-02-26 20:10:43 · 501 阅读 · 0 评论 -
MySQL索引分类
(1)、主键索引设定为主键后数据库会自动建立索引,innodb为聚簇索引#随表一起建索引:CREATE TABLE customer (id INT(10) UNSIGNED AUTO_INCREMENT ,customer_no VARCHAR(200),customer_name VARCHAR(200), PRIMARY KEY(id) );#使用AUTO_INCREMENT关键字的列必须有索引(只要有索引就行)。CREATE TABLE customer2 (id INT(10)原创 2022-02-26 19:37:53 · 74 阅读 · 0 评论 -
什么是磁盘io?
是指磁盘的输入和输出(Input和Output的缩写)。读/写IO,最为常见说法,读IO,就是发指令,从磁盘读取某段扇区的内容。指令一般是通知磁盘开始扇区位置,然后给出需要从这个初始扇区往后读取的连续扇区个数,同时给出动作是读,还是写。磁盘收到这条指令,就会按照指令的要求,读或者写数据。控制器发出的这种指令+数据,就是一次IO,读或者写。...原创 2022-02-26 18:10:02 · 7342 阅读 · 0 评论 -
什么是联合索引?
是指对表上的多个列进行索引,联合索引也是一棵B+树,不同的是联合索引的键值数量不是1,而是大于等于2.最左匹配原则假定上图联合索引的为(a,b)。联合索引也是一棵B+树,不同的是B+树在对索引a排序的基础上,对索引b排序。所以数据按照(1,1),(1,2)…顺序排放。对于selete * from table where a=XX and b=XX,显然是可以使用(a,b)联合索引的,对于selete * from table where a=XX,也是可以使用(a,b)联合索引的。因为在这两种情原创 2022-02-26 18:04:26 · 6269 阅读 · 0 评论 -
什么是最左匹配原则?
1.简单说下什么是最左匹配原则顾名思义:最左优先,以最左边的为起点任何连续的索引都能匹配上。同时遇到范围查询(>、<、between、like)就会停止匹配。例如:b = 2 如果建立(a,b)顺序的索引,是匹配不到(a,b)索引的;但是如果查询条件是a = 1 and b = 2或者a=1(又或者是b = 2 and b = 1)就可以,因为优化器会自动调整a,b的顺序。再比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引原创 2022-02-26 17:58:38 · 6145 阅读 · 2 评论 -
什么是索引下推?
https://www.cnblogs.com/Chenjiabing/p/12600926.html原创 2022-02-26 17:37:06 · 100 阅读 · 0 评论 -
什么是索引覆盖?
解释一: 就是select的数据列只用从索引中就能够取得,不必从数据表中读取,换句话说查询列要被所使用的索引覆盖。解释二: 索引是高效找到行的一个方法,当能通过检索索引就可以读取想要的数据,那就不需要再到数据表中读取行了。如果一个索引包含了(或覆盖了)满足查询语句中字段与条件的数据就叫 做覆盖索引。解释三:是非聚集组合索引的一种形式,它包括在查询里的Select、Join和Where子句用到的所有列(即建立索引的字段正好是覆盖查询语句[select子句]与查询条件[Where子句]中所涉及的字段,也即,原创 2022-02-26 16:46:13 · 3902 阅读 · 0 评论 -
什么是回表?
123原创 2022-02-25 16:56:32 · 205 阅读 · 0 评论 -
mysql一张表两个索引字段是建两颗独立索引树吗?
123原创 2022-02-25 16:53:37 · 981 阅读 · 0 评论 -
什么是存储引擎
123原创 2022-02-25 14:38:25 · 852 阅读 · 0 评论 -
mysql为什么使用B+树
原创 2022-02-25 14:18:41 · 1620 阅读 · 0 评论