2023年6月21日发(作者:)
数据库原理学习数据库(Database):存放和提供数据的“库房”数据(Data):数据库中存储的基本对象。数据库管理系统(DBMS):位于⽤户与操作系统之间的⼀层数据管理软件。数据库系统(Database System):包括数据库、DBMS、应⽤系统、数据库管理员(DBA)主键(Primary Key):⽤于唯⼀的标识表中的某⼀条记录的属性或属性的集合。外键(Foreign Key):⽤于与另⼀张表关联,外键为另⼀张表的主键超键(Super Key):超键是能唯⼀区分元组的属性或属性的集合键(候选键):去掉了超键中多余的属性,仍然能够保证区分不同的元组。模式(Schema):⼀个数据库的描述,包括对数据库结构,数据类型,还有约束。实例(Instance / State):数据库中在某⼀时刻存储的真实的数据。(Instance是Schema在某⼀时刻的具体化、实例化)数据操纵语⾔(DML:Data Manipulation Language):增删改查数据定义语⾔(DDL:Data Definition Language):定义、删除、修改数据库中的对象数据控制语⾔(DCL:Data Control Language):⽤于控制⽤户对数据库操纵的权限数据模型(Data Model):现实世界数据特征的抽象,⽤来定义数据如何组织,数据之间的关系怎样并相容性(Union Compatibility):两个关系具有并相容性需要保证具有相同的属性个数,以及对于每个属性都有相同的域视图(VIEW):视图是虚拟的表,并不是物理存储的数据。⽽是由基本表或其他视图派⽣的数据。对视图的更新,实际上转换为对实际基表的更新。
数据模型(Data Model):基本概念:现实世界数据特征的抽象,⽤来定义数据如何组织,数据之间的关系怎样。层次:1.概念模型(Conceptual):按⽤户的观点来对数据和信息建模2.逻辑/实现模型(Logical / Implementation):层次模型,⽹状模型,关系模型3.物理模型(Physical):数据在具体DBMS产品中的物理储存⽅式
数据库系统的三级模式结构:
1.内模式(Internal Schema):(也称存储模式。)数据物理结构和储存⽅式的描述,是数据在数据库内部的表⽰⽅式2.概念模式(Conceptual Schema):(也称全局模式。)有时简称“模式”。是对数据库中全体数据的逻辑结构和特征的描述3.外模式(External Schemas):(也称⼦模式或者⽤户模式。)数据库⽤户能够看见和使⽤的局部数据的逻辑结构和特征的描述
数据库系统的两级映射以及物理、逻辑独⽴性:两级映射:1.概念模式/内模式映射2.外模式/概念模式映射 数据的物理独⽴性:内模式与概念模式之间的映射提供了数据的物理独⽴性。当数据的物理结构发⽣变化时,只需要修改内模式与概念模式之间的映射即可。数据的逻辑独⽴性:概念模式与外模式之间的映射提供了数据的逻辑独⽴性。当数据的整体逻辑结构发⽣变化时,只需要修改各个外模式与概念模式之间的映射即可保证应⽤程序不受影响。
数据的约束条件:完整性约束1. 域约束:对属性取值范围的约束2. 键约束:每个关系必须要有主键,且每个主键必须不相同3. ⾮空约束:属性值不能为NULL4. 实体完整性约束:主键值不能为空5. 参照完整性约束:外键可以取NULL值,但若外键为另⼀关系主键,则不能为NULL。6. ⽤户定义的完整性
各种数据操作可能违反的完整性约束插⼊操作:域约束、键约束、⾮空约束、实体完整性约束、参照完整性约束删除操作:参照完整性约束更新操作:域约束、键约束、⾮空约束、实体完整性约束、参照完整性约束
SQL语句执⾏顺序:1. FROM⼦句组装来⾃不同数据源的数据2. WHERE⼦句基于指定的条件对记录进⾏筛选3. GROUP BY⼦句将数据划分为多个分组4. 使⽤聚集函数进⾏计算5. 使⽤HAVING⼦句筛选分组6. 计算所有的表达式7. 使⽤ORDER BY对结果集进⾏排序
控制冗余(Controlled Redundancy)与⾮控制冗余(Uncontrolled Redundancy)的区别:未受控制的数据存储冗余会导致如下的问题:1. 更新数据时的重复⼯作2. 浪费空间3. 数据可能会不⼀致
因此,理想情况下,我们应该设计⼀个没有冗余的数据库,但是有时候我们需要提⾼查询的效率,因此我们引⼊了控制冗余(ControlledRedundancy)例如:我们将学⽣名和课程号冗余存储于GRADE_REPORT表中,因为查询成绩的时候我们需要同时查询学⽣姓名以及课程号。
关系(Relation)与⽂件(files)或表(tables)的不同:关系看上去像⼀张⼆维表关系的域(属性的取值范围)为⼀组原⼦值(不可再分割的值)关系中的元组必须各不相同
关系代数:五种基本运算:并、差、笛卡尔积、选择、投影关系代数解释器:关系代数解释器(模拟关系代数)
内连接的种类:1. 等值连接2. 不等连接3. ⾃然连接
SQL语句:表结构的复制(不包含表之间的关系)SELECT * INTO COPY_DEPARTMENT FROM DEPARTMENT WHERE 1=0;
三值谓词逻辑:1. TRUE2. FALSE3. UNKNOWN只有在⽐较结果为TRUE是才确定为真,e.g. (TRUE与UNKNOWN交为UNKNOWN, 此元组不会出现在结果中)
数据库应⽤系统设计的基本过程:Phases of Database Design andImplementation Process(数据库设计的基本过程)
Phase 1:Requirements Collections and Analysis(需求收集与分析)Phase 2:Conceptual Database Design(概念结构设计)Phase 3:Choice of a DBMS(选择合适的DBMS)Phase 4:Data Model Mapping (Logical Database Design)(逻辑结构设计)Phase 5:Physical Database Design(物理结构设计)Phase 6:Database System Implementation(数据库实施)Phase 7:Database System Operation and Maintenance(数据库运⾏和维护)
ER图符号解释:
将ER模型映射成逻辑模型的步骤:1. 映射强实体型2. 映射弱实体型3. 映射1 : 1 ⼆元联系型4. 映射1 : N ⼆元联系型5. 映射M : N⼆元联系型6. 映射多值属性7. 映射N元联系
数据库范式:1NF(First Normal Form):当且仅当所有域只包含原⼦值,即每个分量都是不可再分的数据项,则称实体E满⾜第⼀范式2NF(Second Normal Form):当且仅当实体E满⾜第⼀范式,且每⼀个⾮键属性完全依赖主键时,满⾜第⼆范式正是数据库管理的需要催⽣了数据库管理系统DBMS,⽽关系型数据库管理系统为RDBMS常见的数据模型有三种:
- 层次模型
- ⽹状模型
- 关系模型⼀、关系数据库的产⽣在DBMS出现之前,⼈们⽤⽂件来管理数据,但存在很多缺陷:
1. 数据冗余和不⼀致性。数据冗余表⽰在每个shell脚本中基本上都是/bin/bash,但很多⽤户使⽤的都是bash,那么这个可能出现多次,冗余量很⼤;不⼀致性,⽐如有⼀个数据在多个⽂件中都被使⽤,那么修改的时候,需要把每个⽂件都⼿动修改。
2. 数据访问困难。如果数据库有上千万⾏数据,那么我们使⽤时,需要把这上千万⾏数据全部载⼊内存中,再使⽤,对硬件的要求会很⾼⽽且载⼊时间很长,但其实我们需要⽐较的也只是那⼀⾏数据⽽已。
3. 数据孤⽴。由于数据保存在不同的⽂件⾥⾯,所以这些⽂件之间的格式可能各不相同,所以后续开发⼀个软件来管理的话⾮常困难,因为它们不满⾜某⼀个规范,使得数据之间是相互孤⽴的。
4. 完整性问题。例如两个转账的⽤户之间数额的总和应该是⼀样的,但如果在转账的过程中出现了问题,那么⽂件就⽆法解决,除⾮应⽤程序设计上解决,但应⽤程序本⾝并⽆法理解数据之间的逻辑问题。
5. 原⼦性问题。类似于完整性问题,数据必须从⼀个稳定的状态转换为另外⼀个稳定的状态。
6. 并发访问异常问题。按道理来讲,如果⼀个⽤户访问数据库⽂件的前⼗⾏,另⼀个⽤户访问最后⼗⾏,本⾝他们俩并不会冲突,但如果某个⽤户需要修改的话,另外⼀个⽤户并不能访问。因为为了保证⽂件的完整性,我们会加锁的,但⽂件级别的锁安全性太⾼,并不适合这种访问。
7. 安全性问题。部分访问授权很难实现,很难使某⼀个⽤户只能看到其中指定的某些字段。因为这些问题,所以出现了关系数据库
1. 关系数据库想要解决数据冗余问题,它将每⼀个关系都看成了⼀个表,每⼀列都看成是⼀个属性,每⼀⾏看成是他的⼀个元组(也就是数据)如果有许多相同值的话,它将具有相同字段的值独⽴出来,把⼀张表拆分成两张表,降低所谓的冗余度,这种关系也叫做E-R关系模型(实体关系模型)常见的关系模型(结构化数据模型)
关系模型:⽤⼀张⼆维表来表⽰关系模型实体关系模型:将⼀张表拆分,让它们产⽣某种联系对象关系模型:存储⼀些⽐较⼤的⽂件如何存储呢?可以将⼀个⽐较⼤的⽂件先存储在数据库⽂件管理系统当中的某⼀个存储空间上,表中⽤⼀个指针指向这么某⼀个数据,把它当作⼀个存储对象来进⾏管理。半结构化数据模型:结构化是指每⼀⾏存储的都是⼀样的,⽐如/etc/passwd⽂件中,第⼀个字段为⽤户名,第⼆个为密码等。半结构化表⽰它并不是唯⼀的,可能第⼀⾏存储的是⽤户名和性别,第⼆⾏存储的是⽤户名和年龄这种,所以每⼀⾏存储不⽌存储它的数据,还存储它的标签。2.关系:关系代数,⽀持代数运算,⽐如两个集合的交集、并集等。⼆、SQL和关系型数据的结构SQL:Structure Query Language(关系结构化语⾔)1、sql分类DML:数据操作语⾔,增删改查都是DML语句:INSERT、DELETE、UPDATE、SELECTDDL:数据定义语⾔,实现数据对象的存储和定义。CREATE、DROP、ALTER
关系数据库RDB的对象基本有:库、表、索引、视图、⽤户、存储过程、触发器、事件调度器等。实现数据定义时,必须考虑数据的约束关系。数据库需要能够⾃⼰检查出来有没有逻辑性的错误,所以建⽴的时候注意它的有效数据范围。域约束:数据类型的约束外键约束:引⽤完整性约束主键约束:某字段能唯⼀标识此字段所属的实体,并且不允许为空,⼀张表中只能有⼀个主键唯⼀性约束:每⼀⾏的某字段都不允许出现相同值,可以为空,⼀张表中可以有多个检查性约束:⽐如年龄只能时int型DCL:数据控制语⾔。GRANT、REVOKE,⽤来定义数据库中⽤户的访问权限2、关系型数据的结构表⽰层:表逻辑层:存储引擎,实现表和数据⽂件的解构物理层:数据⽂件数据存储和查询存储管理器查询管理器 负责接收⽤户查询,理解⽤户查询,并将⽤户的查询包括存储转换为对应的存储管理器可以理解的语句,存储管理器将数据存储到磁盘上或从磁盘上删除的这么⼀种组件存储管理器应该具有的组件(功能):权限及完整性管理器、事务管理器、⽂件管理器、缓冲区管理器查询管理器应该具有的组件(功能):DML解释器、DDL解释器、查询执⾏引擎数据存储和查询的执⾏过程:
1. 查询管理器接收⽤户查询,并理解。使⽤DML和DDL解释器
2. 将DML和DDL解释器的结果给查询执⾏引擎
3. 查询执⾏引擎的结果给存储管理器
4. 存储管理器将操作写⼊磁盘中
mysql是单进程多线程的
mysql不允许⼀个进程为两个⽤户同时提供服务,⽐如⼀个⽤户请求访问某⼀个表,⽽第⼆个⽤户同时访问同样的数据,这两个请求不能使⽤同⼀个进程得到服务,原因是因该考虑是否两个⽤户对这个数据是否都有访问权限,如果其中⼀个没有,那么数据的安全性不能得到保障.单进程多线程守护线程:⽐如数据库将数据从缓冲区管理器写到磁盘上去,这个操作和应⽤没有任何关系,所以这些都是需要数据库本⾝来完成的.应⽤线程…但因为数据库的请求很多时候需要的数据量是很⼤的,⽐如现在有⼗个⽤户同时对某个数据库访问,第⼀个⽤户需要载⼊256M的数据,第⼆个⽤户需要1G的数据等等.所以数据库通常是⼀个系统最慢的节点所在,应该尽量避免数据库的交互.那么应该怎么提⾼数据库的交互速度?缓存:第⼀次查询后保存缓存第⼆次访问时直接使⽤结果线程重⽤(thread reuse):⼀个⽤户退出之后,它的线程空闲下来之后不直接删除该线程,放在空闲线程池中,以后⽤户使⽤,直接⽤这个空闲的去响应它三、关系运算关系运算主要为了实现mysql语句的执⾏投影:只输出指定属性选择:只输出符合条件的⾏,类似于通过WHERE完成⾃然连接:具有相同名字的所有属性上所有取值相同的⾏笛卡尔积:不考虑表与表只见的关系,直接连接并:和求并集相同四、sql语⾔的组成部分SQL语⾔的组成部分:DDL、DML、完整性定义语⾔(DDL的⼀部分功能)、视图定义、事务控制、嵌⼊式SQL和动态SQL、授权使⽤程序设计语⾔如何与RDBMS交互
- 嵌⼊式SQL:与动态SQL类似,但是其语⾔必须在程序编译时完全确定下来,并由预处理器进⾏处理
- 动态SQL:程序设计语⾔使⽤函数(mysql_connect())或者⽅法与RDBMS服务器建⽴连接,并进⾏交互,通过建⽴连接向SQL服务器发送查询语句,并将结果保存⾄变量中⽽后进⾏处理。
2023年6月21日发(作者:)
数据库原理学习数据库(Database):存放和提供数据的“库房”数据(Data):数据库中存储的基本对象。数据库管理系统(DBMS):位于⽤户与操作系统之间的⼀层数据管理软件。数据库系统(Database System):包括数据库、DBMS、应⽤系统、数据库管理员(DBA)主键(Primary Key):⽤于唯⼀的标识表中的某⼀条记录的属性或属性的集合。外键(Foreign Key):⽤于与另⼀张表关联,外键为另⼀张表的主键超键(Super Key):超键是能唯⼀区分元组的属性或属性的集合键(候选键):去掉了超键中多余的属性,仍然能够保证区分不同的元组。模式(Schema):⼀个数据库的描述,包括对数据库结构,数据类型,还有约束。实例(Instance / State):数据库中在某⼀时刻存储的真实的数据。(Instance是Schema在某⼀时刻的具体化、实例化)数据操纵语⾔(DML:Data Manipulation Language):增删改查数据定义语⾔(DDL:Data Definition Language):定义、删除、修改数据库中的对象数据控制语⾔(DCL:Data Control Language):⽤于控制⽤户对数据库操纵的权限数据模型(Data Model):现实世界数据特征的抽象,⽤来定义数据如何组织,数据之间的关系怎样并相容性(Union Compatibility):两个关系具有并相容性需要保证具有相同的属性个数,以及对于每个属性都有相同的域视图(VIEW):视图是虚拟的表,并不是物理存储的数据。⽽是由基本表或其他视图派⽣的数据。对视图的更新,实际上转换为对实际基表的更新。
数据模型(Data Model):基本概念:现实世界数据特征的抽象,⽤来定义数据如何组织,数据之间的关系怎样。层次:1.概念模型(Conceptual):按⽤户的观点来对数据和信息建模2.逻辑/实现模型(Logical / Implementation):层次模型,⽹状模型,关系模型3.物理模型(Physical):数据在具体DBMS产品中的物理储存⽅式
数据库系统的三级模式结构:
1.内模式(Internal Schema):(也称存储模式。)数据物理结构和储存⽅式的描述,是数据在数据库内部的表⽰⽅式2.概念模式(Conceptual Schema):(也称全局模式。)有时简称“模式”。是对数据库中全体数据的逻辑结构和特征的描述3.外模式(External Schemas):(也称⼦模式或者⽤户模式。)数据库⽤户能够看见和使⽤的局部数据的逻辑结构和特征的描述
数据库系统的两级映射以及物理、逻辑独⽴性:两级映射:1.概念模式/内模式映射2.外模式/概念模式映射 数据的物理独⽴性:内模式与概念模式之间的映射提供了数据的物理独⽴性。当数据的物理结构发⽣变化时,只需要修改内模式与概念模式之间的映射即可。数据的逻辑独⽴性:概念模式与外模式之间的映射提供了数据的逻辑独⽴性。当数据的整体逻辑结构发⽣变化时,只需要修改各个外模式与概念模式之间的映射即可保证应⽤程序不受影响。
数据的约束条件:完整性约束1. 域约束:对属性取值范围的约束2. 键约束:每个关系必须要有主键,且每个主键必须不相同3. ⾮空约束:属性值不能为NULL4. 实体完整性约束:主键值不能为空5. 参照完整性约束:外键可以取NULL值,但若外键为另⼀关系主键,则不能为NULL。6. ⽤户定义的完整性
各种数据操作可能违反的完整性约束插⼊操作:域约束、键约束、⾮空约束、实体完整性约束、参照完整性约束删除操作:参照完整性约束更新操作:域约束、键约束、⾮空约束、实体完整性约束、参照完整性约束
SQL语句执⾏顺序:1. FROM⼦句组装来⾃不同数据源的数据2. WHERE⼦句基于指定的条件对记录进⾏筛选3. GROUP BY⼦句将数据划分为多个分组4. 使⽤聚集函数进⾏计算5. 使⽤HAVING⼦句筛选分组6. 计算所有的表达式7. 使⽤ORDER BY对结果集进⾏排序
控制冗余(Controlled Redundancy)与⾮控制冗余(Uncontrolled Redundancy)的区别:未受控制的数据存储冗余会导致如下的问题:1. 更新数据时的重复⼯作2. 浪费空间3. 数据可能会不⼀致
因此,理想情况下,我们应该设计⼀个没有冗余的数据库,但是有时候我们需要提⾼查询的效率,因此我们引⼊了控制冗余(ControlledRedundancy)例如:我们将学⽣名和课程号冗余存储于GRADE_REPORT表中,因为查询成绩的时候我们需要同时查询学⽣姓名以及课程号。
关系(Relation)与⽂件(files)或表(tables)的不同:关系看上去像⼀张⼆维表关系的域(属性的取值范围)为⼀组原⼦值(不可再分割的值)关系中的元组必须各不相同
关系代数:五种基本运算:并、差、笛卡尔积、选择、投影关系代数解释器:关系代数解释器(模拟关系代数)
内连接的种类:1. 等值连接2. 不等连接3. ⾃然连接
SQL语句:表结构的复制(不包含表之间的关系)SELECT * INTO COPY_DEPARTMENT FROM DEPARTMENT WHERE 1=0;
三值谓词逻辑:1. TRUE2. FALSE3. UNKNOWN只有在⽐较结果为TRUE是才确定为真,e.g. (TRUE与UNKNOWN交为UNKNOWN, 此元组不会出现在结果中)
数据库应⽤系统设计的基本过程:Phases of Database Design andImplementation Process(数据库设计的基本过程)
Phase 1:Requirements Collections and Analysis(需求收集与分析)Phase 2:Conceptual Database Design(概念结构设计)Phase 3:Choice of a DBMS(选择合适的DBMS)Phase 4:Data Model Mapping (Logical Database Design)(逻辑结构设计)Phase 5:Physical Database Design(物理结构设计)Phase 6:Database System Implementation(数据库实施)Phase 7:Database System Operation and Maintenance(数据库运⾏和维护)
ER图符号解释:
将ER模型映射成逻辑模型的步骤:1. 映射强实体型2. 映射弱实体型3. 映射1 : 1 ⼆元联系型4. 映射1 : N ⼆元联系型5. 映射M : N⼆元联系型6. 映射多值属性7. 映射N元联系
数据库范式:1NF(First Normal Form):当且仅当所有域只包含原⼦值,即每个分量都是不可再分的数据项,则称实体E满⾜第⼀范式2NF(Second Normal Form):当且仅当实体E满⾜第⼀范式,且每⼀个⾮键属性完全依赖主键时,满⾜第⼆范式正是数据库管理的需要催⽣了数据库管理系统DBMS,⽽关系型数据库管理系统为RDBMS常见的数据模型有三种:
- 层次模型
- ⽹状模型
- 关系模型⼀、关系数据库的产⽣在DBMS出现之前,⼈们⽤⽂件来管理数据,但存在很多缺陷:
1. 数据冗余和不⼀致性。数据冗余表⽰在每个shell脚本中基本上都是/bin/bash,但很多⽤户使⽤的都是bash,那么这个可能出现多次,冗余量很⼤;不⼀致性,⽐如有⼀个数据在多个⽂件中都被使⽤,那么修改的时候,需要把每个⽂件都⼿动修改。
2. 数据访问困难。如果数据库有上千万⾏数据,那么我们使⽤时,需要把这上千万⾏数据全部载⼊内存中,再使⽤,对硬件的要求会很⾼⽽且载⼊时间很长,但其实我们需要⽐较的也只是那⼀⾏数据⽽已。
3. 数据孤⽴。由于数据保存在不同的⽂件⾥⾯,所以这些⽂件之间的格式可能各不相同,所以后续开发⼀个软件来管理的话⾮常困难,因为它们不满⾜某⼀个规范,使得数据之间是相互孤⽴的。
4. 完整性问题。例如两个转账的⽤户之间数额的总和应该是⼀样的,但如果在转账的过程中出现了问题,那么⽂件就⽆法解决,除⾮应⽤程序设计上解决,但应⽤程序本⾝并⽆法理解数据之间的逻辑问题。
5. 原⼦性问题。类似于完整性问题,数据必须从⼀个稳定的状态转换为另外⼀个稳定的状态。
6. 并发访问异常问题。按道理来讲,如果⼀个⽤户访问数据库⽂件的前⼗⾏,另⼀个⽤户访问最后⼗⾏,本⾝他们俩并不会冲突,但如果某个⽤户需要修改的话,另外⼀个⽤户并不能访问。因为为了保证⽂件的完整性,我们会加锁的,但⽂件级别的锁安全性太⾼,并不适合这种访问。
7. 安全性问题。部分访问授权很难实现,很难使某⼀个⽤户只能看到其中指定的某些字段。因为这些问题,所以出现了关系数据库
1. 关系数据库想要解决数据冗余问题,它将每⼀个关系都看成了⼀个表,每⼀列都看成是⼀个属性,每⼀⾏看成是他的⼀个元组(也就是数据)如果有许多相同值的话,它将具有相同字段的值独⽴出来,把⼀张表拆分成两张表,降低所谓的冗余度,这种关系也叫做E-R关系模型(实体关系模型)常见的关系模型(结构化数据模型)
关系模型:⽤⼀张⼆维表来表⽰关系模型实体关系模型:将⼀张表拆分,让它们产⽣某种联系对象关系模型:存储⼀些⽐较⼤的⽂件如何存储呢?可以将⼀个⽐较⼤的⽂件先存储在数据库⽂件管理系统当中的某⼀个存储空间上,表中⽤⼀个指针指向这么某⼀个数据,把它当作⼀个存储对象来进⾏管理。半结构化数据模型:结构化是指每⼀⾏存储的都是⼀样的,⽐如/etc/passwd⽂件中,第⼀个字段为⽤户名,第⼆个为密码等。半结构化表⽰它并不是唯⼀的,可能第⼀⾏存储的是⽤户名和性别,第⼆⾏存储的是⽤户名和年龄这种,所以每⼀⾏存储不⽌存储它的数据,还存储它的标签。2.关系:关系代数,⽀持代数运算,⽐如两个集合的交集、并集等。⼆、SQL和关系型数据的结构SQL:Structure Query Language(关系结构化语⾔)1、sql分类DML:数据操作语⾔,增删改查都是DML语句:INSERT、DELETE、UPDATE、SELECTDDL:数据定义语⾔,实现数据对象的存储和定义。CREATE、DROP、ALTER
关系数据库RDB的对象基本有:库、表、索引、视图、⽤户、存储过程、触发器、事件调度器等。实现数据定义时,必须考虑数据的约束关系。数据库需要能够⾃⼰检查出来有没有逻辑性的错误,所以建⽴的时候注意它的有效数据范围。域约束:数据类型的约束外键约束:引⽤完整性约束主键约束:某字段能唯⼀标识此字段所属的实体,并且不允许为空,⼀张表中只能有⼀个主键唯⼀性约束:每⼀⾏的某字段都不允许出现相同值,可以为空,⼀张表中可以有多个检查性约束:⽐如年龄只能时int型DCL:数据控制语⾔。GRANT、REVOKE,⽤来定义数据库中⽤户的访问权限2、关系型数据的结构表⽰层:表逻辑层:存储引擎,实现表和数据⽂件的解构物理层:数据⽂件数据存储和查询存储管理器查询管理器 负责接收⽤户查询,理解⽤户查询,并将⽤户的查询包括存储转换为对应的存储管理器可以理解的语句,存储管理器将数据存储到磁盘上或从磁盘上删除的这么⼀种组件存储管理器应该具有的组件(功能):权限及完整性管理器、事务管理器、⽂件管理器、缓冲区管理器查询管理器应该具有的组件(功能):DML解释器、DDL解释器、查询执⾏引擎数据存储和查询的执⾏过程:
1. 查询管理器接收⽤户查询,并理解。使⽤DML和DDL解释器
2. 将DML和DDL解释器的结果给查询执⾏引擎
3. 查询执⾏引擎的结果给存储管理器
4. 存储管理器将操作写⼊磁盘中
mysql是单进程多线程的
mysql不允许⼀个进程为两个⽤户同时提供服务,⽐如⼀个⽤户请求访问某⼀个表,⽽第⼆个⽤户同时访问同样的数据,这两个请求不能使⽤同⼀个进程得到服务,原因是因该考虑是否两个⽤户对这个数据是否都有访问权限,如果其中⼀个没有,那么数据的安全性不能得到保障.单进程多线程守护线程:⽐如数据库将数据从缓冲区管理器写到磁盘上去,这个操作和应⽤没有任何关系,所以这些都是需要数据库本⾝来完成的.应⽤线程…但因为数据库的请求很多时候需要的数据量是很⼤的,⽐如现在有⼗个⽤户同时对某个数据库访问,第⼀个⽤户需要载⼊256M的数据,第⼆个⽤户需要1G的数据等等.所以数据库通常是⼀个系统最慢的节点所在,应该尽量避免数据库的交互.那么应该怎么提⾼数据库的交互速度?缓存:第⼀次查询后保存缓存第⼆次访问时直接使⽤结果线程重⽤(thread reuse):⼀个⽤户退出之后,它的线程空闲下来之后不直接删除该线程,放在空闲线程池中,以后⽤户使⽤,直接⽤这个空闲的去响应它三、关系运算关系运算主要为了实现mysql语句的执⾏投影:只输出指定属性选择:只输出符合条件的⾏,类似于通过WHERE完成⾃然连接:具有相同名字的所有属性上所有取值相同的⾏笛卡尔积:不考虑表与表只见的关系,直接连接并:和求并集相同四、sql语⾔的组成部分SQL语⾔的组成部分:DDL、DML、完整性定义语⾔(DDL的⼀部分功能)、视图定义、事务控制、嵌⼊式SQL和动态SQL、授权使⽤程序设计语⾔如何与RDBMS交互
- 嵌⼊式SQL:与动态SQL类似,但是其语⾔必须在程序编译时完全确定下来,并由预处理器进⾏处理
- 动态SQL:程序设计语⾔使⽤函数(mysql_connect())或者⽅法与RDBMS服务器建⽴连接,并进⾏交互,通过建⽴连接向SQL服务器发送查询语句,并将结果保存⾄变量中⽽后进⾏处理。
发布评论