MySQL常见问题

一、mysql如何作分页前端

mysql数据库作分页用limit关键字,它后面跟两个参数startIndex和pageSizemysql


二、mysql引擎有哪些,各自的特色是什么?程序员

innodb和myisam两个引擎,二者区别是
innodb支持事物,myisam不支持
innodb支持外键,myisam不支持
innodb不支持全文索引,myisam支持全文索引 
innodb提供提交、回滚、崩溃恢复能力的事物的安全能力,实现并发控制
myisam提供较高的插入和查询记录的效率,主要用于插入和查询redis


三、数据库怎么创建索引sql

create index account_index on `table name `(`字段名`(length)

 

四、一张表多个字段,怎么建立组合索引mongodb

create index account_index on `table name `(`字段名`,'字段名')

 

五、如何应对数据的高并发,大量的数据计算数据库

  1. 建立索引
  2. 数据库读写分离,两个数据库,一个做为写,一个做为读
  3. 外键去掉

 

 

4.django中orm表性能相关的
select_related:一对多使用,查询主动作连表
prefetch_related:多对多或者一对多的时候使用,不作连表,作屡次查询django

 

 

六、数据库内连表、左连表、右连表编程

内链接是根据某个条件链接两个表共有的数据
左链接是根据某个条件以及左边的表链接数据,右边的表没有数据的话则为null
右链接是根据某个条件以及右边的表链接数据,左边的表没有数据的话则为nullwindows

 

 

七、视图和表的区别

视图是已经编译好的sql语句,是基于sql语句的结果集的可视化的表,而表不是
视图是窗口,表示内容
视图没有实际的物理记录,而表有
视图的创建和删除只影响视图自己,不影响对应的表

 

 

八、关系型数据库的特色

数据集中控制
数据独立性高
数据共享性好
数据冗余度小
数据结构化
统一的数据保护能力

 

 

九、mysql数据库都有哪些索引

普通索引:普通索引仅有一个功能:加速查找
惟一索引:惟一索引两个功能:加速查找和惟一约束(可含null)
外键索引:外键索引两个功能:加速查找和惟一约束(不可为null)
联合索引:联合索引是将n个列组合成一个索引,应用场景:同时使用n列来进行查询

 

 

十、存储过程

存储过程不容许执行return语句,可是能够经过out参数返回多个值,存储过程通常是做为一个独立的部分来执行,存储过程是一个预编译的SQL语句。

十一、sql语句与数据库优化:

 

简答:

select句中避免使用 '*'
减小访问数据库的次数
删除重复记录
用where子句替代having子句
减小对表的查询
explain

深刻:

  1. 储存引擎选择:若是数据表须要事务处理,应该考虑使用 InnoDB,由于它彻底符合 ACID 特性。若是不须要事务处理,使用默 认存储引擎 MyISAM 是比较明智的
  2. 分表分库,主从
  3. 对查询进行优化,要尽可能避免全表扫描,首先应考虑在 where 及 order by 涉及的列上创建索引
  4. 应尽可能避免在 where 子句中对字段进行 null 值判断,不然 将致使引擎放弃使用索引而进行全表扫描
  5. 应尽可能避免在 where 子句中使用 != 或 <> 操做符,不然将 引擎放弃使用索引而进行全表扫描
  6. 应尽可能避免在 where 子句中使用 or 来链接条件,若是一个 字段有索引,一个字段没有索引,将致使引擎放弃使用索引而进行全 表扫描
  7. Update 语句,若是只更改 一、2 个字段,不要 Update 所有字 段,不然频繁调用会引发明显的性能消耗,同时带来大量日志
  8. 对于多张大数据量(这里几百条就算大了)的表 JOIN,要先 分页再 JOIN,不然逻辑读会很高,性能不好。

数据库优化:

  1. 1优化索引、SQL 语句、分析慢查询;
  2. 设计表的时候严格根据数据库的设计范式来设计数据库;
  3. 使用缓存,把常常访问到的数据并且不须要常常变化的数据 放在缓存中,能 节约磁盘 IO;
  4. 优化硬件;采用 SSD,使用磁盘队列技术(RAID0,RAID1,RDID5) 等;
  5. 采用 MySQL 内部自带的表分区技术,把数据分层不一样的文件, 可以提升磁 盘的读取效率;
  6. 垂直分表;把一些不常常读的数据放在一张表里,节约磁盘 I/O;
  7. 主从分离读写;采用主从复制把数据库的读操做和写入操做 分离开来;
  8. 分库分表分机器(数据量特别大),主要的的原理就是数据 路由;
  9. 选择合适的表引擎,参数上的优化;
  10. 进行架构级别的缓存,静态化和分布式;
  11. 不采用全文索引;
  12. 采用更快的存储方式,例如 NoSQL 存储常常访问的数

 

十二、char和vachar区别:

char是固定长度,存储须要空间12个字节,处理速度比vachar快,费内存空间
vachar是不固定长度,须要存储空间13个字节,节约存储空间

 

 

1三、Mechached与redis

mechached:只支持字符串,不能持久化,数据仅存在内存中,宕机或重启数据将所有失效
不能进行分布式扩展,文件没法异步法。
优势:mechached进程运行以后,会预申请一块较大的内存空间,本身进行管理。
redis:支持服务器端的数据类型,redis与memcached相比来讲,拥有更多的数据结构和并发支持更丰富的数据操做,可持久化。
五大类型数据:string、hash、list、set和有序集合,redis是单进程单线程的。
缺点:数据库的容量受到物理内存的限制。

 

 

1四、sql注入

sql注入是比较常见的攻击方式之一,针对编程员编程的疏忽,经过sql语句,实现帐号没法登录,甚至篡改数据库。
防止:凡涉及到执行sql中有变量时,切记不要用拼接字符串的方法

 

 

1五、什么是触发器

触发器是一种特殊的存储过程,主要是经过事件来触发而被执行的,他能够强化约束,来维护数据库的完整性和一致性,能够跟踪数据内的操做从而不容许未经许可的 更新和变化,能够联级运算。
只有表支持触发器,视图不支持触发器

1六、游标是什么?

是对查询出来的结果集做为一个单元来有效的处理,游标能够定在该单元中的特定行,从结果集的当前行检索一行或多行,能够对结果集当前行作修改,
通常不使用游标,可是须要逐条处理数据的时候,游标显得十分重要

 

 

1七、 数据库支持多有标准的SQL数据类型,重要分为三类

数值类型(tinyint,int,bigint,浮点数,bit)
字符串类型(char和vachar,enum,text,set)
日期类型(date,datetime,timestamp)

 

 

1八、mysql慢查询

慢查询对于跟踪有问题的查询颇有用,能够分析出当前程序里哪些sql语句比较耗费资源
慢查询定义:
指mysql记录全部执行超过long_query_time参数设定的时间值的sql语句,慢查询日志就是记录这些sql的日志。
mysql在windows系统中的配置文件通常是my.ini找到mysqld
log-slow-queries = F:\MySQL\log\mysqlslowquery.log 为慢查询日志存放的位置,通常要有可写权限
long_query_time = 2 2表示查询超过两秒才记录

1九、memcached命中率

命中:能够直接经过缓存获取到须要的数据
不命中:没法直接经过缓存获取到想要的数据,须要再次查询数据库或者执行其余的操做,缘由多是因为缓存中根本不存在,或者缓存已通过期
缓存的命中率越高则表示使用缓存的收益越高,应额用的性能越好,抗病发能力越强
运行state命令能够查看memcached服务的状态信息,其中cmd—get表示总的get次数,get—hits表示命中次数,命中率=get—hits / cmd—get

20、Oracle和MySQL该如何选择,为何?

他们都有各自的优势和缺点。考虑到时间因素,我倾向于MySQL
选择MySQL而不选Oracle的缘由
MySQL开源
MySQL轻便快捷
MySQL对命令行和图形界面的支持都很好
MySQL支持经过Query Browser进行管理

 

https://www.cnblogs.com/songyifan427/ 步履不停总结

 

2一、什么状况下适合创建索引?

1.为常常出如今关键字order by、group by、distinct后面的字段,创建索引
2.在union等集合操做的结果集字段上,创建索引,其创建索引的目的同上
3.为常常用做查询选择的字段,创建索引
4.在常常用做表链接的属性上,创建索引

2二、数据库底层是用什么结构实现的,你大体画一下:

底层用B+数实现,结构图参考: 
http://blog.csdn.net/cjfeii/article/details/10858721
http://blog.csdn.net/tonyxf121/article/details/8393545

 

 

2三、sql语句应该考虑哪些安全性?

1.防止sql注入,对特殊字符进行转义,过滤或者使用预编译的sql语句绑定变量
2.最小权限原则,特别是不要用root帐户,为不一样的类型的动做或者组建使用不一样的帐户
3.当sql运行出错时,不要把数据库返回的错误信息所有显示给用户,以防止泄漏服务器和数据库相关信息

 

 

2四、数据库事物有哪几种?

  1. 隔离性:事务的执行不受其余事务的干扰,事务 执行的中间结果对其余事务必须是透明的。
  2. 持久性:对于任意已提交事务,系统必须保证该 事务对数据库的改变不被丢失,即便数据库出现故障
  3. 一致性:几个并行执行的事务,其执行结果必 须与按某一顺序串行执行的结果相一致。
  4. 原子性:事务中的所有操做在数据库中是不 可分割的,要么所有完成,要么均不执行。

 

 

2五、MySQ数据表在什么状况下容易损坏?

服务器忽然断电致使数据文件损坏
强制关机,没有先关闭mysq服务器等

 

 

2六、drop,delete与truncate的区别

drop直接删除表
truncate删除表中数据,再插入时自增加id又从1开始 
delete删除表中数据,能够加where子句

 

 

2七、数据库范式

  1. 第一范式:就是无重复的列
  2. 第二范式:就是非主属性非部分依赖于主关键字
  3. 第三范式:就是属性不依赖于其余非主属性(消除冗余)

 

 

2八、MySQL锁类型

根据锁的类型分:能够分为共享锁、排他锁、意向共享锁和意向排他锁
根据锁的粒度分:能够分为行锁、表锁
对于mysql而言,事务机制更可能是靠底层的存储引擎来实现的,所以,mysql层面只有表锁,
而支持事物的innodb存储引发则实现了行锁(在行相应的索引记录上的锁)
说明:对于更新操做(读不上锁),只有走索引才可能上行锁
MVCC(多版本并发控制)并发控制机制下,任何操做都不会阻塞读取操做,
读取操做也不会阻塞任何操做,只由于读不上锁
共享锁:由读表操做加上的锁,加锁后其余用户只能获取该表或行的共享锁,不能获取排他锁,
也就是说只能读不能写
排他锁:由写表操做加上的锁,加锁后其余用户不能获取该表或该行的任何锁,典型mysql事物中的更新操做
意向共享锁(IS):事物打算给数据行加行共享锁,事物在给一个数据行加共享锁前必须先取得该表的IS锁
意向排他锁(IX):事物打算给数据行加行排他锁,事物在给一个数据行家排他锁前必须先取得该表的IX锁

 

 

2九、如何解决MYSQL数据库中文乱码问题?

1.在数据库安装的时候指定字符集
2.若是在按完了之后能够更改配置文件
3.创建数据库时候:指定字符集类型
4.建表的时候也指定字符集

 

 

30、数据库应用系统设计

1.规划 
2.需求分析
3.概念模型设计
4.逻辑设计
5.物理设计
6. 程序编制及调试
7.运行及维护

 

31.说一下 MySQL 数据库存储的原理?

过程是一个可编程的函数,它在数据库中建立并保存。

它能够有 SQL 语句和一些特殊的控制结构组成。

当但愿在不一样的应用 程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非 常有用的。

数据库中的存储过程能够看作是对编程中面向对象方法的 模拟。它容许控制数据的访问方式。

存储过程一般有如下优势:

  1. 存储 能实现较快的执行速度。
  2. 存储过程容许标准组件是编程。
  3. 存储过程能够用流控制语句编写,有很强的灵活性,能够完成 复杂的判断和较复杂的运算。
  4. 存储 可被做为一种安全机制来充分利用。
  5. 存储过程能过减小网络流量。

 

3二、readis 和 mysql 的区别

readis 是内存数据库,数据保存在内存中,速度快。 mysql 是关系型数据库,持久化存储,存放在磁盘里面,功能强 大。检索的话,会涉及到必定的 IO,数据访问也就慢。

 

3二、redis 受攻击怎么办?

主从 持久化存储 Redis 不以 root 帐户启动 设置复杂密码 不容许 key 方式登陆

 

3二、MongoDB是什么

MongoDB 是一个面向文档的数据库系统。使用 C++编写,不支持 SQL,但有本身功能强大的查询语法。

MongoDB 使用 BSON 做为数据存储和传输的格式。BSON 是一种类 似 JSON 的二进制序列化文档,支持嵌套对象和数组。

MongoDB 很像 MySQL,document 对应 MySQL 的 row,collection 对应 MySQL 的 table 应用场景:

  1. 网站数据:mongo 很是适合实时的插入,更新与查询,并具 备网站实时数据存储所需的复制及高度伸缩性。
  2. 缓存:因为性能很高,mongo 也适合做为信息基础设施的缓 存层。在系统重启以后,由 mongo 搭建的持久化缓存能够避免下层的 数据源过载。
  3. 大尺寸、低价值的数据:使用传统的关系数据库存储一些数 据时可能会比较贵,在此以前,不少程序员每每会选择传统的文件进 行存储。
  4. 高伸缩性的场景:mongo 很是适合由数十或者数百台服务器 组成的数据库。
  5. 用于对象及 JSON 数据的存储:mongo 的 BSON 数据格式很是 适合文档格式化的存储及查询。
  6. 重要数据:mysql,通常数据:mongodb,临时数据:memcache
  7. 对于关系数据表而言,mongodb 是提供了一个更快速的视图 view;而对于 PHP 程序而言,mongodb 能够做为一个持久化的数组来 使用,而且这个持久化的数组还能够支持排序、条件、限制等功能。
  8. 将 mongodb 代替 mysql 的部分功能,主要一个思考点就是: 把 mongodb 看成 mysql 的一个 view(视图),view 是将表数据整合 成业务数据的关键。好比说对原始数据进行报表,那么就要先把原始 数据统计后生成 view,在对 view 进行查询和报表。

不适合的场景:

  1. 高度事物性的系统:例如银行或会计系统。传统的关系型数 据库目前仍是更适用于须要大量原子性复琐事务的应用程序。
  2. 传统的商业智能应用:针对特定问题的 BI 数据库会对产生 高度优化的查询方式。对于此类应用,数据仓库多是更合适的选择。
  3. 须要 SQL 的问题
  4. 重要数据,关系数据 优势:弱一致性(最终一致),更能保证用户的访问速度 文档结构的存储方式,可以更便捷的获取数 内置 GridFS,高效存储二进制大对象 (好比照片和视频) 支持复制集、主备、互为主备、自动分片等特性 动态查询 全索引支持,扩展到内部对象和内嵌数组

缺点:不支持事务 MongoDB 占用空间过大 维护工具不够成熟

 

3三、 Mysql 和 redis 提升可用性

MySQL Replication 是 MySQL 官方提供的主从同步方案,用于将 一个 MySQL 实例的数据,同步到另外一个实例中。Replication 为保证 数据安全作了重要的保证,也是如今运用最广的 MySQL 容灾方案。 Replication 用两个或以上的实例搭建了 MySQL 主从复制集群,提供 单点写入,多点读取的服务,实现了读的 scale out. Sentinel 是 Redis 官方为集群提供的高可用解决方案。 在实际 项目中可使用 sentinel 去作 redis 自动故障转移,减小人工介入 的工做量。另外 sentinel 也给客户端提供了监控消息的通知,这样 客户端就可根据消息类型去判断服务器的状态,去作对应的适配操做。 下面是 Sentinel 主要功能列表: Monitoring:Sentinel 持续检查集群中的 master、slave 状态, 判断是否存活。 Notification:在发现某个 redis 实例死的状况下,Sentinel 能经过 API 通知系统管理员或其余程序脚本。 Automatic failover:若是一个 master 挂掉后,sentinel 立马 启动故障转移,把某个 slave 提高为 master。其余的 slave 从新配 置指向新 master。 Configuration provider:对于客户端来讲 sentinel 通知是有效可 信赖的。客户端会链接 sentinel 去请求当前 master 的地址,一旦发 生故障 sentinel 会提供新地址给客户端。

 

3四、数据库索引是什么

数据库索引,是数据库管理系统中一个排序的数据结构,以协助 快速查询、更新数据库表中数据。索引的实现一般使用 B_TREE。 B_TREE 索引加速了数据访问,由于存储引擎不会再去扫描整张表得 到须要的数据;相反,它从根节点开始,根节点保存了子节点的指针, 存储引擎会根据指针快速寻找数据。

 

3五、Redis mongodb 优缺点

MongoDB 和 Redis 都是 NoSQL,采用结构型数据存储。两者在使 用场景中,存在必定的区别,这也主要因为两者在内存映射的处理过 程,持久化的处理方法不一样。MongoDB 建议集群部署,更多的考虑到 集群方案,Redis 更偏重于进程顺序写入,虽然支持集群,也仅限于 主-从模式.

Redis 优势:

  1. 读写性能优异
  2. 支持数据持久化,支持 AOF 和 RDB 两种持久化方式
  3. 支持主从复制,主机会自动将数据同步到从机,能够进行读写 分离。
  4. 数据结构丰富:除了支持 string 类型的 value 外还支持 string、hash、set、sortedset、list 等数据结构。

缺点:

  1. Redis 不具有自动容错和恢复功能,主机从机的宕机都会致使 前端部分读写请求失败,须要等待机器重启或者手动切换前端的 IP 才能恢复。
  2. 主机宕机,宕机前有部分数据未能及时同步到从机,切换 IP 后还会引入数据不一致的问题,下降了系统的可用性。
  3. Redis 的主从复制采用全量复制,复制过程当中主机会 fork 出 一个子进程对内存作一份快照,并将子进程的内存快照保存为文件发 送给从机,这一过程须要确保主机有足够多的空余内存。若快照文件 较大,对集群的服务能力会产生较大的影响,并且复制过程是在从机 新加入集群或者从机和主机网络断开重连时都会进行,也就是网络波 动都会形成主机和从机间的一次全量的数据复制,这对实际的系统运 营形成了不小的麻烦。
  4. Redis 较难支持在线扩容,在集群容量达到上限时在线扩容会 变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足 够的空间,这对资源形成了很大的浪费。 优势:弱一致性(最终一致),更能保证用户的访问速度 文档结构的存储方式,可以更便捷的获取数 内置 GridFS,高效存储二进制大对象 (好比照片和视频) 支持复制集、主备、互为主备、自动分片等特性 动态查询 全索引支持,扩展到内部对象和内嵌数组

缺点:不支持事务 MongoDB 占用空间过大 维护工具不够成熟

 

3六、数据库负载均衡

负载均衡集群是由一组相互独立的计算机系统构成,经过常规网 络或专用网络进行链接,由路由器衔接在一块儿,各节点相互协做、共 同负载、均衡压力,对客户端来讲,整个群集能够视为一台具备超高 性能的独立服务器。

(1)实现原理 实现数据库的负载均衡技术,首先要有一个能够控制链接数据库 的控制端。在这里,它截断了数据库和程序的直接链接,由全部的程 序来访问这个中间层,而后再由中间层来访问数据库。这样,咱们就 能够具体控制访问某个数据库了,而后还能够根据数据库的当前负载 采起有效的均衡策略,来调整每次链接到哪一个数据库。

(2)实现多据库数据同步 对于负载均衡,最重要的就是全部服务器的数据都是实时同步的。 这是一个集群所必需的,由于,若是数不据实时、不一样步,那么用户 从一台服务器读出的数据,就有别于从另外一台服务器读出的数据,这 是不能容许的。因此必须实现数据库的数据同步。这样,在查询的时 候就能够有多个资源,实现均衡。比较经常使用的方法是 Moebius for SQL Server 集群,Moebius for SQL Server 集群采用将核心程序驻留在 每一个机器的数据库中的办法,这个核心程序称为 Moebius for SQL Server 中间件,主要做用是监测数据库内数据的变化并将变化的数 据同步到其余数据库中。数据同步完成后客户端才会获得响应,同步 过程是并发完成的,因此同步到多个数据库和同步到一个数据库的时 间基本相等;另外同步的过程是在事务的环境下完成的,保证了多份 数据在任什么时候刻数据的一致性。正由于 Moebius 中间件宿主在数据 库中的创新,让中间件不但能知道数据的变化,并且知道引发数据变 化的 SQL 语句,根据 SQL 语句的类型智能的采起不一样的数据同步的策 略以保证数据同步成本的最小化。 数据条数不多,数据内容也不大,则直接同步数据 数据条数不多,可是里面包含大数据类型,好比文本,二进制数 据等,则先对数据进行压缩而后再同步,从而减小网络带宽的占用和 传输所用的时间。 数据条数不少,此时中间件会拿到形成数据变化的 SQL 语句,然 后对 SQL 语句进行解析,分析其执行计划和执行成本,并选择是同步 数据仍是同步 SQL 语句到其余的数据库中。此种状况应用在对表结构 进行调整或者批量更改数据的时候很是有用。

(3)优缺点 优势:

  1. 扩展性强:当系统要更高数据库处理速度时,只要简单地增 加数据库服务器就 能够获得扩展。
  2. 可维护性:当某节点发生故障时,系统会自动检测故障并转 移故障节点的应用,保证数据库的持续工做。
  3. 安全性:由于数据会同步的多台服务器上,能够实现数据集 的冗余,经过多份数据来保证安全性。另外它成功地将数据库放到了 内网之中,更好地保护了数据库的安全性。
  4. 易用性:对应用来讲彻底透明,集群暴露出来的就是一个 IP 缺点: (1) 不可以按照 Web 服务器的处理能力分配负载。 (2) 负载均衡器(控制端)故障,会致使整个数据库系统瘫痪。

 

3七、MySQL 集群的优缺点

优势:

  1. 99.999%的高可用性
  2. 快速的自动失效切换
  3. 灵活的分布式体系结构,没有单点故障
  4. 高吞吐量和低延迟
  5. 可扩展性强,支持在线扩容

缺点:

  1. 存在不少限制,好比:不支持外键
  2. 部署、管理、配置很复杂
  3. 占用磁盘空间大,内存大
  4. 备份和恢复不方便
  5. 重启的时候,数据节点将数据 load 到内存须要很长时间

 

3八、redis 有多少个库?

Redis 一个实例下有 16 个库

 

3九、redis 缓存命中率计算?

Redis 提供了 INFO 这个命令,可以随时监控服务器的状态,只 用 telnet 到对应服务器的端口,执行命令便可:

telnet localhost 6379 info

在输出的信息里面有这几项和缓存的状态比较有关系:

keyspace_hits:14414110 keyspace_misses:3228654 used_memory:433264648 expired_keys:1333536 evicted_keys:1547380

经过计算 hits 和 miss,咱们能够获得缓存的命中率:14414110 / (14414110 + 3228654) = 81% ,一个缓存失效机制,和过时时间 设计良好的系统,命中率能够作到 95%以上

 

40、sqlserver,MySQL ,Oracle http,redis,https 默认端 口号?

  • sqlserver:1433
  • MySQL:3306
  • Oracle :1521
  • http:80
  • https:443
  • redis:6379
相关文章
相关标签/搜索