数据库面试题
点击这里关注GitHub,期待您的参与!
-
MySQL 如何做分页?
MySQL 数据库做分页用 limit 关键字,它后面跟两个参数 startIndex 和 pageSize
-
MySQL 引擎有哪些?各自的区别是什么?
-
InnoDB 和 MyIsam 。
-
区别:
特性 InnoDB MyIsam 事物 支持 不支持 外键 支持 不支持 全文索引 不支持 支持 其它 提供提交,回滚,崩溃回复能力的事物安全能力,实现并发控制 提供较高的插入和查询记录的效率,主要用于插入和查询
-
-
数据库如何建立索引?
create index account_index on `table name `(`字段名`(length)
-
同一张表的多个字段如何创建组合索引?
create index account_index on `table name `(`字段名`,'字段名')
-
如何应对数据的高并发和大量数据计算?
- 创建索引。
- 数据库读写分离(一个负责读,一个负责写)。
- 去掉外键。
- Django 中 ORM 表优化:
- select_related:一对多使用,查询主动做连表。
- prefetch_related:多对多或者一对多的时候使用,不做连表,做多次查询。
-
什么叫做内连表、左连表和右连表?
- 内连接是根据某个条件连接两个表共有的数据。
- 左连接是根据某个条件以及左边的表连接数据,右边的表没有数据的话则为 null。
- 右连接是根据某个条件以及右边的表连接数据,左边的表没有数据的话则为 null。
-
视图和表有何区别?
- 视图是已经编译好的 sql 语句,是基于 sql 语句的结果集的可视化的表,而表不是。
- 视图是窗口,表示内容。
- 视图没有实际的物理记录,而表有。
- 视图的建立和删除只影响视图本身,不影响对应的表。
-
关系型数据库有何特点?
- 数据集中控制
- 数据独立性高
- 数据共享性好
- 数据冗余度小
- 数据结构化
- 数据保护能力统一
-
MySQL 数据库都有哪些索引?
- 普通索引:普通索引仅有一个功能:加速查找
- 唯一索引:唯一索引两个功能:加速查找和唯一约束(可含 null)
- 外键索引:外键索引两个功能:加速查找和唯一约束(不可为 null)
- 联合索引:联合索引是将 n 个列组合成一个索引,应用场景:同时使用n列来进行查询
-
存储过程
存储过程不允许执行 return 语句,但是可以通过 out 参数返回多个值,存储过程一般是作为一个独立的部分来执行,存储过程是一个预编译的 SQL 语句。
-
SQL 有哪些优化方式?
- 选择最有效率的表名顺序(只在基于规则的优化器中有效)。
- WHERE子句中的连接顺序。
- SELECT子句中避免使用‘*’。
- 减少访问数据库的次数。
- 在 SQLPlus , SQLForms 和 Pro*C 中重新设置 ARRAYSIZE 参数, 可以增加每次数据库访问的检索数据量 ,建议值为200。
- 使用 DECODE 函数来减少处理时间。
- 整合简单,无关联的数据库访问。
- 删除重复记录。
- 用 TRUNCATE 替代 DELETE。
- 尽量多使用COMMIT。
- 用 Where 子句替换 HAVING 子句。
- 减少对表的查询。
- 通过内部函数提高SQL效率。
- 使用表的别名(Alias)。
- 用 EXISTS 替代 IN、用 NOT EXISTS 替代 NOT IN。
- 用EXISTS替换DISTINCT
- SQL 语句用大写的(因为 Oracle 总是先解析 SQL 语句,把小写的字母转换成大写的再执行)。
- 其它。
-
char 和 vachar 区别?
- char 是固定长度,存储需要空间12个字节,处理速度比 vachar 快,费内存空间。
- vachar 是不固定长度,需要存储空间13个字节,节约存储空间。
-
Mechached 与 redis区别?
- mechached
- 缺点:
- 只支持字符串。
- 不能持久化。
- 数据仅存在内存中。
- 宕机或重启数据将全部失效。
- 不能进行分布式扩展,文件无法异步法。
- 优点:
- mechached 进程运行之后,会预申请一块较大的内存空间,自己进行管理。
- 缺点:
- redis
- 优点:
- 支持服务器端的数据类型,redis 与 memcached 相比来说,拥有更多的数据结构。
- 并发支持更丰富的数据操作
- 可持久化。
- 五大类型数据:string、hash、list、set 和有序集合。
- 缺点:
- 数据库的容量受到物理内存的限制。
- redis 是单进程单线程的。
- 优点:
- mechached
-
什么是 SQL 注入?如何防止?
- SQL 注入是比较常见的攻击方式之一,针对编程员编程的疏忽,通过 SQL 语句,实现账号无法登陆,甚至篡改数据库。
- 防止:
- 切记变量不要用拼接字符串的方法。
- 检查变量数据类型和格式。
- 过滤特殊符号。
- 绑定变量,使用预编译语句
- 严格加密处理用户的机密信息
-
什么是触发器?
- 触发器是一种特殊的存储过程,主要是通过事件来触发而被执行的,他可以强化约束,来维护数据库的完整性和一致性,可以跟踪数据内的操作从而不允许未经许可的更新和变化,可以联级运算。
注意:只有表支持触发器,视图不支持触发器。
-
游标是什么?
- 是对查询出来的结果集作为一个单元来有效的处理,游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行,可以对结果集当前行做修改。
- 一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。
-
数据库支持多有标准的 SQL 数据类型,主要分为哪些类?
- 数值类型(tinyint,int,bigint,浮点数,bit)
- 字符串类型(char和vachar,enum,text,set)
- 日期类型(date,datetime,timestamp)
-
什么是慢查询?如何通过慢查询日志优化?
- MySQL 会记录下查询超过指定时间的语句,我们将超过指定时间的 SQL 语句查询称为慢查询,都记在慢查询日志里。
-
如何提高 Memcached 命中率?
- 程序端过滤掉非法请求。
- 使用一致性哈希算法。
- 数据生成时就写入到缓存中,避免预热数据时访问数据库。
- 设置合理的数据过期时间,减少因为数据过期产生的并发穿透。
- 设置主从,主从过期时间不同。
-
Oracle 和 MySQL 有何使用上的区别?如何选择?
- 区别:
- 主键:MySQL 可使用自动增长类型(AUTO INCREMENT);Oracle 中没有自动增长。
- 单引号的处理:MySQL 里可以使用双引号来包起字符串;Oracle 里要使用单引号包起字符串。
- 分页查询:MySQL 中分页很简单,因为他有专门的关键字 LIMIT 来实现分页查询;Oracle 里面没有,实现起来比较复杂。
- 长字符串的处理:Oracle 有一个 CLOB 类型专门用于在 INSERT 或者 UPDATE 时候字符串长度大于等于4000个单字节时;MySQL 没有。
- 修改表的数据:Oracle 数据库在使用表的数据操作时,需要用 SQL 语句来执行,修改完了之后记得点击提交事务按钮;MySQL 中可直接修改或添加数据。
- 选择 MySQL:
- MySQL 免费开源。
- MySQL 轻便快捷。
- MySQL 对命令行和图形界面的支持都很好。
- MySQL 支持通过 Query Browser 进行管理。
- 区别: