Mysql介绍

MYSQL

索引相关

什么是索引?

索引是一种数据结构,可以帮助我们快速的进行数据的查找。

索引是个怎样的数据结构呢?

索引的数据结构和具体存储引擎的实现有关,在Mysql中使用较多的索引有Hash索引,B+树索引等,而我们常用的InnoDB存储引擎的默认索引实现为:B+树索引。

Hash索引和B+树索引有什么区别或者有什么优劣势呢?

hash索引底层是hash表,进行查找时,调用一次hash函数就可以获取到相应的键值,之后进行回表查询获得实际数据,B+树底层实现多路平衡查找树,对于每一次的查询都是从根节点出发,查找到叶子节点方可以获得所查键值,然后根据查询判断是否需要回表查询数据。

区别:

hash索引进行等值查询更快(一般情况下),但是却无法进行范围查询.

因为在hash索引中经过hash函数建立索引之后,索引的顺序与原顺序无法保持一致,不能支持范围查询.而B+树的的所有节点皆遵循(左节点小于父节点,右节点大于父节点,多叉树也类似),天然支持范围.

  • hash索引不支持使用索引进行排序,原理同上.
  • hash索引不支持模糊查询以及多列索引的最左前缀匹配.原理也是因为hash函数的不可预测.AAAAAAAAB的索引没有相关性.
  • hash索引任何时候都避免不了回表查询数据,而B+树在符合某些条件(聚簇索引,覆盖索引等)的时候可以只通过索引完成查询.
  • hash索引虽然在等值查询上较快,但是不稳定.性能不可预测,当某个键值存在大量重复的时候,发生hash碰撞,此时效率可能极差.而B+树的查询效率比较稳定,对于所有的查询都是从根节点到叶子节点,且树的高度较低.

因此,在大多数情况下,直接选择B+树索引可以获得稳定且较好的查询速度.而不需要使用hash索引。

事务的四种隔离级别(ACID)

A=Atomicity

原子性,要么全部成功,要么全部失败。

C=Consistency

一致性,从一个状态,转移到另一个状态,不会存在中间状态。

I=Isolation

隔离性,一个事务的提交,对其他事务是不可见的。

D=Durability

持久性,一旦事务提交,那么就永远不会改变,不会影响到这个事务的结果。

同时有多个事务在进行会怎么样呢?

多事务的并发进行一般会造成以下几个问题:

  • 脏读: A事务读取到了B事务未提交的内容,而B事务后面进行了回滚.
  • 不可重复读: 当设置A事务只能读取B事务已经提交的部分,会造成在A事务内的两次查询,结果竟然不一样,因为在此期间B事务进行了提交操作.
  • 幻读: A事务读取了一个范围的内容,而同时B事务在此期间插入了一条数据.造成"幻觉".
Mysql四种隔离
  1. ISOLATION_READ_UNCOMMITTED:读未提交
  2. ISOLATION_READ_COMMITTED:读已提交
  3. ISOLATION_REPEATABLE_READ:可重复读
  4. ISOLATION_SERIALIZABLE:串行化
    在这里插入图片描述
什么是脏读,不可重复读,幻读
  • 脏读:简单来说,就是一个事务读取到了另一个事务未提交的数据。

  • 不可重复读:就是说,比如在A事务中进行多次相同的查询,B事务在A事务多次查询之间修改对应表中的数据,导致A事务多次读取的结果不一致。

  • 幻读:举例来说,就是A事务将表中’性别’列的值都更改为1,B事务在A事务修改之后又添加了一条记录,而’性别’的值为0,回过来A再查询所以的记录时会发现有一条记录的’性别’为0,这种情况就是所谓的幻读

事务的七种传播行为
  • PROPAGATION_REQUIRED 表示当前方法必须在一个具有事务的 上下文中运行,如有客户端有事务在进行,那么被调用端将在该事务中运行,否则的话重新开启一个事务。( 如果被调用端发生异常,那么调用端和被调用端事务都将回滚)
  • PROPAGATION_SUPPORTS 表示当前方法不必需要具有一个事务 上下文,但是如果有一个事务的话,它也可以在这个事务中运行。
  • PROPAGATION_MANDATORY 表示当前方法必须在一个事务中运行,如果没有事务,将抛出异常。
  • PROPAGATION_REQUIRES_NEW 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。
  • PROPAGATION_NOT_SUPPORTED 总是非事务地执行,并挂起任何存在的事务。
  • PROPAGATION_NEVER 总是非事务地执行,如果存在一个活动事务,则抛出异常。
  • PROPAGATION_NESTED表示如果当前方法正有一个事务在运行中,则该方法应该运行在一个嵌套事务中 ,被嵌套的事务可以独立于被封装的事务中进行提交或者回滚。如果封装事务存在,并且外层事务抛出异常回滚,那么内层事务必须回滚,反之,内层事务并不影响外层事务。如果封装事务不存在,则同propagation. required的一样。
Innodb使用的是哪种隔离级别呢?

默认是可重复读隔离级别。

对MySQL的锁了解吗?

当数据库有并发事务时,可能会产生数据的不一致,这时候需要一些机制来保证访问的次序,锁机制就是这样的一个机制。

就像酒店的房间,如果大家随意进出,就会出现多人抢夺同一个房间的情况,而在房间上装上锁,申请到钥匙的人才可以入住并且将房间锁起来,其他人只有等他使用完毕才可以再次使用.

Mysql有哪些锁

从锁的类别上来分,分为共享锁和排他锁。

共享锁:又叫读锁,当用户要进行数据的读取时,对数据加上共享锁,共享锁可以同时加上多个。

排他锁:又叫做写锁,当用户需要写入数据时,对数据加上排他锁,排他锁只可以添加一个,和其他的排他锁、共享锁相斥。

用上面的例子来说就是用户的行为有两种,一种是来看房,多个用户一起看房是可以接受的. 一种是真正的入住一晚,在这期间,无论是想入住的还是想看房的都不可以.

表结构设计

为什么要尽量设定一个主键?

主键是数据库确保数据行在整张表唯一性的保障,即时业务上本张表没有逐主键,也建议添加一个自增长的ID列作为主键,设定了主键之后,在后续的CRUD的时候可能更加快速以及确保操作数据范围安全。

主键使用自增ID还是UUID?

推荐使用自增ID,不使用UUID。

因为在InnoDB存储引擎中,主键索引是作为聚簇索引存在的,也就是说,主键索引的B+树叶子节点上存储了主键索引以及全部的数据(按照顺序),如果主键索引是自增ID,那么只需要不断向后排列即可,如果是UUID,由于到来的ID与原来的大小不确定,会造成非常多的数据插入,数据移动,然后导致产生很多的内存碎片,进而造成插入性能的下降.

字段为什么要求定义为not null?

null值会占用更多的字节,且会在程序中造成很多与预期不符的情况.

如果要存储用户的密码散列,应该使用什么字段进行存储?

密码散列,用户身份证等固定长度的字符串应该使用char而不是varchar来存储,这样可以节省空间且提高检索效率。

存储引擎相关

MYSQL支持哪些存储引擎?

MYSQL支持多种存储引擎,比如InnoDB,MyISAM,Memory,Archive等等,在多数情况下,直接选择使用InnoDB引擎都是最合适的,InnoDB也是MYSQL的默认存储引擎。

InnoDB和MyISAM有什么区别?
  1. 前者支持事务,后者不支持事务。
  2. 前者支持行级锁,后者支持表级锁。
  3. 前者支持MVCC,后者不支持。
  4. 前者支持外键,后者不支持。
  5. 前者不支持全文索引,后者支持。

零散问题

Mysql中varchar和char有什么区别?
  1. char是一个定长字段,varchar是变长字段,申请的只是最大长度,占用的实际空间为实际字符长度+1。
  2. 检索效率上来说,char>varchar,所以如果确定某个字段的字符长度时,使用char,否则尽量使用varchar。
varchar(10)和int(10)代表什么含义?

varchar的10代表了申请的空间长度,也是可以存储的数据的最大长度。

而int的10只是代表了展示的长度,不足10位以0填充.也就是说,int(1)和int(10)所能存储的数字大小以及占用的空间都是相同的,只是在展示时按照长度展示。

超大分页怎么处理?

解决超大分页,其实主要是靠缓存,可预测性的提前查到内容,缓存至redis等k-V数据库中,直接返回即可.

说一说三个范式
  • 第一范式:每个列都不可再拆分。
  • 第二范式:非主键列完全依赖于主键,而不能是依赖主键的一部分。
  • 第三范式:非主键列只依赖于主键,不依赖于其他非主键。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值