mysql面试题_mysql增删改查语句面试题

mysql面试题_mysql增删改查语句面试题
一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几? 表类型如果是 MyISAM ,那 …

	mysql面试题[数据库教程]

一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几?

表类型如果是 MyISAM ,那 id 就是 8。
表类型如果是 InnoDB,那 id 就是 6。

InnoDB 表只会把自增主键的最大 id 记录在内存中,所以重启之后会导致最大 id 丢失。
 如何获取当前数据库版本?

使用 select version() 获取当前 MySQL 数据库版本。
 说一下 ACID 是什么?

Atomicity(原子性):一个事务(transaction)中的所有操作,或者全部完成,或者全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。即,事务不可分割、不可约简。
Consistency(一致性):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设约束、触发器、级联回滚等。
Isolation(隔离性):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
Durability(持久性):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
char 和 varchar 的区别是什么?

char(n) :固定长度类型,比如订阅 char(10),当你输入”abc”三个字符的时候,它们占的空间还是 10 个字节,其他 7 个是空字节。
chat 优点:效率高;缺点:占用空间;适用场景:存储密码的 md5 值,固定长度的,使用 char 非常合适。
varchar(n) :可变长度,存储的值是每个值占用的字节再加上一个用来记录其长度的字节的长度。
所以,从空间上考虑 varcahr 比较合适;从效率上考虑 char 比较合适,二者使用需要权衡。
float 和 double 的区别是什么?

float 最多可以存储 8 位的十进制数,并在内存中占 4 字节。
double 最可可以存储 16 位的十进制数,并在内存中占 8 字节。
mysql 的内连接、左连接、右连接有什么区别?

内连接关键字:inner join;左连接:left join;右连接:right join。

内连接是把匹配的关联数据显示出来;左连接是左边的表全部显示出来,右边的表显示出符合条件的数据;右连接正好相反。
 mysql 索引是怎么实现的?

索引是满足某种特定查找算法的数据结构,而这些数据结构会以某种方式指向数据,从而实现高效查找数据。

具体来说 MySQL 中的索引,不同的数据引擎实现有所不同,但目前主流的数据库引擎的索引都是 B+ 树实现的,B+ 树的搜索效率,可以到达二分法的性能,找到数据区域之后就找到了完整的数据结构了,所有索引的性能也是更好的。
怎么验证 mysql 的索引是否满足需求?

使用 explain 查看 SQL 是如何执行查询语句的,从而分析你的索引是否满足需求。

explain 语法:explain select * from table where type=1。
说一下数据库的事务隔离?

MySQL 的事务隔离是在 MySQL. ini 配置文件里添加的,在文件的最后添加:transaction-isolation = REPEATABLE-READ

可用的配置值:READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ、SERIALIZABLE。

READ-UNCOMMITTED:未提交读,最低隔离级别、事务未提交前,就可被其他事务读取(会出现幻读、脏读、不可重复读)。
READ-COMMITTED:提交读,一个事务提交后才能被其他事务读取到(会造成幻读、不可重复读)。
REPEATABLE-READ:可重复读,默认级别,保证多次读取同一个数据时,其值都和事务开始时候的内容是一致,禁止读取到别的事务未提交的数据(会造成幻读)。
SERIALIZABLE:序列化,代价最高最可靠的隔离级别,该隔离级别能防止脏读、不可重复读、幻读。

脏读 :表示一个事务能够读取另一个事务中还未提交的数据。比如,某个事务尝试插入记录 A,此时该事务还未提交,然后另一个事务尝试读取到了记录 A。

不可重复读 :是指在一个事务内,多次读同一数据。

幻读 :指同一个事务内多次查询返回的结果集不一样。比如同一个事务 A 第一次查询时候有 n 条记录,但是第二次同等条件下查询却有 n+1 条记录,这就好像产生了幻觉。发生幻读的原因也是另外一个事务新增或者删除或者修改了第一个事务结果集里面的数据,同一个记录的数据内容被修改了,所有数据行的记录就变多或者变少了。
 说一下 mysql 常用的引擎?

InnoDB 引擎:InnoDB 引擎提供了对数据库 acid 事务的支持,并且还提供了行级锁和外键的约束,它的设计的目标就是处理大数据容量的数据库系统。MySQL 运行的时候,InnoDB 会在内存中建立缓冲池,用于缓冲数据和索引。但是该引擎是不支持全文搜索,同时启动也比较的慢,它是不会保存表的行数的,所以当进行 select count(*) from table 指令的时候,需要进行扫描全表。由于锁的粒度小,写操作是不会锁定全表的,所以在并发度较高的场景下使用会提升效率的。

MyIASM 引擎:MySQL 的默认引擎,但不提供事务的支持,也不支持行级锁和外键。因此当执行插入和更新语句时,即执行写操作的时候需要锁定这个表,所以会导致效率会降低。不过和 InnoDB 不同的是,MyIASM 引擎是保存了表的行数,于是当进行 select count(*) from table 语句时,可以直接的读取已经保存的值而不需要进行扫描全表。所以,如果表的读操作远远多于写操作时,并且不需要事务的支持的,可以将 MyIASM 作为数据库引擎的首选。
说一下 mysql 的行锁和表锁?

MyISAM 只支持表锁,InnoDB 支持表锁和行锁,默认为行锁。

表级锁:开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突的概率最高,并发量最低。
行级锁:开销大,加锁慢,会出现死锁。锁力度小,发生锁冲突的概率小,并发度最高。
说一下乐观锁和悲观锁?

乐观锁:每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在提交更新的时候会判断一下在此期间别人有没有去更新这个数据。
悲观锁:每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻止,直到这个锁被释放。

数据库的乐观锁需要自己实现,在表里面添加一个 version 字段,每次修改成功值加 1,这样每次修改的时候先对比一下,自己拥有的 version 和数据库现在的 version 是否一致,如果不一致就不修改,这样就实现了乐观锁。
mysql 问题排查都有哪些手段?

使用 show processlist 命令查看当前所有连接信息。
使用 explain 命令查询 SQL 语句执行计划。
开启慢查询日志,查看慢查询的 SQL。
如何做 mysql 的性能优化?

为搜索字段创建索引。
避免使用 select *,列出需要查询的字段。
垂直分割分表。
选择正确的存储引擎。

mysql面试题

原文地址:https://www.cnblogs.com/jingge0723/p/14647161.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6438.html

(0)
上一篇 2023-04-09
下一篇 2023-04-10

相关推荐

  • 安装tkinter教程

    安装tkinter教程若想使用Python图形界面的编程,就必须安装Tkinter库,不过在Python 2.x版本中Tkinter已作为标准库内置,无需安装。在Python 3.x版本中,需要手动安装Tkinter库。

    2024-06-28
    52
  • 排序规则_序列怎么排序

    排序规则_序列怎么排序一、什么是排序规则 mysql官网的说法 The collation is a set of rules (only one rule in this case): “compare the enco

    2023-05-04
    165
  • MySQL是怎么解决幻读问题的?[通俗易懂]

    MySQL是怎么解决幻读问题的?[通俗易懂]前言 我们知道MySQL在可重复读隔离级别下别的事物提交的内容,是看不到的。而可提交隔离级别下是可以看到别的事务提交的。而如果我们的业务场景是在事物内同样的两个查询我们需要看到的数据都是一致的,不能被

    2023-04-19
    157
  • Python版本更换完整指南

    Python版本更换完整指南Python是一种高级的、解释型的、面向对象的编程语言。它是一个流行的编程语言,用于Web开发、数据科学、人工智能等等。然而,不同的Python版本可能会在语法、库、特性等方面存在差异。因此,了解如何更换Python版本对Python程序员而言是非常有用的。本文将提供Python版本更换的完整指南,涵盖多个方面,包括虚拟环境、PyCharm、Ubuntu、Anaconda、Jupyter、VSCode、Spyder、树莓派以及如何选择Python国内源。

    2024-07-25
    41
  • Python实现数据类型判断

    Python实现数据类型判断Python是一种高级编程语言,也是一种解释型语言。Python具有简洁明了、易于阅读和学习的语法,因此受到了众多程序员的喜爱。Python还支持多种数据类型,包括数字、字符串、布尔值、列表、元组、字典等。在编写Python程序时,经常需要对数据的类型进行判断,以便进行相应的操作。本文将介绍在Python中如何实现数据类型判断。

    2024-07-21
    31
  • MySQL之数据操纵语言(DML)[通俗易懂]

    MySQL之数据操纵语言(DML)[通俗易懂]数据操纵语言(DML) 数据操纵语(Data Manipulation Language),简称DML。 DML主要有四个常用功能。 增 删 改 查 insert delete update sele

    2023-04-16
    146
  • 用Python编程,学习如何使用lower()函数

    用Python编程,学习如何使用lower()函数Python是一种高级编程语言,被广泛应用于各种领域,特别是数据分析和人工智能领域。在Python编程中,经常需要将字符串进行一些处理,比如大小写转化等操作,这时候就需要使用一些字符串函数。本文将介绍如何使用lower()函数,将字符串转化为小写字母。

    2024-06-05
    58
  • Excel字符串截取(left&right&mid)[通俗易懂]

    Excel字符串截取(left&right&mid)[通俗易懂]Excel中字符串截取函数主要有left、right和mid1.left函数  在字符串“wang”中,从左起截取2个字符,结果是“wa”。2.right函数  在字符串“wang”中,从右起截取2个字符,结果是“ng”。3.mid函数  从字符串“wang”第2个位置,截取长度为2的字符串,结果是“an”。

    2023-03-01
    152

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注