Java Mysql数据库面试题(一)
- 前言
- 1、CHAR 和 VARCHAR 的区别?
- 2、Mysql锁有哪些,如何理解 ?
- 3、什么是MVCC多版本并发控制?
- 4、简述InnoDB和MyISAM的区别:
- 5、MySQL 索引类型:
- 6、explain查看执行计划:
- 7、MySQL Update是行锁还是表锁?
- 8、Mysql和Redis/ES实现数据同步方式?
- 9、交叉连接、内连接、外连接的区别?
- 10、SQL 语言包括哪几部分?每部分都有哪些操作关键字?
- 11、Mysql和ES数据同步方案?
- 12、B+树和B树的对比?
- 13、谈一谈你对 MySQL 性能优化的理解:
- 14、如何优化 sql语句?
- 15、主键和候选键有什么区别?
- 16、myisamchk 是用来做什么的?
- 17、MyISAM Static 和 MyISAM Dynamic 有什么区别?
- 18、如果一个表有一列定义为 TIMESTAMP,将发生什么?
- 19、列设置为AUTO INCREMENT时,如果在表中达到最大值,会发生什么情况?
- 20、怎样才能找出最后一次插入时分配了哪个自动增量?
- 21、LIKE 声明中的%和_是什么意思?
- 22、如何在 Unix 和 MySQL 时间戳之间进行转换?
- 23、列对比运算符是什么?
- 24、BLOB 和 TEXT 有什么区别?
- 25、MySQL_fetch_array 和 MySQL_fetch_object 的区别是什么?
- 总结
前言
最新的 Java 面试题,技术栈涉及 Java 基础、集合、多线程、Mysql、分布式、Spring全家桶、MyBatis、Dubbo、缓存、消息队列、Linux…等等,会持续更新。
如果对老铁有帮助,帮忙免费点个赞,谢谢你的发财手!
1、CHAR 和 VARCHAR 的区别?
- 1.char 表示是固定长度的,varchar表示是长度可变的;
- 2.char如果插入的长度小于定义长度时,则用空格填充;varchar小于定义长度时,就按实际长度存储;
- 3.char最多能存放255(2的8次方)个字符,和编码无关,varchar最多能存放65532(2的16次方)个字符。
2、Mysql锁有哪些,如何理解 ?
在数据库中如果有多个事务同时操作同一数据,如果不加锁就可能导致数据不一致。
按锁粒度分类:
- 1.⾏锁:锁某⾏数据,锁粒度最⼩,并发度⾼,但可能会出现死锁,是基于索引实现的;
- 2.表锁:锁整张表,锁粒度最⼤,并发度低,但不会出现死锁;
- 3.间隙锁:锁的是⼀个区间,锁粒度和并发都介于二者之间。
按读写分类:
- 1.共享锁(读锁):是一个事务并发读取某一行记录所需要持有的锁,比如select … in share mode;
- 2.排他锁(写锁):是一个事务并发更新或删除某一行记录所需要持有的锁,比如select … for update
- 3.自增锁:是一种特殊的表级锁,主要用于事务中自增主键id;
3、什么是MVCC多版本并发控制?
通俗的讲,MVCC指的是维持一个数据的多个版本,使得读写操作没有冲突,从而提高数据库的读写性能;
它是通过乐观锁来实现的,主要依赖3个模块:隐藏字段、undo log、Read View;对于使用 InnoDB 存储引擎的表来说,它都包含两个必要的隐藏字段:事务id(trx_id)和回滚指针(roll_pointer);
底层原理是这样的:
- 1.在事务A中修改某条数据,数据库会先对它加排它锁;
- 2.然后把该条数据拷贝到undo log中,作为副本,用于回滚;
- 3.拷贝完成后,就修改该条数据,并且修改事务id为当前事务的id,回滚指针指向副本的记录;
- 4.然后提交事务,释放锁。
4、简述InnoDB和MyISAM的区别:
- 1.InnoDB⽀持事务,MyISAM不支持事务;
- 2.InnoDB⽀持表锁和行锁,MyISAM只⽀持表锁(每次操作都是对整个表加锁);
- 3.InnoDB的叶子节点存储是行数据,MyISAM存储的是磁盘地址(相当于回表);
- 4.InnoDB的索引和数据是在1个文件中(xxx.ibd),MyISAM的索引和数据是分开的2个文件(xxx.myi和xxx.myd),索引存储的是数据文件的磁盘地址。
相同点:都是在mysql安装目录下的data目录,为每个数据库都建了同名的文件夹,里面保存了每张表的结构和数据,表结构是存储在xxx.frm文件。
5、MySQL 索引类型:
1、按照功能分类,索引主要有四种:
- 1.普通索引:可以包含多个字段(联合/复合索引),可以同时存在多个普通索引;
- 2