百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> 数据库根本理论细致介绍
分享文章到:

数据库根本理论细致介绍

发布时间:09/01 来源:未知 浏览: 关键词:
1、数据库范式

第一范式:列不成分,eg:【联络人】(姓名,性别,电话),一个联络人有家庭电话和公司电话,那么这种表构造设计就没有到达 1NF;

第二范式:有主键,包管完全依靠。eg:订单明细表【OrderDetail】(OrderID,ProductID,UnitPrice,Discount,Quantity,ProductName),Discount(折扣),Quantity(数目)完全依靠(取决)于主键(OderID,ProductID),而 UnitPrice,ProductName 只依靠于 ProductID,不相符2NF;

第三范式:无传递依靠(非主键列 A 依靠于非主键列 B,非主键列 B 依靠于主键的状况),eg:订单表【Order】(OrderID,OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity)主键是(OrderID),CustomerName,CustomerAddr,CustomerCity 直接依靠的是 CustomerID(非主键列),而不是直接依靠于主键,它是通过传递才依靠于主键,所以不相符 3NF。

2、什么是反模式

范式可以幸免数据冗余,减少数据库的空间,减轻保护数据完全性的费事。

然而,通过数据库范式化设计,将致使数据库业务触及的表变多,并且大概需要将触及的业务表停止多表连接查询,这样将致使机能变差,且不利于分库分表。因此,出于机能优先的考量,大概在数据库的构造中需要使用反模式的设计,即空间换取时间,采取数据冗余的方式幸免表之间的关联查询。至于数据一致性问题,由于难以知足数据强一致性,一样状况下,使储备数据尽大概到达会员一致,包管系统经过一段较短的时间的自我复原和批改,数据终究到达一致。

需要慎重使用反模式设计数据库。一样状况下,尽大概使用范式化的数据库设计,由于范式化的数据库设计能让产品愈加灵敏,并且能在数据库层保持数据完全性。

有的时候,晋升机能最好的办法是在统一表中留存冗余数据,假如能容许少量的脏数据,创立一张完全独立的汇总表或缓存表是非常好的办法。举个例子,设计一张“下载次数表”来缓存下载次数信息,可使在海量数据的状况下,提高查询总数信息的速度。

别的一个比力典型的场景,出于扩展性思考,大概会使用 BLOB 和 TEXT 类型的列储备 JSON 构造的数据,这样的好处在于可以在任何时候,将新的属性增加到这个字段中,而不需要更换表构造。但是,这个设计的缺陷也比力明显,就是需要猎取整个字段内容停止解码来猎取指定的属性,并且没法停止索引、排序、聚合等操纵。因此,假如需要思考愈加复杂的使用处景,愈加倡议使用 MongoDB 这样的文档型数据库。

3、数据库事务

事务是一个不成分割的数据库操纵序列,也是数据库并发操纵的根本单位,其施行的结果必需使数据库从一种一致性状态变到另一种一致性状态。

(1). 事务的特点

原子性(Atomicity):事务所包括的一系列数据库操纵要末全部成功施行,要末全部回滚;

一致性(Consistency):事务的施行结果必需使数据库从一个一致性状态到另一个一致性状态;

隔离性(Isolation):并发施行的事务之间不克不及彼此影响;

耐久性(Durability):事务一旦提交,对数据库中数据的改动是永远性的。

(2). 事务并发带来的问题

脏读:一个事务读取了另一个事务未提交的数据;

不成反复读:不成反复读的重点是修改,一样前提下两次读取结果不一样,也就是说,被读取的数据可以被其它事务修改;

幻读:幻读的重点在于新增或者删除,一样前提下两次读出来的记载数不一样。

(3). 隔离级别

隔离级别决议了一个session中的事务大概对另一个session中的事务的影响。

ANSI标准定义了4个隔离级别,MySQL的InnoDB都支撑,离别是:

READ UNCOMMITTED(未提交读):最初级别的隔离,平常又称为dirty read,它同意一个事务读取另一个事务还没commit的数据,这样大概会提高机能,但是会致使脏读问题;

READ COMMITTED(提交读):在一个事务中只同意对其它事务已经commit的记载可见,该隔离级别不克不及幸免不成反复读问题;

REPEATABLE READ(可反复读):在一个事务开端后,其他事务对数据库的修改在本领务中不成见,直到本领务commit或rollback。但是,其他事务的insert/delete操纵对该事务是可见的,也就是说,该隔离级别并不克不及幸免幻读问题。在一个事务中反复select的结果一样,除非本领务中update数据库。

SERIALIZABLE(可串行化):最高级别的隔离,只同意事务串行施行。

MySQL默许的隔离级别是REPEATABLE READ。

数据库01.jpg

4、什么是储备历程?是什么优缺陷?

储备历程是事先经过编译共存储在数据库中的一段SQL语句的汇合。进一步地说,储备历程是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个办法一样实现一些功效(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功效的时候调取他就行了。储备历程具有以下特点:

4.1、储备历程只在创立时停止编译,今后每次施行储备历程都不需再从新编译,而一样 SQL 语句每施行一次就编译一次,所以使用储备历程可提高数据库施行效力;

4.2、当SQL语句有变更时,可以只修改数据库中的储备历程而不必修改代码;

4.3、减少网络传输,在客户端调取一个储备历程当然比施行一串SQL传输的数据量要小;

4.4、通过储备历程能够使没有权限的会员在操纵之下间接地存取数据库,从而确保数据的平安。

5、简便说一下drop、delete、truncate的不同

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

Delete用来删除表的全部或者一部分数据行,施行delete之后,会员需要提交(commmit)或者回滚(rollback)来施行删除或者撤销删除, delete命令会触发这个表上所有的delete触发器;

Truncate删除表中的所有数据,这个操纵不克不及回滚,也不会触发这个表上的触发器,TRUNCATE比delete更快,占用的空间更小;

Drop命令从数据库中删除表,所有的数据行,索引和权限也会被删除,所有的DML触发器也不会被触发,这个命令也不克不及回滚。

因此,在不再需要一张表的时候,用drop;在想删除部分数据行时候,用delete;在保存表而删除所有数据的时候用truncate。

6、什么叫视图?游标是啥?

视图是一种虚拟的表,平常是有一个表或者多个表的行或列的子集,具有和物理表雷同的功效,可以对视图停止增,删,改,查等操纵。特殊地,对视图的修改不影响根本表。比拟多表查询,它使得我们猎取数据更容易。

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

在操纵mysql的时候,我们知道MySQL检索操纵返回一组称为结果集的行。这组返回的行都是与 SQL语句相匹配的行(零行或多行)。使用简便的 SELECT语句,例如,没有方法得到第一行、下一行或前 10行,也不存在每次一行地处置所有行的简便办法(相关于成批地处置它们)。有时,需要在检索出来的行中前进或后退一行或多行。这就是使用游标的缘由。游标(cursor)是一个储备在MySQL效劳器上的数据库查询,它不是一条 SELECT语句,而是被该语句检索出来的结果集。在储备了游标之后,利用程序可以按照需要滚动或阅读其中的数据。游标主要用于交互式利用,其中会员需要滚动屏幕上的数据,并对数据停止阅读或做出更换。

7、什么是触发器?

触发器是与表相关的数据库对象,在知足定义前提时触发,并施行触发器中定义的语句汇合。触发器的这种特性可以协助利用在数据库端确保数据库的完全性。

8、超键、候选键、主键、外键

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

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

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

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

9、什么是事务?什么是锁?

事务:就是被绑定在一起作为一个逻辑工作单元的 SQL 语句分组,假如任何一个语句操纵失败那么整个操纵就被失败,今后操纵就会回滚到操纵前状态,或者是上有个节点。为了确保要末施行,要末不施行,就可以使用事务。要将有组语句作为事务思考,就需要通过 ACID 测试,即原子性,一致性,隔离性和耐久性。

锁:在所以的 DBMS 中,锁是实现事务的关键,锁可以包管事务的完全性和并发性。与实际生活中锁一样,它可以使某些数据的具有者,在某段时间内不克不及使用某些数据或数据构造。当然锁还分级别的。

10、数据库锁机制

数据库锁定机制简便来说就是数据库为了包管数据的一致性而使各种同享资源在被并发拜访,拜访变得有序所设计的一种规则。MySQL各储备引擎使用了三品种型(级别)的锁定机制:行级锁定,页级锁定和表级锁定。

表级锁定(table-level):表级别的锁定是MySQL各储备引擎中最大颗粒度的锁定机制。该锁定机制最大的特点是实现逻辑非常简便,带来的系统负面影响最小。所以猎取锁和开释锁的速度很快。由于表级锁一次会将整个表锁定,所以可以很好的幸免困扰我们的死锁问题。当然,锁定颗粒度大所带来最大的负面影响就是显现锁定资源争用的概率也会最高,致使并大度大打折扣。表级锁分为读锁和写锁。页级锁定(page-level):页级锁定的特点是锁定颗粒度介于行级锁定与表级锁之间,所以猎取锁定所需要的资源开销,乃至所能供给的并发处置能力也一样是介于上面二者之间。别的,页级锁定和行级锁定一样,会发生死锁。行级锁定(row-level):行级锁定最大的特点就是锁定对象的颗粒度很小,也是当前各大数据库治理软件所实现的锁定颗粒度最小的。由于锁定颗粒度很小,所以发生锁定资源争用的概率也最小,能够给予利用程序尽大概大的并发处置能力而提高一些需要高并发利用系统的团体机能。虽然能够在并发处置能力上面有较大的优势,但是行级锁定也因此带来了不少弊端。由于锁定资源的颗粒度很小,所以每次猎取锁和开释锁需要做的事情也更多,带来的耗损天然也就更大了。此外,行级锁定也最容易发生死锁。InnoDB的行级锁一样分为两种,同享锁和排他锁,一样InnoDB也引入了意向锁(表级锁)的概念,所以也就有了意向同享锁和意向排他锁,所以InnoDB实际上有四种锁,即同享锁(S)、排他锁(X)、意向同享锁(IS)、意向排他锁(IX);

在MySQL数据库中,使用表级锁定的主如果MyISAM,Memory,CSV等一些非事务性储备引擎,而使用行级锁定的主如果Innodb储备引擎和NDBCluster储备引擎,页级锁定主如果BerkeleyDB储备引擎的锁定方式。

而意向锁的作用就是当一个事务在需要猎取资源锁定的时候,假如碰到本人需要的资源已经被排他锁占用的时候,该事务可以需要锁定行的表上面增加一个适宜的意向锁。假如本人需要一个同享锁,那么就在表上面增加一个意向同享锁。而假如本人需要的是某行(或者某些行)上面增加一个排他锁的话,则先在表上面增加一个意向排他锁。意向同享锁可以同时共存多个,但是意向排他锁同时只能有一个存在。

数据库02.jpg

想理解更多相关内容请拜访PHP中文网:mysql视频教程

以上就是数据库根本理论具体介绍的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有153人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板