面试题集锦

一、数据库三大范式

第一范式(1NF):

指数据库中表的每一列都是不可分割的最小单位

# 分割前:
地址
安徽省合肥市蜀山区
# 分割后:
省 | 市 | 区
安徽省|合肥市|蜀山区

第二范式(2NF):

如果表是单主键,那么主键以外的列必须完全依赖于主键列,如果表是符合主键(联合索引),那么主键以外的列必须完全依赖于主键,而不是主键的一部份

第三范式(3NF):

表中的非主键列必须直接依赖于主键列,而不是间接依赖于主键,也就是说非主键列不能间接依赖于主键列,出现这种情况应该在建立一张关联表而不是存放在一张表中

二、mysql有哪些索引类型及作用

首先先说一下什么是索引及索引的作用:

在关系型数据库中,给一个或多个字段(联合索引)设置索引,可以加快数据检索(类似于目录),达到快速查找的作用

普通索引:

允许该字段出现重复的值,且可以为空

唯一索引:

不允许该字段出现重复值,且不可以为空

主键索引:

非空且唯一,在不主动生成的情况下数据库会默认生成一个字段为主键(一般是id字段),非空且唯一

联合索引:

多个字段联合唯一

全文索引:

所有字段都作为索引条件,一般用的比较少,如果删除或修改字段可能照成B树结构改变,在数据量庞大的情况下不建议使用(主要根据业务逻辑来判断是否使用)

三、事务的特性和隔离级别

1、事务的四大特性

原子性(Atomicity):

事务一旦提交,要么全部成功,要么全部失败

隔离性(Isolation):

事务之间相互隔离,不受影响

一致性(Consistency):

一个事务开启后,在这个事务中多次查询数据的结果都必须是一致的

持久性(Durable):

事务一旦提交,对数据的影响是永久的,不可回滚

2、事务的隔离级别

未提交读(READ UNCOMMITTED):

事务的最低级别,会造成脏读、不可重复读、幻读

已提交读(READ COMMITTED):

该级别解决了脏读,但不可重复读和幻读任然存在

可重复度(REPEATABLE READ):

该级别是mysql5.7版本后默认的事务级别,该级别解决了脏读、不可重复度

串行化(SERIALIZABLE):

事务的最高级别,解决了脏读、不可重复读、幻读,该级别极大的保证了数据的安全性,缺点是无并发可言

事务的隔离级别 脏读 不可重复读 幻读
未提交读(READ UNCOMMITTED) √ √ √
已提交读(READ COMMITTED) - √ √
可重复度(REPEATABLE READ) - - √
串行化(SERIALIZABLE) - - -

3、什么是脏读、不可重复度、幻读

脏读:

指A在事务的过程中可以读取到B修改单位提交的数据

不可重复度:

指在同一个事务中,多次读出数据,出现数据不一致的情况,这种情况通常是update和delete(数据前后不一致或开始时候读取存在,后来就消失了)

幻读:

很多人会把幻读和不可重复读混淆,幻读指在同一个事务的过程中,多次读取数据时,出现了新的数据(insert)

4、解决办法

机制锁:

  • ru:最低级别,不加锁
  • rc:开启事务时加行级锁,读到的时候加锁,读取完毕释放锁
  • rr:开启事务时加行级锁,关闭事务时释放
  • se:开启事务加表锁,关闭事务释放锁

MVCC机制:

  • 保存某个时间上的数据快照

面试题锦集:1、数据库三大范式,2、mysql索引类型及作用,3、事务的特性和隔离级别的更多相关文章

  1. 数据库事务ACID特性及隔离级别

    数据库ACID特性介绍 1.原子性(Atomic)一个事务被视为一个不可分割的最小工作单元,这个事务里的所有操作要么全部成功执行,要么全都不执行,不能只执行其中的一部分操作.实现事务的原子性,要支持回 ...

  2. Java数据库事务四大特性以及隔离级别

    四大特性ACID 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚.失败回滚的操作事务,将不能对数据库有任何影响 一致性(Consistency) 一致性是指事 ...

  3. 数据库三大范式(1NF,2NF,3NF)及ER图

    数据库三大范式(1NF,2NF,3NF)及ER图 百度官方解释: 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据 ...

  4. C#笔试题面试题锦集(全)总20篇

    前些时候找过一次工作,收集了很多不错的笔试题目.共享一下:) C#笔试题面试题锦集(20) 微软应试题目 (2010-01-15 21:32) C#笔试题面试题锦集(19) 雅虎C#题目 (2010- ...

  5. 数据库三大范式和反范式 · oldmee

    后一个范式都是在满足前一个范式的基础上建立的. 1NF 无重复的列.表中的每一列都是不可分割的基本数据项.不满足1NF的数据库不是关系数据库.如联系人表(姓名,电话),一个联系人有家庭电话和公司电话, ...

  6. 11月29日内容总结——SQL注入问题、视图、触发器、事务、存储过程、函数、流程控制、索引、慢查询、数据库三大范式

    目录 一.SQL注入问题 SQL注入问题引入 SQL注入概念和解决方案 二.视图 三.触发器 定义 代码 1.触发器命名有一定的规律 2.临时修改SQL语句的结束符 四.事务 事务的四大特性(ACID ...

  7. 一天五道Java面试题----第七天(mysql索引结构,各自的优劣--------->事务的基本特性和隔离级别)

    这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 1 .mysql索引结构,各自的优劣 2 .索引的设计原则 3 .mysql锁的类型有哪些 4 .mysql执行计划怎么看 ...

  8. Mysql加锁过程详解(6)-数据库隔离级别(2)-通过例子理解事务的4种隔离级别

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

  9. 重新学习MySQL数据库5:根据MySQL索引原理进行分析与优化

    重新学习MySQL数据库5:根据MySQL索引原理进行分析与优化 一:Mysql原理与慢查询 MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能 ...

  10. 数据库索引原理,及MySQL索引类型(转)

    在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable表: CREATE TABLE mytable( ID INT NOT NULL, username ) NOT N ...

随机推荐

  1. linux 基线检查

    1 检查用户缺省UMASK #cat /etc/profile|sed '/^#/d'|sed '/^$/d'|grep -i "umask" 修改umask vi /etc/pr ...

  2. C语言——使用循环和递归计算阶乘

    使用循环和递归计算阶乘: /*使用循环和递归计算阶乘*/ #include<stdio.h> double fact(int num);//函数声明,阶乘函数,用于循环时调用 double ...

  3. 【项目记录】1:一些没有一次安装成功地Python模块

    记录一下,下次查找方便. 1.PIL包 PIL名称已经换成了Pillow 所以使用: pip3 install pil 会报错. 正确方法是: pip3 install pillow 2.win32c ...

  4. Git Peer reports incompatible or unsupported protocol version

    今天用git克隆一个项目的时候出现标题中的错误 fatal: unable to access 'xxx.git/': Peer reports incompatible or unsupported ...

  5. VOIP(SIP)呼叫环境及流程试验

    宿主机:win11  IP: .1         PHONE: 102 虚拟机: v11     IP: .129     SIP SERVER 虚拟机: v10     IP: .128      ...

  6. linux which及软硬链接使用

    which查看系统命令位置,which vi /bin #放置系统一般命令 /sbin#放置系统管理相关命令 /user/bin /user/sbin 软链接 ln -s 源文件 链接文件 #1.如果 ...

  7. spring中事物是怎么实现的?

    Spring容器事务 声明式和编程式 当需要用到事务操作的地方很少的时候,那么就可以使用编程方式 TransactionTemplate,它不会建立很多事务代理.但是,如果程序中用到大力的事务操作,声 ...

  8. C# 自定义控件如何正确的继承父类

    C# 自定义控件可以分为三类: 复合控件:基本控件组合而成.应当继承自 UserControl 扩展控件:继承基本控件,扩展一些属性和事件.比如继承 Button 自定义控件:直接继承自 Contro ...

  9. Flask-Migrate数据库模型映射

    1.Flask-Migrate介绍 flask-migrate可以十分方便的进行数据库的迁移与映射,将我们修改过的ORM模型映射到数据库中.flask-migrate是基于Alembic进行的一个封装 ...

  10. C/C++ 数据结构顺序栈的基本操作实现

    #include <iostream> #include <Windows.h> using namespace std; #define MAXSIZE 6 //顺序栈的实现 ...