1.列举常见的关系型数据库和非关系型都有哪些?
关系型数据库:
Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL
非关系型数据库:
NoSql、Cloudant、MongoDb、redis、HBase
2. MySQL常见数据库引擎及比较?
MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。 注意,通过更改STORAGE_ENGINE配置变量,能够方便地更改MySQL服务器的默认存储引擎。 InnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持。(提供行级锁) BDB:可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其他事务特性。 Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。 Merge:允许MySQL DBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。对于诸如数据仓储等VLDB环境十分适合。 Archive:为大量很少引用的历史、归档、或安全审计信息的存储和检索提供了完美的解决方案。 Federated:能够将多个分离的MySQL服务器链接起来,从多个物理服务器创建一个逻辑数据库。十分适合于分布式环境或数据集市环境。 Cluster/NDB:MySQL的簇式数据库引擎,尤其适合于具有高性能查找要求的应用程序, 这类查找需求还要求具有最高的正常工作时间和可用性。 Other:其他存储引擎包括CSV(引用由逗号隔开的用作数据库表的文件), Blackhole(用于临时禁止对数据库的应用程序输入),以及Example引擎 (可为快速创建定制的插件式存储引擎提供帮助)。
3.简述数据三大范式?
〖Python 数据库开发实战 - MySQL篇⑫〗- 数据表的字段约束_不渴望力量的哈士奇的博客-CSDN博客_什么能保证表中字段值的唯一性 python
4.什么是事务?MySQL如何支持事务?
事务是由一步或几步数据库操作序列组成逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行。
1.事务的原子性:一个事务的所有操作要么全部成功,要么全部失败。事务执行后,不允许停留在中间某个状态。
2.事务的一致性:不管在任何给定的时间、并发事务有多少,事务必须保证运行结果的一致性。(PS:事务的一致性这个特点真的很重要,它要求事务在并发的清情况下不会出现数据的 "歧义" ;事务如何实现 "一致性" 呢?其实很简单,取值事务相互之间读取临时数据即可。)
3.事务的隔离性:隔离性对于事务的一致性来说至关重要,隔离性要求事务不受其他并发事务的影响,如同在给定的时间内,该事物是数据库唯一运行的事务。也就是说,每个事务只能看到自己事务内的相关数据,别的事务的临时数据在当前事务里是看不到的。
4.事务的持久性:持久性的意思就是实物一旦提交,结果便是永久性的。即使发生了宕机、断电等突发状况,仍然可以依靠事务的日志完成数据的持久化。
MYSQL的事务处理主要有两种方法
1.用begin,rollback,commit来实现
begin开始一个事务
rollback事务回滚
commit 事务确认
2.直接用set来改变mysql的自动提交模式
mysql默认是自动提交的,也就是你提交一个query,就直接执行!可以通过
set autocommit = 0 禁止自动提交
set autocommit = 1 开启自动提交
来实现事务的处理
5.简述数据库设计中一对多和多对多的应用场景?
数据库实体间有三种对应关系:一对一,一对多,多对多。
一对一关系示例:
一个学生对应一个学生档案材料,或者每个人都有唯一的身份证编号。
一对多关系示例:
一个学生只属于一个班,但是一个班级有多名学生。
多对多关系示例:
一个学生可以选择多门课,一门课也有多名学生。
6.如何基于数据库实现商城商品计数器?
创建一个商城表---包含(id,商品名,每一个商品对应数量)
create table product
(id primary key auto_increment,
pname varchar(64),
pcount int);
7.常见SQL(必备)
DML(数据操作语言)
- SELECT - 从数据库表中获取数据
- UPDATE - 更新数据库表中的数据
- DELETE - 从数据库表中删除数据
- INSERT INTO - 向数据库表中插入数据
DDL(数据定义语言)
- CREATE DATABASE - 创建新数据库
- ALTER DATABASE - 修改数据库
- CREATE TABLE - 创建新表
- ALTER TABLE - 变更(改变)数据库表
- DROP TABLE - 删除表
- CREATE INDEX - 创建索引(搜索键)
- DROP INDEX - 删除索引
8.简述触发器、函数、视图、存储过程?
触发器:触发器是一个特殊的存储过程,它是数据库在 insert、update、delete 的时候自动执行的代码块。 函数:数据库中提供了许多内置函数,还可以自定义函数,实现 sql 逻辑。 视图:视图是由查询结果形成的一张虚拟表,是表通过某种运算得到的一个投影 存储过程:把一段代码封装起来,当要执行这一段代码的时候,可以通过调用该存储过程来实现(经过第一次编译后再次调用不需要再次编译,比一个个执行 sql 语句效率高)
9. MySQL索引种类
10. 索引在什么情况下遵循最左前缀的规则?
索引在什么情况下遵循最左前缀的规则? - Mr_Riven - 博客园
11. 主键和外键的区别?
定义主键和外键主要是为了维护关系数据库的完整性 主键是能确定一条记录的唯一标识。不能重复,不允许为空。 外键用于与另一张表关联。是能确定另一张表记录的字段,用于保持数据的一致性。
| 主键 | 外键 | 索引 | |
|---|---|---|---|
| 定义 | 唯一标识一条记录,不能重复,不允许为空 | 表的外键是另一表的主键,外键可以重复,可以是空值 | 该字段没有重复值,但可以有空值 |
| 作用 | 用来保证数据完整性 | 用来和其他表建立联系 | 提高查询排序的速度 |
| 个数 | 只能有一个 | 可有多个 | 可有多个 |
12. MySQL常见的函数?
聚合函数:avg,min,max,count,sum,
字符串处理函数:
合并字符串函数:concat(str1,str2,str3…)
比较字符串大小函数:strcmp(str1,str2)
获取字符串字节数函数:length(str)
获取字符串字符数函数:char_length(str)
字母大小写转换函数:大写:upper(x),ucase(x);小写lower(x),lcase(x)
处理数值的函数:
绝对值函数:abs(x)
向上取整函数:ceil(x)
向下取整函数:floor(x)
取模函数:mod(x,y)
随机数函数:rand()
四舍五入函数:round(x,y)
数值截取函数:truncate(x,y)
用于处理时间日期的函数:
获取当前日期:curdate(),current_date()
获取当前时间:curtime(),current_time()
获取当前日期时间:now()
从日期中选择出月份数:month(date),monthname(date)
从日期中选择出周数:week(date)
从日期中选择出周数:year(date)
从时间中选择出小时数:hour(time)
从时间中选择出分钟数:minute(time)
从时间中选择出今天是周几:weekday(date),dayname(date)
13. 列举 创建索引但是无法命中索引的8种情况。
1、查询条件中有or、not in、not exist等
2、小表查询
3、like查询是以%开头
4、如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引
5、没有使用索引字段查询
6、对索引列进行运算,需要建立函数索引
7、单独引用联合索引中的非第一位置的索引
8、没有查询条件
14. 如何开启慢日志查询?
一、开启慢查询日志首先需要了解四个参数:
- slow_query_log # 是否开启慢查询日志,默认OFF,开启则设置为 ON。
- slow_query_log_file # 慢查询日志文件存储位置。
- log_queries_not_using_indexes # 是否把没有使用到索引的SQL记录到日志中,默认OFF,开启则设置为 ON。
- long_query_time # 超过多少秒的查询才会记录到日志中,注意单位是秒。
知道参数含义后,我们就可以直接设置我们需要的参数了,我这里使用的是全局设置。
SET GLOBAL slow_query_log = 'ON'; SET GLOBAL slow_query_log_file = '文件路径(绝对路径)'; SET GLOBAL log_queries_not_using_indexes = 'ON'; SET GLOBAL long_query_time = 1; # 这里需要注意下,long_query_time参数设置后需要下次会话后才生效,当前会话查询还是原来的数值三:修改配置文件(永久设置)
如果想重启MySQL后不失效,可以修改MySQL配置文件
在配置文件中添加以下语句:slow_query_log="ON" slow_query_log_file="文件路径(绝对路径)" log_queries_not_using_indexes="ON" long_query_time=1重启后生效。
15. 数据库导入导出命令(结构+数据)?
16. 数据库优化方案?
优化sql语句;
原则: 1.1 尽量根据主键查询;
1.2 尽量使用单表查询,不要使用关联查询;
1.3 查询时可以使用in,但是绝对不要使用not in;
2. 创建索引;CREATE INDEX 索引名字 ON 表名称 (列名称);[列名称:规定你需要索引的列]。
3. 添加缓存;
例如:mybatis的一、二级缓存;该操作效率低;
redis缓存 / memercache缓存(String);有效的缓解数据库的压力;
4. 使用数据库的读写分离;
5. 定期将历时数据进行转储;
6. 进行分库分表操作(最后的操作);数据库服务器数量和运维都需要花费很多时间和精力;
17. char和varchar的区别?
char:定长,char的存取数度相对快 varchar:不定长,存取速度相对慢
18. 简述MySQL的执行计划?
在工作过程中,有时候会对慢查询进行调优。对于MySQL的SQL语句调优,MySQL本身提供了强大的explain关键字用于查询分析执行计划。
语法:从语法角度explain和describe/desc是相同的,只是一般更常用desc看表结构,explain来看查询计划。
19. 在对name做了唯一索引前提下,简述limit 1 作用
select * from tb where name = ‘Oldboy-Wupeiqi’
select * from tb where name = ‘Oldboy-Wupeiqi’
是这样的的,用where条件过滤出符合条件的数据的同时,进行计数,比如limit 1,那么在where过滤出第1条数据后,他就会直接把结果select出来返回给你,整个过程就结束了。
20. 1000w条数据,使用limit offset 分页时,为什么越往后翻越慢?如何解决?
当一个数据库表过于庞大,LIMIT offset, length中的offset值过大,则SQL查询语句会非常缓慢, 你需增加order by,并且order by字段需要建立索引。先查主键,在分页。
select * from tb where id in (
select id from tb where limit 10 offset 30
)
21. 什么是索引合并?
1.索引合并是把几个索引的范围扫描合并成一个索引。 2、索引合并的时候,会对索引进行并集,交集或者先交集再并集操作,以便合并成一个索引。 3、这些需要合并的索引只能是一个表的。不能对多表进行索引合并。简单的说,索引合并,让一条sql可以使用多个索引。对这些索引取交集,并集,或者先取交集再取并集。从而减少从数据表中取数据的次数,提高查询效率。
22. 什么是覆盖索引?
覆盖索引又可以称为索引覆盖。 解释一: 就是select的数据列只用从索引中就能够取得,不必从数据表中读取, 换句话说查询列要被所使用的索引覆盖。 解释二: 索引是高效找到行的一个方法,当能通过检索索引就可以读取想要的数据, 那就不需要再到数据表中读取行了。如果一个索引包含了(或覆盖了)满足查询语句中字段 与条件的数据就叫做覆盖索引。 解释三: 是非聚集组合索引的一种形式,它包括在查询里的Select、Join和Where子句用到的所有列 (即建立索引的字段正好是覆盖查询语句[select子句]与查询条件[Where子句]中所涉及的字段, 也即,索引包含了查询正在查找的所有数据)。
23. 简述数据库读写分离?
24. 简述数据库分库分表?(水平、垂直)
25. redis和memcached比较?
26. redis中数据库默认是多少个db 及作用?
27. python操作redis的模块?
28. 如果redis中的某个列表中的数据量非常大,如果实现循环显示每一个值?
29. redis如何实现主从复制?以及数据同步机制?
30. redis中的sentinel的作用?
31. 如何实现redis集群?
32. redis中默认有多少个哈希槽?
33. 简述redis的有哪几种持久化策略及比较?
34. 列举redis支持的过期策略(数据淘汰策略)。
35. MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中都是热点数据?
36. 写代码,基于redis的列表实现 先进先出、后进先出队列、优先级队列。
37. 如何基于redis实现消息队列?
38. 如何基于redis实现发布和订阅?以及发布订阅和消息队列的区别?
39. 什么是codis及作用?
40. 什么是twemproxy及作用?
41. 写代码实现redis事务操作。
42. redis中的watch的命令的作用?
43. 基于redis如何实现商城商品数量计数器?
44. 简述redis分布式锁和redlock的实现机制。
45. 什么是一致性哈希?Python中是否有相应模块?
46. 如何高效的找到redis中所有以aaa开头的key?
本文概述了常见的关系型数据库(如Oracle、MySQL的InnoDB引擎)和非关系型数据库(如MongoDB、Redis),介绍了MySQL不同数据库引擎的特点,如MyISAM、InnoDB和事务处理的原子性、一致性、隔离性和持久性。同时涵盖了数据范式、一对多和多对多关系应用、商品计数器实现、SQL基本操作、索引策略、慢查询优化和数据库设计实践。

598

被折叠的 条评论
为什么被折叠?



