MySql知识点

1. 数据库的三范式是什么?

1NF :列不可再分

2NF:消除非主属性对键的部分依赖

3NF:消除非主属性对键的传递依赖

BCNF:消除主属性对键的部分依赖、传递依赖

2. 一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几?
如果数据库引擎用的是innodb,那么id为6,因为innodb表把自增主键的最大id记录到内存中,所以重启数据库或者对表OPTIMIZE操作,都会使最大id丢失

如果数据库引擎用的是myisam,那么id为8,因为myisam表把自增主键记录到数据文件里面,所以重启数据库,自增主键的最大id也不会丢失
3. 说一下 ACID 是什么?

原子性:一个事务是不可分割的单位,其中的操作要么多做,要么都不做

一致性:事务执行结束后,数据库的完整约束没有被破坏,事务执行的前后都是合法的数据状态

隔离性:事务的内部操作与其他事务是隔离的,并发执行的各个事务之间不能互相干扰

持久性:事务一旦提交,对数据库的改变是永久的

4. MySql数据库的事务隔离
当多个用户访问数据库时,每个用户开启的事务并不能被其他操作所干扰,多个并发事务之间相互隔离。

不考虑事务的隔离性会出现3种问题

1.脏读:用户读到了未提交的数据

2.不可重复读:一个事务多次查询某一数据返回了不同值

3.幻读:一个事务在两次查询同一范围的时候,后一次查询看到了前一次查询没有看到的行

为了解决“隔离”与“并发”的矛盾,有四种隔离级别

1.读未提交:最低级别

2.读已提交:解决脏读

3.可重复读:解决脏读和不可重复读,mysql默认级别

4.串行化: 解决脏读、不可重复度和幻读

5. 关系型数据库和非关系型数据库区别

关系型数据库:
1.关系型数据库在存储数据时实际就是采用的一张二维表(比如和excel表格一样)
2.市场占有量较大的是Mysql和Oracle数据库,而互联网场景最常用的是Mysql数据库,就连阿里都换成了Mysql数据库
3.通过sql结构化查询语言来存取,管理关系型数据库的数据
4. 关系型数据库在保持数据安全和数据一致性方面很强,遵循 ACID 理论 ACID指的的事务的4大特性
5.存放在磁盘

优点:
1.易于维护:都是使用表结构,格式一致
2.使用方便:SQL语言通用,可用于复杂查询
3.复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询
缺点:
1.读写能力较差,尤其是海量数据的高效率读写
2.固定的表结构,灵活度稍欠
3.高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈

非关系型数据库
1.NoSQL 数据库不是否定关系型数据库,而是作为关系数据库的一个重要补充。
2.NoSQL 数据库为了灵活及高性能、高并发而生,忽略影响高性能、高并发的功能。
3.在NoSQL 数据库领域,当今的最典型产品为 Redis(持久化缓存)、MongoDB、Memcached(纯内存)等。
4.NoSQL 数据库没有标准的查询语言(SQL),通常使用数据接口或者查询API。

优点:
1.格式灵活:存储数据的格式可以使key,value形式,文档形式,图片形式等
2.速度快:nosql可以使用硬盘或者随机存储器作为载体,比如内存,而关系型数据库只能使用硬盘
3.高扩展性
4.成本低:nosql数据库部署简单,基本都是开源软件
缺点:
1.不支持sql语言,学习和使用成本高
2.无事务处理
3.数据结构相对复杂,复杂查询方面稍欠

非关系型数据库中的Redis:
支持内存缓存,这个功能相当于 Memcached。
支持持久化存储,这个功能相当于 MemcacheDB。
数据类型更丰富。比其他 Key-Value 库功能更强。
支持主从集群,分布式。

6. 数据库存储引擎

这里只说InnoDB和MyISAM
1.InnoDB存储引擎:默认引擎,最常用的InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键
InnoDB特点:支持事务处理,支持外键,支持崩溃修复和并发控制. 如果需要对事物的完整性要求较高(比如银行),要求实现并发控制(比如售票),那么选择InnoDB有很大的优势,如果需要频繁更新,删除操作的数据库,也选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)

2.MyISAM存储引擎
MyISAM基于ISAM存储引擎,并对其进行扩展,她是在WEB,数据仓储和其他应用环境下最常用的数据存储之一,又有较高的插入,查询速度,但不支持事务
MyISAM特点:插入速度快,空间和内存使用比较低,如果表主要是用于插入新记录和读出记录,那么选择MyiSAM能实现处理高效率,如果应用的完整性,并发性要求比较低,也可以使用

如何选择引擎:如果要提供提交、回滚、并要求实现并发控制,InnoDB是一个好的选择;如果数据表主要用来插入和查询记录,则MyISAM引擎能提供较高的处理效率;
使用哪一种引擎需要灵活选择,一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求,使用合适的存储引擎,将会提高整个数据库的性能。

7. 不同索引类型的区别

1.普通索引(INDEX):索引列值可重复,常用于过滤数据,例如:以商品作为索引,检索种类为"手机"的商品
2.唯一索引(UNIQUE):索引列值可以为NULL,但是必须唯一,主要用于标识一列数据不允许重复的特性,相比主键索引不常用于检索的场景
3.主键索引(PRIMARY KEY):索引列值必须唯一,不能为NULL,一个表之鞥有一个主键索引,昰行的唯一标识,因而其主要用途是检索特定数据
4全文索引(FULL TEXT):给每个字段创建索引,效率较低,常用于文本中内容检索

该笔记为各大网站整合,主要是供作者自己查阅================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

聖手求生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值