首页 > 编程知识 正文

mysql面试题经典,mysql面试题大全

时间:2023-05-06 10:58:22 阅读:226561 作者:1970

文章目录 1. *sql语句应该考虑哪些安全性:2. *MyISAM 和 InnoDB 的区别:3. *百万数据优化:1. 添加索引遵守、最左前缀法则:2. 索引不要放在范围查找的右边:3. 减少select*的使用:4. like导致索引失效:5. order by 优化: 4. 数据库各种问题:脏写脏读不可重复读幻读 5. select count (*)、count(1)、count(column)的区别:6. MySQL事务的隔离级别:7. MySQL 有哪些索引类型:8. MySQL 有哪些存储引擎:9. MySQL 悲观锁和乐观锁:10. MySQL 视图的作用,视图可以更改吗:11. drop,delete与truncate的区别:12. MySQL触发器:13. MySQL binlog的几种日志录入格式以及区别:14. MySQL 备份计划:15. MySQL索引为什么要用B+树:16. MySQL MVCC(多版本并发控制):

1. *sql语句应该考虑哪些安全性: 1.防止sql注入,对特殊字符进行转义、过滤或者使用预编译sql语句绑定2.使用最小权限原则,特别是不要使用root账户,为不同的动作或者操作建立不同的账户3.当sql出错时,不要把数据库出错的信息暴露到客户端 2. *MyISAM 和 InnoDB 的区别: 1.InnoDB 支持事务,MyISAM 不支持事务2.对一个包含外键的 InnoDB 表转为 MYISAM 会失败3.InnoDB 不保存表的具体行数需要全表扫描,而MyISAM 用一个变量保存了整个表的行数4.InnoDB 最小的锁粒度是行锁,MyISAM 最小的锁粒度是表锁。一个更新语句会锁住整张表,导致其他查询和更新都会被阻塞,因此并发访问受限5.系统崩溃后,MyISAM恢复起来更困难,能否接受,不能接受就选 InnoDB6.MyISAM:可被压缩,存储空间较小。7.InnoDB:需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。备份及恢复:MyISAM: 数据是以文件的形式存储,所以在跨平台的数据转移中会很方便,在备份和恢复时可单独针对某个表进行操作InnoDB: 拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十G的时候就相对痛苦了1.InnoDB 支持事务,MyISAM 不支持事务2.对一个包含外键的 InnoDB 表转为 MYISAM 会失败3.InnoDB 不保存表的具体行数需要全表扫描,而MyISAM 用一个变量保存了整个表的行数4.InnoDB 最小的锁粒度是行锁,MyISAM 最小的锁粒度是表锁。一个更新语句会锁住整张表,导致其他查询和更新都会被阻塞,因此并发访问受限5.系统崩溃后,MyISAM恢复起来更困难,能否接受,不能接受就选 InnoDB6.MyISAM:可被压缩,存储空间较小。7.InnoDB:需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。 3. *百万数据优化: 1. 添加索引遵守、最左前缀法则:

2. 索引不要放在范围查找的右边:

3. 减少select*的使用:

4. like导致索引失效:

5. order by 优化:

4. 数据库各种问题: 解决方法:加锁 脏写

脏写,意思是说有两个事务,事务 A 和事务 B 同时在更新一条数据,事务 A 先把它更新为 A 值,事务 B 紧接着就把它更新为 B 值

脏读

接着,事务 B 拿着刚才查询到的 A 值做各种业务处理。但是接着坑爹的事情发生了,事务 A 突然回滚了事务,导致它刚才功能的 A 值没了,此时那行数据的值回滚为 NULL 值。然后事务 B 紧接着此时再次查询那行数据的值,看到的居然是 NULL 值

不可重复读

幻读

幻读就是你一个事务用一样的 SQL 多次查询,结果每次查询都会发现查到一些之前没看到过的数据

5. select count (*)、count(1)、count(column)的区别: 1.count(*) 跟 count(1) 的结果一样,包括对NULL的统计2.count(column) 是不包括对NULL的统计3.如果表沒有主键(Primary key), 那么count(1)比count(*)快4.如果表没有主键,只建了索引,那么count(*),count(1)是一样的 6. MySQL事务的隔离级别: 1. Read Uncommitted:读取未提交内容2. Read Committed:读取提交内容3. Repeatable Read:可重读4. Serializable:可串行化

7. MySQL 有哪些索引类型: 1.主键索引2.普通索引3.唯一索引4.全文索引 8. MySQL 有哪些存储引擎: 1.InnoDB:默认存储引擎,使用最广泛。2.MyISAM:表锁,不支持事务。3.Archive:适合日志和数据采集类应用。4.Memory:适合访问速度快,数据丢失也没有关系的场景。5.CSV:将普通csv保存再MySQL中,主要用于数据交换。

此外还有:Blackhole、Federated、Merge、NDB等存储引擎

9. MySQL 悲观锁和乐观锁:

悲观锁和乐观锁都是为保证一致性的一种锁。

1. 悲观锁:比较适合写入操作比较频繁的场景,如果出现大量的读取操作,每次读取的时候都会进行加锁,这样会增加大量的锁的开销,降低了系统的吞吐量。2. 乐观锁:比较适合读取操作比较频繁的场景,如果出现大量的写入操作,数据发生冲突的可能性就会增大。 10. MySQL 视图的作用,视图可以更改吗: 1.视图是虚拟的表,与包含数据的表不一样2.视图只包含使用时动态检索数据的查询,不包含任何列或数据3.视图不能被索引,也不能有关联的触发器或默认值4.视图的更新将对基表进行更新;5.但是视图主要用于简化检索,保护数据,并不用于更新,而且大部分视图都不可以更新 11. drop,delete与truncate的区别: 1.drop直接删掉表2.truncate删除表中数据,再插入时自增长id又从1开始3.delete删除表中数据,可以加where字句。 12. MySQL触发器:

触发器(trigger):监视某种情况,并触发某种操作

1.监视地点(table)2.监视事件(insert/update/delete) 3.触发时间(after/before) 4.触发事件(insert/update/delete) 13. MySQL binlog的几种日志录入格式以及区别: 1.Statement:每一条会修改数据的sql都会记录在binlog中2.Row:不记录sql语句上下文相关信息,仅保存哪条记录被修改3.Mixedlevel:是以上两种level的混合使用,一般的语句修改使用statment格式保存binlog,如一些函数,statement无法完成主从复制的操作,则 采用row格式保存

Statement 可能占用空间会相对小一些,传送到 slave 的时间可能也短,但是没有 row模式的可靠。 Row 模式在操作多行数据时更占用空间, 但是可靠。

14. MySQL 备份计划: 物理备份恢复快(xtranbackup),逻辑备份(mysqldump)恢复慢 这里跟机器,尤其是硬盘的速率有关系备份视库的大小来定: 1.一般来说 100G 内的库,可以考虑使用 mysqldump 来做,因为 mysqldump更加轻巧灵活,备份时间选在业务低峰期,可以每天进行都进行全量备份(mysqldump 备份出来的文件比较小,压缩之后更小)。2.100G 以上的库,可以考虑用 xtranbackup 来做,备份速度明显要比 mysqldump 要快。一般是选择一周一个全备,其余每天进行增量备份,备份时间为业务低峰期。 15. MySQL索引为什么要用B+树: 1. B+树能显著减少IO次数,提高效率2. B+树的查询效率更加稳定,因为数据放在叶子节点3. B+树能提高范围查询的效率,因为叶子节点指向下一个叶子节点 16. MySQL MVCC(多版本并发控制): 组成:1. 表的隐藏:记录事务id及上个版本的数据地址2. undo log:记录数据各个版本修改历史即事务链3. Read View:读试图,用于判断哪些版本可见优点:1. 在并发读写数据库时,可以做到在读操作时不用阻塞写操作,写操作也不用阻塞读操作,提高了数据库并发读写的性能2. 同时还可以解决脏读,幻读,不可重复读等事务隔离问题,但不能解决更新丢失问题

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。