数据库面试相关

文章目录

MyISAM与INNODB的区别

MyISAM强调效率,执行速度比InnoDB快,但是不支持事务,不能在表损坏后修复数据。

InnoDB不保存行号,就是在执行count操作时,需要扫描整个表,而MyISAM只要直接读出行号就行。注意:如果count与where组合使用两种引擎都是需要扫描整个表。

MyISAM用的是表锁,InnoDB用的是行锁,其实并不一定,因为当不确定扫描对象时,还是会锁住整张表

MyISAM适用:

1. count操作多

2. 插入少,查询多

3. 不需要事务

InnoDB适用:

1. 可靠性高,或者需要支持事务

2. 插入和查询都比较多

触发器

所谓触发器就是通过实践来触发操作的,作用是可以强化约束,保证数据的完整性和一致性,也可以跟踪数据库的操作从而不允许未经许可的更新和变化。比如一张数据表的更新会触发另一张表数据的更新等等。

存储过程

所谓存储过程就是预编译的SQL语句,支持模块化设计,说白了就是创建一次,在程序中可以被多次调用。例如某次操作需要执行多次SQL,就可以把这个SQL做一个存储过程。存储过程比单纯的SQL语句执行要快,因为它是预编译的。

事务

所谓事务就是绑定在一起的一个逻辑工作单元的SQL语句分组(通俗理解为绑定在一起的一堆SQL语句),如果某个SQL语句操作失败,那么所有的操作都将失败,将状态回滚到操作前的状态,即要么全部执行,要么全部不执行。它有四个特性:原子性、一致性、隔离性、持久性。

注意:原子性的不一定是一致性的,举个例子:转账,A转100给B,A的账户减少100,B的账户增加50,此时可以说是原子性的,但并不是一致性的(个人理解,有错望指出)。

索引

索引的优点当然是快速搜索,但是也不能滥用索引,因为创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加;索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大;当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

索引又分为聚类索引和非聚类索引。先简单讲讲个人的理解:

大专栏  数据库面试相关itle="聚类索引:">聚类索引:

聚类索引是索引的逻辑顺序决定表的物理顺序,可以拿查字典的例子说明,所有“z”开头的字都是放在字典的最后几页,“z”这个字母在字母表中顺序即为字典在正文中的顺序。

非聚类索引:

索引的逻辑顺序与表中的物理顺序并没有关系,再拿查字典的例子说明,对于一个不认识的字,我们只能根据偏旁去搜索,具有相同偏旁的字在字典正文中并不是顺序放在一起。

索引是通过二叉树的结构来存储的,对于聚类索引,叶子结点即为数据结点,对于非聚类索引,叶子结点还是索引结点,作为指针指向对应的数据。

具体描述,可参看http://www.cnblogs.com/aspnethot/articles/1504082.html

多个事务并发操作数据库时,可能会破坏数据的一致性,所以要加锁(废话)。

锁可以分为行级锁和表级锁。

行级锁是一种排它锁,防止其他事务同时修改此行;

表级锁笼统的讲是将整个表锁定(共享锁),若本事务时读操作,那么其他事务只能读不能写,若本事务时写操作,那么其他事务连读都不行。

乐观锁和悲观锁

悲观锁:由名字可以知道它是“悲观”的,会认为它的任何操作都可能导致数据冲突,所以在数据操作过程中,都会处于锁定状态。利用数据库的锁机制,因为只有用了数据库层的锁机制,才能保证数据的排他性。加for update命令。

乐观锁:相对悲观锁而言,乐观锁比较宽松,它是通过在数据库中添加version字段来解决悲观锁在长事务情况下带来的问题。举例子说明吧:事务A获取数据D时,同时获取它的版本号为1,此时事务B也获取了数据D,同时获取它的版本号为1,当事务A操作完数据D后,同时将它的版本号加1变成2,更新数据库时,会去判断当前的版本号是否大于数据库中的版本号,如果大于,就能成功更新数据,否则会被认为是过期数据,更新失败。此时数据D的版本号大于数据库中的版本号,所以成功更新;当事务B操作完数据D后,也将版本号加1变为2,此时当要更新数据库时,发现当前版本号与数据库中的版本号相等,说明是过期数据,所以更新失败。

悲观锁虽然能有效地控制数据的一致性,但是对于长事务而言,比较消耗数据库性能,此时就需要用乐观锁。hibernate在数据访问引擎中内置了乐观锁实现。

原文地址:https://www.cnblogs.com/dajunjun/p/11694112.html

时间: 2025-01-21 21:58:23

数据库面试相关的相关文章

【数据库】数据库面试知识点汇总

转自:https://www.cnblogs.com/wenxiaofei/p/9853682.html 数据库面试知识点汇总 一.基本概念 1.主键.外键.超键.候选键 超键:在关系中能唯一标识元组的属性集称为关系模式的超键.一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键.超键包含候选键和主键. 候选键:是最小超键,即没有冗余元素的超键. 主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合.一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Nul

nagios数据库 主机相关信息查询

mysql> select a.host_object_id,a.display_name,a.address,b.hostgroup_id,b.alias from nagios_hosts a,nagios_hostgroups b,nagios_hostgroup_members c where c.host_object_id=a.host_object_id and c.hostgroup_id=b.hostgroup_id order by b.hostgroup_id;+-----

oracle数据库事务相关【weber出品必属精品】

事务的概念:事务:一个事务由一组构成一个逻辑操作的DML语句组成 事务有开始有结束,事务以DML语句开始,以Conmmit和Rollback结束.以下情况会使得事务结束: 1. 执行COMMIT 或者 ROLLBACK 语句 2. 执行DDL或者 DCL语句 3. 用户退出 4. 系统崩溃 一个事务可以包含下列语句: 1. 对数据做出一致性修改的DML语句 2. 一个 DDL 语句 3. 一个 DCL语句 DDL与和DCL语句执行的过程: 1. 首先发出COMMIT; 2. 执行对数据字典的DM

数据库存储过程相关知识

(一) SET ANSI_NULLS {ON | OFF} 指定在对空值使用等于 (=) 和不等于 (<>) 比较运算符时,这些运算符的 SQL-92 遵从行为. 注释 SQL-92 标准要求对空值的等于 (=) 或不等于 (<>) 比较取值为 FALSE.当 SET ANSI_NULLS 为 ON 时,即使column_name 中存在空值,使用 WHERE column_name = NULL 的 SELECT 语句仍返回零行.即使column_name 中存在非空值,使用 W

CS数据库的相关操作

备注:我们对于CS数据库的操作多数情况下只是查询操作,尽量不要在数据库中直接修改记录的值 第一.首先备份数据库 1.进入mysql数据库 [[email protected] ~]# mysql -u root -p Enter password: Welcome to the MySQL monitor.  Commands end with ; or \g. Your MySQL connection id is 188 Server version: 5.1.61-log Source d

MediaProvider 数据库Audio相关表格对应关系

Android的MediaProvider提供了一系列的Audio,Video,image等表格,用于APP检索相关的音视频图片信息. 首先来看看Audio相关的表格: ×图中颜色相同的部分表示来自于同一张表格或者视图 ×红色表的名字表示视图 为了查询Audio相关的信息,Android提供了丰富的Uri.Uri和表格的对应关系如下: MediaProvider 数据库Audio相关表格对应关系,布布扣,bubuko.com

数据库面试系列大纲

数据库面试经常被问到的考点: 1.内连接和外连接,左外连接和右外连接,全外连接 2.视图是什么,视图的优点 3.索引的优点,建立索引的规则有哪些? 4.写sql语句:涉及到order by ,group by, having ,like ,limit  等 5.什么是慢查询?如何优化慢查询? 6.mysql性能优化 7.mysql的存储引擎都有哪些?这些存储引擎有什么区别? 后面会针对每个点写单独的博客...

数据库原理相关知识

数据库原理相关知识 made by @杨领well([email protected]) 一.基础知识 1. 简述数据库系统的特点. 数据结构化 : 这是数据库系统与文件系统的本质区别. 数据的共享性高.冗余度低且易扩充 : 数据共享可以大大减少数据冗余, 节约存储空间.数据共享还能够避免数据之间的不相容性和不一致性. 数据的独立性高 : 数据独立性包括物理独立性和逻辑独立性. 数据由数据库管理系统统一管理和控制 : 数据的安全性保护(保护数据以防止不合法使用造成的数据泄密和破坏).数据的完整性

mysql数据库相关基础与数据库的相关操作

mysql是目前主流的数据库管理系统之一,目前还是免费的. 数据库的发展史,基本概念就不再赘述,总之数据库就是存储数据的仓库,而我们所见到的所有其实都可以归类成数据. 什么是sql? SQL:(Structured Query Language)是结构化查询语言缩写.是一门专门与数据库管理系统打交道的语言. SQL语言:是关系型数据库的标准语言, 其主要用于存取数据,查询数据,更新数据和管理数据库系统等操作. 具体可以把SQL分为4个部分: 数据控制语言 ( DCL): 主要用于控制用户的访问权