数据库小知识整理

1、MySQL中myisam与innodb的区别,至少5点

(1)、问5点不同;

1>.InnoDB支持事物,而MyISAM不支持事物

2>.InnoDB支持行级锁,而MyISAM支持表级锁

3>.InnoDB支持MVCC, 而MyISAM不支持

4>.InnoDB支持外键,而MyISAM不支持

5>.InnoDB不支持全文索引,而MyISAM支持。

Inn MyISAM 和InnoDB 讲解:DB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。

基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。以下是一些细节和具体实现的差别:◆1.InnoDB不支持FULLTEXT类型的索引。◆2.InnoDB 中不保存表的具体行数,也就是说,执行select count(*)from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。◆3.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。◆4.DELETE FROMtable时,InnoDB不会重新建立表,而是一行一行的删除。◆5.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。

另外,InnoDB表的行锁也不是绝对的,假如在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 wherename like “%aaa%”两种类型最主要的差别就是Innodb支持事务处理与外键和行级锁。而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用。

例:一张表,里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把Mysql重启,再insert一条记录,这条记录的ID是18还是15 ?

答:

(1)如果表的类型是MyISAM,那么是18。

因为MyISAM表会把自增主键的最大ID记录到数据文件里,重启MySQL自增主键的最大ID也不会丢失。

(2)如果表的类型是InnoDB,那么是15。

InnoDB表只是把自增主键的最大ID记录到内存中,所以重启数据库或者是对表进行OPTIMIZE操作,都会导致最大ID丢失。

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

(1)防止sql注入,对特殊字符进行转义,过滤或者使用预编译的sql语句绑定变量。

(2)最小权限原则,特别是不要用root账户,为不同的类型的动作或者组建使用不同的账户。

(3)当sql运行出错时,不要把数据库返回的错误信息全部显示给用户,以防止泄漏服务器和数据库相关信息。

3.简单描述mysql中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响。

(1)索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。

(2)普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。

(3)普通索引允许被索引的数据列包含重复的值,如果能确定某个数据列只包含彼此各不相同的值,在为这个数据索引创建索引的时候就应该用关键字UNIQE把它定义为一个唯一所以,唯一索引可以保证数据记录的唯一性。

(4)主键,一种特殊的唯一索引,在一张表中只能定义一个主键索引,逐渐用于唯一标识一条记录,是用关键字PRIMARY KEY来创建。

(5)索引可以覆盖多个数据列,如像INDEX索引,这就是联合索引。

(6)索引可以极大的提高数据的查询速度,但是会降低插入删除更新表的速度,因为在执行这些写操作时,还要操作索引文件。

3.简述项目中优化sql语句执行效率的方法,从哪些方面。sql语句性能如何分析?

答:

(1)尽量选择较小的列

(2)将where中用的比较频繁的字段建立索引

(3)select子句中避免使用‘*’

(4)避免在索引列上使用计算,not,in和<>等操作

(5)当只需要一行数据的时候使用limit1

(6)保证表单数据不超过200w,适时分割表

(7)针对查询较慢的语句,可以使用explain来分析该语句具体的执行情况

4.union和union all的区别

用union连接表后,重复的记录会被删除掉

用union all连接表后,记录会被完整保留 

5.varchar和char的区别

Char是一种固定长度的类型,varchar是一种可变长度的类型

6.数据库事物有哪几种?

隔离性、持续性、一致性、原子性

7.数据库三范式

第一范式  字段具有原子性,不可再分

第二范式  表中的每列都和主键相关

第三范式  每列都和主键列直接相关,而不是间接相关

8.什么是事务?

事务(Transaction)是并发控制的基本单位。

所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。

9.数据库的乐观锁和悲观锁是什么?

数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。

乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。

悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作

乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。

10.SQL中的drop、delete、truncate都表示删除,但是三者有一些差别

delete和truncate只删除表的数据不删除表的结构;

速度,一般来说: drop> truncate >delete ;

delete语句是dml,这个操作会放到rollbacksegement中,事务提交之后才生效;

如果有相应的trigger,执行的时候将被触发. truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger;

drop、delete与truncate分别在什么场景之下使用?

不再需要一张表的时候,用drop

想删除部分数据行时候,用delete,并且带上where子句

保留表而删除所有数据的时候用truncate

11.索引是什么?有什么作用以及优缺点?

索引是对数据库表中一或多个列的值进行排序的结构,是帮助MySQL高效获取数据的数据结构

你也可以这样理解:索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。

MySQL数据库几个基本的索引类型:普通索引、唯一索引、主键索引、全文索引

优缺点:

索引加快数据库的检索速度

索引降低了插入、删除、修改等维护任务的速度

唯一索引可以确保每一行数据的唯一性

通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能

索引需要占物理和数据空间.

12.什么是存储过程?有哪些优缺点?

存储过程是一些预编译的SQL语句。

更加直白的理解:存储过程可以说是一个记录集,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了。

优缺点:

存储过程是一个预编译的代码块,执行效率比较高

一个存储过程替代大量T_SQL语句,可以降低网络通信量,提高通信速率

可以一定程度上确保数据安全。

13. 超键、候选键、主键、外键分别是什么?

超键:在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。

候选键:是最小超键,即没有冗余元素的超键。

主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。

外键:在一个表中存在的另一个表的主键称此表的外键。

14.什么是视图?以及视图的使用场景有哪些?

视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。

只暴露部分字段给访问者,所以就建一个虚表,就是视图。

查询的数据来源于不同的表,而查询者希望以统一的方式查询,这样也可以建立一个视图,把多个表查询结果联合起来,查询者只需要直接从视图中获取数据,不必考虑数据来源于不同表所带来的差异。

猜你喜欢

转载自blog.csdn.net/qq_37050329/article/details/79834711