Mysql个人总结----03(数据库常见面试题)

drop、truncate、delete的区别(面试)

1、drop(DDL)
	   1)、drop语句将删除表的结构,以及被依赖的约束(constrain),触发器(trigger),索引(index);
	   2)、drop也属于DDL语言,立即执行,执行速度最快 
	   3)、删除内容和定义,释放空间。
2、truncate(DDL)
	   1)、只能操作表,将表中数据全部删除,在功能上和不带where子句的delete语句相同(重置索引)
	   2)、tuncate是DDL语言, 操作立即生效,自动提交,原数据不放到rollback segment中,不能回滚. 操作不触发trigger. 
	   3)、删除内容、释放空间但不删除表的结构(定义)。
	   tips:truncate 不能删除行数据,要删就要把表清空
	   truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger. 
3、delete(DML)
	   1)、虽然也是删除整个表的数据,但过程是系统一行一行地删,效率较truncate低(并不重置索引)
	   2)、delete 语句每次删除一行,并在事务日志中为所删除的每行记录一项。所以可以对delete操作进行roll back

什么是数据库事务以及四个性质

事务是一个工作的逻辑单元,这个单元必须是全部运行或者全部取消,不能接受中间状态。在事务中所有的 SQL 语句必须成功完成。如果 SQL 语句中的任何一个失败,那么整个事务必须回滚到原始的数据库状态,这个状态也就是该事务开始之前的状态。一个成功事务是将数据库从一个一致性状态修改到另一个一致性状态。在数据库的一致性状态里,所有数据的完整性必须满足。
严格上来说,事务必须同时满足4个特性,即通常所说事务的ACID特性。虽然理论上定义了严格的事务要求,但是数据库厂商出于各种目的并没有严格满足事务的ACID标准。例如,对于MYSQL的NDB Cluster引擎,虽然支持事务,但是不满足D的要求,即持久性的要求。对于Oracle数据库来说,其默认的事务隔离级别为READ COMMITTED,不满足I的要求,即隔离性的要求。对于InnoDB存储引擎而言,默认的事务隔离级别是READ REPRATABLE,完全遵循和满足事务的ACID特性。

A(atomicity),原子性。原子性指整个数据库事务是不可分割的工作单位。只有使事务中所有的数据库操作都执行成功,整个事务的执行才算成功。事务中任何一个SQL语句执行失败,那么已经执行成功的SQL语句也必须撤销,数据库状态应该退回到事务前的状态。(通过日志)

C(consistency),一致性。一致性是指事务将数据库从一种状态转变为另一种状态。在事务的开始之前和事务结束以后,数据库的完整性约束没有被破坏。

I(isolation),隔离性。隔离性还有其他的称呼,如并发控制、可串行化、锁。事务的隔离性要求每个读写事务的对象与其他事务的操作对象能互相分离,即该事务提交前对其他事务都不可见,这通常使用锁来实现。数据库系统中提供了一种粒度锁的策略,允许事务仅锁住一个实体对象的子集,以此来提高事务之间的并发度。(如果是全表锁,事务之间基本就无法实现并发,但是如果只锁住表中处理的行,可以提高事务的并发度)
四个级别
https://blog.csdn.net/yangyatou1991/article/details/71374969

D(durability),持久性。事务一旦提交,其结果就是永久性的。即使发生宕机等故障,数据库也能将数据恢复。需要注意的是,持久性只能从事务本身的角度来保证结果的永久性,如事务提交后,所有的变化都是永久的,即使当数据库由于崩溃而需要恢复时,也能保证恢复后提交的数据都不会丢失。

事务的通俗理解

【事务】
是用户定义的一个数据库操作序列,这些操作要么都做,要么都不做,是一个不可分割的工作单位。
在关系数据库中,一个事务可以是一条SQL语句,也可以是多条SQL语句。(事务的通俗理解)
如果只是查询操作,不牵扯对数据库内容的更改,不需要开启事务
【举个例子】
假设,定义了一个银行转账的事务,以两个银行账号里面的金钱为例,里面的钱要么一个增加多少,一个减少多少,要么就是都不增不减,不可能一个多但另一个不减少

原子性、一致性、隔离性的联系

https://www.zhihu.com/question/30272728

很容易混淆的一致性和原子性

原子性和一致性的的侧重点不同:原子性关注状态,要么全部成功,要么全部失败,不存在部分成功的状态。而一致性关注数据的可见性,中间状态的数据对外部不可见,只有最初状态和最终状态的数据对外可见
一致性是指数据处于一种语义上的有意义且正确的状态。一致性是对数据可见性的约束,保证在一个事务中的多次操作的数据中间状态对其他事务不可见的。因为这些中间状态,是一个过渡状态,与事务的开始状态和事务的结束状态是不一致的。

举个例子,张三给李四转账100元。事务要做的是从张三账户上减掉100元,李四账户上加上100元。一致性的含义是其他事务要么看到张三还没有给李四转账的状态,要么张三已经成功转账给李四的状态,而对于张三少了100元,李四还没加上100元这个中间状态是不可见的。
隔离性是多个事物的时候, 相互不能干扰,一致性是要保证操作前和操作后数据或者数据结构的一致性,而我提到的事务的一致性是关注数据的中间状态,也就是一致性需要监视中间状态的数据,如果有变化,即刻回滚

事务的(ACID)特性是由关系数据库管理系统(RDBMS,数据库系统)来实现的。数据库管理系统采用日志来保证事务的原子性、一致性和持久性。日志记录了事务对数据库所做的更新,如果某个事务在执行过程中发生错误,就可以根据日志,撤销事务对数据库已做的更新,使数据库退回到执行事务前的初始状态。数据库管理系统采用锁机制来实现事务的隔离性。当多个事务同时更新数据库中相同的数据时,只允许持有锁的事务能更新该数据,其他事务必须等待,直到前一个事务释放了锁,其他事务才有机会更新该数据。

MYSQL的事务处理主要有两种方法

 1.用begin,rollback,commit来实现
    begin开始一个事务
    rollback事务回滚
    commit 事务确认
 2.直接用set来改变mysql的自动提交模式
    mysql默认是自动提交的,也就是你提交一个query,就直接执行!可以通过
    set autocommit = 0 禁止自动提交
    set autocommit = 1 开启自动提交
   来实现事务的处理

mysql相比较其他数据库的优势(面试常问)

1、mysql开放源代码且无版权制约,自主性及使用成本低。(免费)
2、mysql软件体积小,安装使用简单,并且易于维护,安装及维护成本低。
3、mysql支持多种操作系统,提供多种API接口,支持多种开发语言
4、mysql性能卓越,服务稳定,很少出现异常宕机。
5、未完待续……

关系型数据库有什么特点及举例

**特点:**
1、关系型数据库,是指采用了关系模型来组织数据的数据库;
2、关系型数据库的最大特点就是事务的一致性;
3、简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。

例如:Oracle、mysql、SQLserver
**关系模型中常用的概念:**

关系:一张二维表,每个关系都具有一个关系名,也就是表名
元组:二维表中的一行,在数据库中被称为记录
属性:二维表中的一列,在数据库中被称为字段
域:属性的取值范围,也就是数据库中某一列的取值限制
关键字:一组可以唯一标识元组的属性,数据库中常称为主键,由一个或多个列组成

关系模式:指对关系的描述。其格式为:关系名(属性1,属性2, ... ... ,属性N),在数据库中成为表结构

`
关系型数据库的优点:

1.容易理解:二维表结构是非常贴近逻辑世界的一个概念,关系模型相对网状、层次等其他模型来说更容易理解
2.使用方便:通用的SQL语言使得操作关系型数据库非常方便
3.易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率
4、支持SQL,可用于复杂的查询。

·
关系型数据库存在的问题

1.网站的用户并发性非常高,往往达到每秒上万次读写请求,对于传统关系型数据库来说,硬盘I/O是
一个很大的瓶颈
2.网站每天产生的数据量是巨大的,对于关系型数据库来说,在一张包含海量数据的表中查询,效率是非常低的
3.在基于web的结构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。当需要对数据库系统进行升级和扩展时,往往需要停机维护和数据迁移。
4.性能欠佳:在关系型数据库中,导致性能欠佳的最主要原因是多表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询。为了保证数据库的ACID特性,必须尽量按照其要求的范式进行设计,关系型数据库中的表都是存储一个格式化的数据结构。

非关系型数据库有什么特点及举例

1、使用键值对存储数据;
2、分布式;
3、一般不支持ACID特性;
4、非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。
MongoDb、redis、HBase

非关系型数据库优点

1、无需经过sql层的解析,读写性能很高;
2、基于键值对,数据没有耦合性,容易扩展;
3、存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,而关系型数据库则只支持基础类型。

非关系型数据库的缺点

1、不提供sql支持,学习和使用成本较高;
2、无事务处理,附加功能bi和报表等支持也不好;

数据库和数据仓库的区别

   数据仓库:是数据库概念的升级。从逻辑上理解,数据库和数据仓库没有区别,都是通过数据库软件实现存放数据的地方,只不过从数据量来说,数据仓库要比数据库更庞大德多。数据仓库主要用于数据挖掘和数据分析,辅助领导做决策;
   凡是跟业务有关应用挂钩的,我们都使用数据库。
   由于数据库跟业务应用挂钩的,所以一个数据库不可能装下一家公司的所有数据。数据库的表设计往往是针对某一个应用进行设计的。比如刚刚的登录功能,这张user表上就只有这两个字段,没有别的字段了。到那时这张表符合应该,没有问题,但是这张表不符合分析。比如我想知道在哪个时间段,用户的量最多?哪个用户一年购物最多?诸如此类的指标。那就要从新设计数据库的表结构了。对于数据分析和数据挖掘,我们引入了数据仓科概念。数据仓库的表结构是依照分析需求,分析维度,分析指标进行设计的。
   数据库与数据仓库的区别实际讲的是OLTP与OLAP的区别。 
   操作型处理,叫联机事务处理OLTP(On-Line Transaction Processing),也可以称面向交易的处理系统,它是针对具体业务在数据库联机的日常操作,通常对少数记录进行查询、修改。用户较为关心操作的响应时间、数据的安全性、完整性和并发的支持用户数等问题。传统的数据库系统作为数据管理的主要手段,主要用于操作型处理。
   分析型处理,叫联机分析处理OLAP(On-Line Analytical Processing)一般针对某些主题历史数据进行分析,支持管理决策。

内连接、外链接(左连接、右连接、全连接)、笛卡尔积

内连接、自连接inner join:
内连接查询只能查询出匹配的记录,匹配不上的记录时无法查询出来的
外连接:
 - 左连接(inner join/join):左连接就是以左边的表(left join 左边的表)为主表,即使有些记录关联不上,主表的信息也能全部查询出来,也就是左边的表数据全部展示,右边表的数据复合条件的展示,不符合条件的以空值代替
 - 右连接(左外连接left outer join):与左连接相反
 - 全连接(full outer join):左连接和右连接的并集( M+N)

笛卡尔乘积cross join(M*N):加上where条件和inner join效果一样(用的比较少)

什么是主键?什么是外键?他们的作用?(面试)

主键:能够唯一表示数据表中的每个记录的字段或者字段的组合就称为主键。一个主键是唯一识别一个表的每一行记录,但这只是其作用的一部分,主键的主要作用是将记录和存放在其他表中的数据进行关联,在这一点上,主键是不同表中各记录间的简单指针,主键约整就是确定表中的每一条记录,主键不能是空值,唯一约束是用于指定一个或多个列的组合值具有唯一性,以防止在列中输入重复的值,所以,主键的值对用户而言是没有什么意义,并且和它赋予的值也没有什么特别联系。
外键:
若有两个表A,B,C是A的主键,而B中也有C字段,则C就是表B的外键,外键约束主要用来维护两个表之间数据的一致性。
A为基本表,B为信息表。
在数据库中,常常不只是一个表,这些表之间也不是相互独立的,不同的表之间需要建立一种关系,才能将它们的数据相互沟通,而在这个沟通过程中,就需要表中有一个字段作为标志,不同的记录对应的字段取值不能相同,也不能是空白的,通过这个字段中不同的值可以区别各条记录,就像我们区别不同的人,每个人都有名字,但它却不能作为主键,因为人名很容易出现重复,而身份证号是每个人都不同的,所以可以根据它来区别不同的人,数据库的表中作为主键的段段就要像人的身份证号一样,必须是每个记录的值都不同,这才能根据主键的值来确定不同的记录。
关系:外键一定是另外某个表的主键。

触发器的作用(待续----)

大致理解为当对一个表进行操作时会激活已经加的触发器执行,将记录加载载到日志中(另一个表中)

分页查询(面试)

SQL server  top
oracle row_number
mysql limit

优化数据库

主从分离  两个服务器  表1 读  表2 写  定期同步数据(很短时间)

待看-----
最全MySQL面试题和答案
https://www.cnblogs.com/lijiasnong/p/9963905.html (大大……大佬QAQ)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值