目录
使用数据库的目的
- 将数据持久化,把数据保存到可掉电式存储设备中以供之后使用。数据持久化就是意味着将内存中的数据保存到硬盘上加以"固化"。持久化的实现过程大多通过各种关系型数据库来完成。
- 持久化的主要作用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件,XML等数据文件中。
数据库和数据库管理系统关系
数据库的相关概念
DB:数据库(Database):
既存储数据的"仓库",其本质是一个文件系统,它保存了一系列有组织的数据。
DBMS:数据库管理系统(Database Management System):
是一种操作和管理数据库的大型软件,用于建立,使用和维护数据库,对数据库进行统一管理和控制。用户通过数据库管理系统访问数据库中表内的数据。
SQL:结构化查询语言(Structured Query Language)
专门用来于数据库通讯的语言。
数据库和数据库管理系统的关系
数据库管理系统(DBMS)可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体用户的数据。
关系型数据库和非关系型数据库
关系型数据库
这种类型的数据库是最古老的数据库类型,关系型数据库是把复杂的数据结构归结为简单的二元关系(既二维表)。
- 关系型数据库以 行(row)和列(column)的形式存储数据,以便用户理解。这一系列的行和列被称为表(table),一组表组成了一个库(database)。
- 表于表之间的数据记录有关系(relationship)。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系型数据库就是建立在关系模型基础上的数据库。
- SQL就是关系型数据库的查询语言。
关系型数据库的优势
- 复杂查询
可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。 - 事务支持
使得对于安全性能很高的数据访问要求得以实现。
非关系型数据库
可看成传统关系型数据库的功能阉割版本,基于键值对存储数据,不需要经过SQL层的解析,性能非常高。同时,通过减少不常用的功能,进一步提高性能。
SQL的演变
由于SQL一直称霸DBMS,因此许多人在思考是否有一种数据库计数能远离SQL,于是NoSQL诞生了,但是随着发展却发现越来越离不开SQL。到目前为止NoSQL阵营中的DBMS都会有实现类似SQL的功能。
NoSQL功能的演变:
- 1970 : NoSQL = We have no SQL
- 1980 : NoSQL = Know SQL
- 2000 : NoSQL = No SQL!
- 2005 : NoSQL = Not only SQL
- 2013 : NoSQL = No,SQL!
NoSQL对SQL做出了很好的补充,比如实际开发中,很多业务需求,起始并不需要完整的关系型数据库功能,非关系型数据库的功能就足够使用了。这种情况下,使用性能更高,成本更低的非关系型数据库当然是更明智的选择。
关系型数据库的设计规则
- 关系型数据库的典型数据结构就是数据表,这些数据表的组成都是结构化的。
- 将数据库放到表中,表再放到库中。
- 一个数据库中可以有多个表,每一个表都有一个名字,用来表示自己,表明具有唯一性。
- 表具有一些特性,这些特性定义了数据再表中如何存储,类似Java和Python中类的设计。
名词:表,记录,字段
- E-R(entity-relationship,实体-联系)模型中有三个主要概念:实体集、属性、联系集。
- 一个实体集(class)对应于数据库中的一个表(table),
- 一个实体(instance)则对应数据库表中的一行(row),也称为记录(record)。
- 一个属性(attribute)对应于数据表中的一列(column),也称为一个字段(field).
表的关联关系
- 表与表之间的数据记录有关系(relationship)。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。
- 四种关系:一对一、一对多、多对多、自我引用。
SQL概述
SQL的分类
SQL语言在功能上主要分为如下3个类:
DDL(Data Definition Languages 、数据定义语言):
这些语句定义了不同的数据库,表,视图,索引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构。
DML(Data Manipulation Language、数据操作语言):
用于添加、删除、更新、查询数据库记录,并检查完整性。
DCL(Data Control Language、数据控制语言):
用于定义数据库,表,字段,用户的访问权限和安全级别。
因为使用数据库时,查询语句使用的非常频繁,所有有很多人将查询语句独立出来成一类:DQL(数据库查询语言)。
SQL的规则和规范
- SQL可以写在一行或多行。为了提高可读性,各子句分行写,必要时使用缩进。
- 每条命令以;或\g 或\G结束。
- 关键字不能被缩写也不能分行
- 关于标点符号:
- 必须保证所有的(),单引号,双引号是成对的。
- 必须使用英文状态下的半角输入方式。
- 字符串型的日期时间类型的数据可以使用单引号( ' ' )表示。
- 列的别名,尽量使用双引号( " " ),而且不建议省略as关键字。
SQL规范
- MySQL在Windows环境下是大小写不敏感的。
- MySQL在Linux环境下是大小小敏感的。
- 数据库名,表名,列的别名,变量名是严格区别大小写的
- 关键字,函数名,字段名(列名),别名是忽略大小写的。
- 推荐采用统一的书写规范:
- 数据库名,表名,表别名,字段名,字段别名等都是小写。
- SQL关键字,函数名,绑定变量都是大写。
SQL注释和命名规则
SQL注释
单行注释:#注释文字
单行注释: -- 注释文字 (-- 符号后需要加一个空格)
多行注释:/* 注释文字*/
命名规则
- 数据库名,表名不得超过30个字符,变量名限制为29个。
- 必须只能包含A-Z, a-z , 0-9 ,_ ,共63个字符。
- 数据库名,表名,字段名等对象名中间不要包含空格
- 同一个MySQL软件中,数据库不能同名,一个库中的表名,一个表中的字段名也一样不能同名。
- 必须保证你自定义的字段没有和关键字,保留字,数据库系统或常用方法冲突。如果坚持使用。需要在SQL语句中使用``(着重号)引起来。
- 保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性,假如数据类型在一个表里是整数,那在另一个表里可就别变成字符型了。