意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

面试题-mysql_个人文章

来源:恒创科技 编辑:恒创科技编辑部
2023-12-22 21:55:59
关于自增主键

问:

一张表,里面有 ID 自增主键,当 insert 了 17 条记录之后, 删除了第 15,16,17 条记录,再把 Mysql 重启,再 insert 一条记 录,这条记录的 ID 是 18 还是 15 ?

答:

如果表的类型是MyISAM,那么是18。因为MyISAM表会把自增主键的最大ID记录到数据文件里,重启MySQL自增主键的最大ID也不会丢失。如果表的类型是InnoDB,那么是15.因为InnoDB只是把自增主键的最大ID记录到内存中,所以重启数据库是对象表进行OPTIMZE操作,都会导致最大ID丢失。MySQL的技术特点是什么?

MySQL数据库软件是一个客户端或服务器系统,其中包括:支持各种客户端程序和库的多线程SQL服务器、不同的后端、广泛的应用程序编程接口和管理工具。


面试题-mysql_个人文章

Heap表是什么?概述

Heap表,即使用MEMORY存储引擎的表,这种表的数据存储在内存中,由于硬件问题或者断电,数据容易丢失,所以只能从其他数据表中读取数据作为临时表或者只读缓存来使用。

使用场景

涉及瞬态,非关键数据的操作,例如会话管理或缓存。
内存中存储可实现快速访问和低延迟的数据。数据量可以完全容纳在内存中,而不会导致操作系统换出虚拟内存页面。
只读或者只读为主的数据访问模式。

使用限制BLOB 或 TEXT 字段是不允许的只能使用比较运算符=,<,>,=>,= <HEAP 表不支持 AUTO_INCREMENT索引不可为 NULLMySQL服务器默认端口是什么?

3306

与Oracle相比,Mysql的优势是什么?
+ mysql是开源软件,随时可用,无需付费。
+ Mysql是便携式的
+ 带有命令提示符的GUI
+ 使用mysql查询浏览器支持管理
如何区分FLOAT和DOUBLE?在内存中占有的字节数不同: 单精度的float内存占4个字节, 双精度的double内存占8个字节有效数字位数不同(尾数) : 单精度的float小数点后有效位数7位, 双精度的double小数点后有效位数16位数值取值范围不同 根据IEEE标准来计算!在程序中处理速度不同: 一般来说,CPU处理单精度浮点数的速度比处理双精度浮点数快
首先: 能用单精度时不要用双精度 以省内存,加快运算速度!
float: 当然你需要小数部分并且对精度的要求不高时,选择float单精度浮点型比较好!区分char_length 和 length?char_length是字符数, 不管汉字还是数字或是字母都算是一个字符。length是字节数,在UTF-8编码中一个汉字占用三个字节,一个数字或字母占有一个字节;而在GBK编码中,一个汉字占有两个字节,一个数字或字母一个字节。数据库事务四大原则ACIDA-原子性:事务是一个原子性质的操作单元,事务里面的对数据库的操作要么都执行,要么都不执行。C-一致性:在事务开始之前和完成之后,数据都必须保持一致状态,必须保证数据库的完整性。也就是说,数据必须符合数据库的规则。I-隔离性:数据库允许多个并发事务同时对数据进行操作,隔离性保证各个事务相互独立,事务处理时的中间状态对其它事务是不可见的,以此防止出现数据不一致状态。可通过事务隔离级别设置:包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)、D-持久性:一个事务处理结束后,其对数据库的修改就是永久性的,即使系统故障也不会丢失。Mysql四种事务隔离级别

请简洁描述 Mysql 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?

读未提交(会导致出现脏读、不可重复读、幻读)

允许脏读取,但不允许更新丢失。如果一个事务已经开始写数据,则另外一个事务则不允许同时进行写操作,但允许其他事务读此行数据。该隔离级别可以通过“排他写锁”实现。

读已提交(会导致出现不可重复读、幻读)

允许不可重复读取,但不允许脏读取。这可以通过“瞬间共享读锁”和“排他写锁”实现。读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。

可重复读(会导致出现幻读)

禁止不可重复读取和脏读取,但是有时可能出现幻读数据。这可以通过“共享读锁”和“排他写锁”实现。读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。

可串行化:隔离级别中最严格的,解决前面三种所有的问题,但是效率太低

提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,不能并发执行。仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操作的事务访问到。

隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。对于多数应用程序,可以优先考虑把数据库系统的隔离级别设为Read Committed。它能够避免脏读取,而且具有较好的并发性能。尽管它会导致不可重复读、幻读和第二类丢失更新这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制。

脏读、不可重复读、幻读区别?所谓脏读是指一个事务中访问到了另外一个事务未提交的数据一个事务读取同一条记录2次,得到的结果不一致一个事务读取2次,得到的记录条数不一致
关于mysql的“四大原则”、“隔离级别”、“脏读等问题”详细可以查看文章:/news/upload/ueditor/image/202209/54xhgdl0xu3 Mysql 中 ENUM 的用法是什么?

限定值的取值范围,比如性别(男,女,未知)等。
但是不推荐使用ENUM这个数据类型,会有很多坑。

CHAR 和 VARCHAR 的区别?char的长度是不可变的,而varchar的长度是可变的。(varchar更空间)char的存取速度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找。(char更省时间)列的字符串类型可以是什么?setblobenumchartextvarchar如何获取当前的 Mysql 版本?
select version();
上一篇: 聊聊优化sql中order By语句的方法 下一篇: java - 百亿级数据 分库分表 后面怎么分页查询?_个人文章