MySQL数据库一些概念
数据库的定义
数据库的定义在某种程度上,数据库代表着一种存储技术,并不局限于某种存储形式。一个简单的数据库可以将数据只存储在某台特定的计算机上,供某个特定的用户使用,而一个复杂的数据库可以将数据分散存储到多台计算机上,能够供成千上万的用户同时使用。从存储容量上来说,一个数据库的存储容量可以小到只能够存储几KB的数据,也可以大到存储TB甚至是PB级别的数据。
数据库
数据库(DataBase,DB)从本质上讲就是一个文件系统,它能够将数据有组织地集合在一起,按照一定的规则长期存储到计算机的磁盘中,并且能够供多个用户共享和使用,同时,用户能够对数据库中的数据进行插入、删除、修改和查询操作。数据库将数据进行集中存储和管理,有效地分离了应用程序和业务数据,降低了应用程序和业务数据之间的耦合性,大大简化了数据的存储和管理工作。同时,数据库提供了对存储数据的统一控制功能。数据除了能够被存储在计算机的磁盘中,还能够被存储在计算机的内存中,所以在某种程度上,可以将数据库分为永久型数据库和内存型数据库。
数据表
对于关系型数据库来说,数据表是以一个二维数组的形式来存储和管理数据的,它能够存储和管理数据并操作数据的逻辑结构。通常,一个数据表由行和列组成,一行数据能够表示一条完整的基础信息,所以行在关系型数据库中是组织数据的基本单位;列也被称为字段,它能够表示行的一个属性,同时,每一列都有相应的数据类型和数据长度的定义。
数据类型
关系型数据库中的数据类型表示数据在数据库中的存储格式,其反映了数据在计算机中的存储格式。计算机根据不同的数据类型来组织和存储数据,并为不同数据类型的数据分配不同的存储空间。数据类型在大的分类上可以分为数值类型、日期和时间类型、字符串类型。在关系型数据库中,表中的每个字段都会被指定一种数据类型。例如,表1-1中,将商品编号、商品名称和商品类型定义为字符串类型,将商品价格定义为数值类型(定点数类型),将上架时间定义为日期和时间类型。
运算符
数据库中内置了一些函数,能够很方便地对数据进行数学计算、字符串处理、加密/解密及聚合处理等。相应地,函数可以分为数学函数、字符串函数、日期和时间函数、流程处理函数、加密与解密函数、数据聚合函数、获取数据库信息函数以及数据库中的其他函数等
主键
在关系型数据库中,主键(Primary
Key)又称为主码,能够唯一标识数据表中的一行记录。主键可以包含数据表中的一列或者多列,主键不能为空。同时,在同一个数据表中,主键列上不能有两行甚至多行相同的值,也就是说,在同一个数据表中,每行数据对应的主键列的值必须唯一。
外键
外键从本质上讲就是一个引用,它引用的是另外一张表中的一列或者多列数据,被引用的表中的列需要具备主键约束或者唯一性约束。也就是说,被引用的列在其对应的数据表中能够唯一标识一行数据。外键反映的是两个表之间的连接关系。
索引
索引从本质上来讲是一种单独的数据库结构,它能够单独地存储在计算机的磁盘上,包含着对相关数据表中所有数据的引用指针。通过索引能够快速定位并查询出数据表中的一行或者多行数据,而不必进行全表扫描。在某种程度上,数据库的索引和书籍的目录有些类似。当查找书籍中的内容时,往往不会直接翻阅书籍的内容,这样查找起来相当烦琐;如果先根据书籍的目录定位到要查找的内容在书籍中的大概章节,然后再到相关的章节中去查找内容就比较简单了。索引使查询能够快速到达计算机中的某个位置去搜寻数据文件,而不必对所有的数据进行扫描。索引的建立,可以大大提高数据查询的效率
视图
视图从本质上来讲是数据库的一种虚表,它是由SELECT查询语句从一张表或者多张表中导出的一种虚表。不能向视图中插入、更新和删除数据,即视图不负责数据的实际存储。当通过视图修改数据时,实际上修改的是构成视图的基本表中的数据,当修改了构成视图的基本表中的数据时,视图中的数据也会随之改变。使用视图能够大大简化数据库中表与表之间复杂的关联查询。
存储过程
存储过程是一种SQL语句集,经过编译后存储在数据库中,通过指定存储过程的名称和参数信息来调用存储过程,使其完成特定的功能。在创建存储过程的时候,可以自定义变量来存储一些中间结果的数据,也可以在存储过程中定义一些执行逻辑和执行流程。存储过程经过一次编译后可以永久使用(只要不删除存储过程)。将一些复杂的查询逻辑封装在存储过程中重复使用,应用程序只需要调用存储过程的名称并传入相应的参数即可,大大简化了开发和数据查询的复杂度。另外,使用存储过程也可以防止用户直接访问数据表,只需要赋予用户对存储过程的访问权限即可。
触发器
触发器从本质上来讲是一种特殊的存储过程。触发器的执行不是由应用程序调用,也不是由手动执行的,而是由数据库中的事件执行的。当对某个表中的数据进行插入、更新和删除操作时,系统会自动执行相应的触发器。在某种程度上,触发器和钩子函数有些类似。应用程序在执行某项操作时,会自动调用相应的钩子函数,执行钩子函数的逻辑。而触发器是对数据表进行操作时自动执行的。当对数据表中的数据执行插入、更新和删除操作,需要自动执行一些数据库逻辑时,可以使用触发器来实现。
存储引擎
MySQL中最常用到的存储引擎是InnoDB和MyISAM
数据库系统
在关系型数据库领域中,通常认为数据库系统涉及的软件主要由操作系统、数据库、数据库管理系统、以数据库管理系统为核心的应用开发工具和应用程序等几部分组成。
- 操作系统(Operating System,OS):直接运行于计算机硬件上的系统,为计算机中运行的各种软件提供基础环境支持。主流的操作系统包括Windows、UNIX/Linux和Mac
OS等。 - 通常由某种或某几种高级编程语言编写,描述用户应用需求的应用程序、软件或某种管理系统。
- 数据库(DataBase,DB):主要负责数据的存放,并在一定程度上保证数据的安全性、完整性和可靠性
- 数据库管理系统(DataBase Management
System,DBMS):主要用来对数据库进行管理,是数据库系统的核心组成部分。在实际工作中,人们往往不会直接面对数据库,而是通过数据库管理系统对数据库中的数据进行管理和维护。
数据库管理员(DataBase
Administrator,DBA):控制数据库整体结构的人,需要承担创建、管理、监控和维护整个数据库的责任,并保证数据库的安全、完整、高可用性与高可靠性。
SQL语言
关系型数据库中专门提供了一种对数据库进行操作和查询的语言,叫作结构化查询语言,英文为Structured Query
Language,简称SQL。
SQL语言分类
DDL(Data Definition Language,数据定义语言):用于定义数据库、数据表和列,可以用来创建、删除、修改数据库和数据表的结构,包含CREATE、DROP和ALTER等语句。
DML(Data Manipulation
Language,数据操作语言):用于操作数据记录,可以对数据库中数据表的数据记录进行增加、删除和修改等操作,包含INSERT、DELETE和UPDATE等语句。DCL(Data Control Language,数据控制语言):用于定义数据库的访问权限和安全级别,主要包含GRANT、REVOKE、COMMIT和ROLLBACK等语句。
DQL(Data Query Language,数据查询语言):用于查询数据表中的数据记录,主要包含SELECT语句。
关系型数据库提供了SQL语言,使应用程序开发人员与数据库管理和维护人员能够与数据库进行交互。但是在创建数据库和数据表之前,需要对数据库中的数据表进行设计,并能够正确设计出各数据表之间的关联关系。通常使用ER图(Entity
Relationship Diagram),也就是实体-关系模型,来进行数据表的设计。ER图是用来描述现实世界的概念模型,在这个模型中有3个基本要素,分别为实体、属性和关系。
ER图
关系型数据库提供了SQL语言,使应用程序开发人员与数据库管理和维护人员能够与数据库进行交互。但是在创建数据库和数据表之前,需要对数据库中的数据表进行设计,并能够正确设计出各数据表之间的关联关系。通常使用ER图(Entity
Relationship Diagram),也就是实体-关系模型,来进行数据表的设计。ER图是用来描述现实世界的概念模型,在这个模型中有3个基本要素,分别为实体、属性和关系。
范式
MySQL的三大范式能够规范开发人员对数据表的设计,使得开发人员能够设计出简洁、优雅的数据表结构。
第一范式
主要是确保数据表中每个字段的值必须具有原子性,也就是说数据表中每个字段的值为不可再次拆分的*
最小数据单元*。
第二范式
指在第一范式的基础上,确保数据表中除了主键之外的每个字段都必须依赖主键。
第三范式
在第二范式的基础上,确保数据表中的每一列都和主键字段直接相关
也就是说要求数据表中的所有非主键字段不能依赖于其他非主键字段
反范式
当数据库中的数据量比较大且系统的UV和PV访问频次比较高,若完全按照MySQL的三大范式设计数据表,读数据时会产生大量的关联查询,在一定程度上会影响数据库的读性能。此时,可以通过在数据表中增加冗余字段减少关联来提高数据库的读性能。
Reference
MySQL技术大全 – 冰河