Mysql校招、实习常见面试题总结1(较基础)

1.如何避免 sql 注入?

PreparedStatement(简单又有效的方法)、使用正则表达式过滤传入的参数、字符串过滤、检查是否包函非法字符、页面判断代码。

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

第一范式:当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。满足第一范式是关系模式规范化的最低要
求,否则,将有很多基本操作在这样的关系模式中实现不了。
第二范式:如果关系模式R满足第一范式,并且R得所有非主属性都完全依赖于R的每一个候选关键属性,称R满足第二范式,简记为2NF。
第三范式:设R是一个满足第一范式条件的关系模式,X是R的任意属性集,如果X非传递依赖于R的任意一个候选关键字,称R满足第三范式,简记为3NF.

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

一般情况下,我们创建的表的类型是InnoDB,如果新增一条记录(不重启mysql的情况下),这条记录的id是18;但是如果重启(文中提到的)MySQL的话,这条记录的ID是15。因为InnoDB表只把自增主键的最大ID记录到内存中,所以重启数据库或者对表OPTIMIZE操作,都会使最大ID丢失。 但是,如果我们使用表的类型是MylSAM,那么这条记录的ID就是18。因为MylSAM表会把自增主键的最大ID记录到数据文件里面,重启MYSQL后,自增主键的最大ID也不会丢失。因此题目所问的ID应该是6。

4.Char 和 VarChar 的区别是什么?

(1)首先明确的是,char的长度是不可变的,而varchar的长度是可变的,
(2)定义一个char[10]和varchar[10],如果存进去的是‘abcd’,那么char所占的长度依然为10,除了字符‘abcd’外,后面跟六个空格,而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的,(3)char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。(4)char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节,两者的存储数据都非unicode的字符数据。

5.MySQL 的内连接、左连接、右连接有什么区别?

1.内连接,显示两个表中有联系的所有数据;2.左链接,以左表为参照,显示所有数据;3.右链接,以右表为参照显示数据;

6.MySQL索引是怎么实现的?

传送门

7.怎么验证 MySQL的索引是否满足需求?

使用方法,在select语句前加上explain就可以了:EXPLAIN SELECT surname,first_name form a,b WHERE a.id=b.id

8.说一下数据库的事务隔离?

读未提交,读提交,可重复读,可串行。

9.说一下 MySQL常用的引擎?

在MySQL数据库中,常用的引擎主要就是2个:Innodb和MyIASM。
传送门

10.说一下 MySQL的行锁和表锁?

传送门

11.说一下乐观锁和悲观锁?

悲观锁:正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度(悲观),因此,在整个数据处理过程中,将数据处于锁定状态。 悲观锁的实现,往往依靠数据库提供的锁机制 (也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)。

乐观锁( Optimistic Locking )是相对悲观锁而言,乐观锁假设数据一般情况下不会造成冲突,所以在事务对数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则返回错误信息,让用户决定如何去做。

相对于悲观锁,在对数据库进行处理的时候,乐观锁并不会使用数据库提供的锁机制,一般用记录数据版本的方式实现乐观锁。
传送门

12.MySQL问题排查都有哪些手段?

事物级别select @@global.tx_isolation;输出数据当前状态–返回最近一次死锁场景,等等信息SHOW ENGINE INNODB STATUS ;可用于排查死锁问题,锁定行数等问题 查询数据库连接信息 select * from information_schema.PROCESSLIST查询事务信息–观察事务启动时间,判断是否为最近的创建的 select * from information_schema.INNODB_TRX;。查询数据库锁等待信息–如果存在数据表示当前存在所等待情况 select * from information_schema.INNODB_LOCK_WAITS;手动杀掉某个进程–来源于select * from information_schema.INNODB_TRX; kill trx_mysql_thread_id; 数据库客户端连接ip统计;查询数据库指定连接的当前执行sql 。 查询锁等待的前后事物和客户端调用的简单sql 。 数据库客户端连接简介

13.如何做 MySQL的性能优化?

(1)MySQL数据表字段要选取合适的字段属性。
(2)使用连接Join来代替字查询(sub-Query)。
(3)使用联合Union来代替手动创建临时表。
(4)使用事务机制来完成需要多个SQL操作的数据处理,保证数据的完整性和安全访问。事务一begin关键字开始,commit关键字结束,rollback命令可以把数据库恢复到begin开始之前的状态。(5)使用外键来优化关联表的性能,外键可以用来保证数据的关联性。
(6)使用索引提高MySQL数据库的性能。索引是提高数据库性能的常用方法,它可以令数据库服务器以比没有索引快得多的速度检索特定的行,尤其是在查询语句当中包含MAX(),MIN()和ORDER BY这些命令的时候,性能提高更为明显。
(7)通过优化查询语句提高查询速度。多数情况下索引可以提高查询速度,单如果SQL语句使用不恰当的话,索引将无法发挥他应有的作用。1)最好在相同类型的字段间进行比较2)在建有索引的字段上尽量不要使用函数操作.
(8)如果情况允许锁定表的方式会比采用事务的方式拥有更好的性能。

Mysql校招、实习常见面试题总结1(较基础)_第1张图片

你可能感兴趣的:(数据库与mysql,程序员笔试面试)