数据库
存储数据的演变过程
- 随意的将数据存到一个文件中,并且数据格式也是千差万别的,完全取决于我们自己
- 软件开发目录规范。限制了存储数据的具体位置
假设上述是一个单机游戏,那么每个人的游戏记录只会在自己的计算机上面保存
需求:将单机游戏做成联网的,每个人的电脑上都能获取游戏记录,如何解决?
将数据单独放在一台电脑上,其他人的电脑通过
socket
获取这台电脑上的数据
数据库的本质
数据库的本质就是一款基于网络通信的应用程序
其实每个人都可以开发一款数据库软件,因为它仅仅就是一个基于网络通信的应用程序,也就意味着数据库软件有很多很多
数据库的相关概念
名称 | 全称 | 简称 |
---|---|---|
数据库 | 存储数据的仓库,数据是有组织的进行存储 | DataBase(DB) |
数据库管理系统 | 操纵和管理数据库的大型软件 | DataBase Management System (DBMS) |
SQL | 操作关系型数据库的编程语言,定义了一套操作 | Structured Query Language (SQL) |
查看数据库最新排名: https://db-engines.com/en/ranking
Oracle
:大型的收费数据库,Oracle
公司产品,价格昂贵。MySQL
:开源免费的中小型数据库,后来Sun
公司收购了MySQL
,而Oracle
又收购了Sun
公司。 目前Oracle
推出了收费版本的MySQL
,也提供了免费的社区版本。SQL Server
:Microsoft
公司推出的收费的中型数据库,C#
、.net
等语言常用。PostgreSQL
:开源免费的中小型数据库。
-DB2
:IBM
公司的大型收费数据库产品。SQLLite
:嵌入式的微型数据库。Android
内置的数据库采用的就是该数据库。MariaDB
:开源免费的中小型数据库。是MySQL
数据库的另外一个分支、另外一个衍生产品,与MySQL
数据库有很好的兼容性。
关系型数据库(RDBMS
)
关系型数据库是现在应用最广泛的数据库。关系型数据库在 1969 年诞生,可谓历史悠久。和Excel
工作表一样,关系型数据库也采用由行和列组成的二维表来管理数据,所以简单易懂。同时,它还使用 SQL
(Structured Query Language,结构化查询语言)对数据进行操作。
传统的关系型数据库采用表格的存储方式,数据以行和列的方式进行存储,要读取和查询都十分方便。
-
数据之间彼此有关系或者约束
-
存储数据的表现形式通常是以表格存储
-
每个字段都会有存储类型的限制
name pwd sex 老杨 123 男 木易 321 男 库 =========》 文件夹 表 =========》 文件 记录 =========》 文件内一行行的数据
关系型数据库设计规则
- 一个数据库中可以有多个表,每个表都有一个名字,用来标识自己。表名具有唯一性。
- 表具有一些特性,这些特性定义了数据在表中如何存储,类似
Python
中 “类”的设计
优点
- 都是使用表结构,格式一致,易于维护。
- 使用通用的
SQL
语言操作,使用方便,可用于复杂查询。 - 数据存储在磁盘中,安全。
缺点
- 读写性能比较差,不能满足海量数据的高效率读写。
- 不节省空间。因为建立在关系模型上,就要遵循某些规则,比如数据中某字段值即使为空仍要分配空间。
- 固定的表结构,灵活度较低。
常见的关系型数据库有 Oracle
、DB2
、PostgreSQL
、Microsoft SQL Server
、Microsoft Access
和 MySQL
等
非关系型数据库
非关系型数据库,可看成传统关系型数据库的功能 阉割版本 ,基于键值对存储数据,不需要经过SQL
层的解析, 性能非常高 。同时,通过减少不常用的功能,进一步提高性能。
优点
- 非关系型数据库存储数据的格式可以是
key-value
形式、文档形式、图片形式等。使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。 - 速度快,效率高。
NoSQL
可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘。 - 海量数据的维护和处理非常轻松。
- 非关系型数据库具有扩展简单、高并发、高稳定性、成本低廉的优势。
- 可以实现数据的分布式处理。
缺点
- 非关系型数据库暂时不提供
SQL
支持,学习和使用成本较高。 - 非关系数据库没有事务处理,没有保证数据的完整性和安全性。适合处理海量数据,但是不一定安全。
- 功能没有关系型数据库完善。
常见的非关系型数据库有 Neo4j
、MongoDB
、Redis
、Memcached
、MemcacheDB
和 HBase
等
SQL
语句的由来
SQL(Structured Query Language,结构化查询语言)是用来操作关系型数据库的语言,使用 SQL 可以对数据库和表进行添加、删除、修改和查询等操作
任何基于网络通信的应用程序底层用的都是socket
既然是socket
通信,那么其他的编程语言都可以书写代码,作为socket
客户端来连接操作mysql
服务端。不同的语言代码是不一样的,那么如何解决不同语言之间的交流问题
- 让服务端兼容所有的语言
- 采用统一的语言(
SQL
语句)
服务端
- 基于
socket
通信 - 收发消息
SQL
语句
客户端
- 基于
socket
通信 - 收发消息
SQL
语句
SQL
分类
DDL
(Data Definition Languages、数据定义语言),这些语句定义了不同的数据库、表、视图、索 引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构- 主要的语句关键字包括
CREATE
、DROP
、ALTER
等
- 主要的语句关键字包括
DML
(Data Manipulation Language、数据操作语言),用于添加、删除、更新和查询数据库记录,并检查数据完整性- 主要的语句关键字包括
INSERT
、DELETE
、UPDATE
、SELECT
等 SELECT
是SQL
语言的基础,最为重要
- 主要的语句关键字包括
DCL
(Data Control Language、数据控制语言),用于定义数据库、表、字段、用户的访问权限和 安全级别- 主要的语句关键字包括
GRANT
、REVOKE
、COMMIT
、ROLLBACK
、SAVEPOINT
等
- 主要的语句关键字包括
因为查询语句使用的非常的频繁,所以很多人把查询语句单拎出来一类:
DQL
(数据查询语言)还有单独将
COMMIT
、ROLLBACK
取出来称为TCL
(Transaction Control Language,事务控制语言)
SQL
语言的规则与规范
SQL
可以写在一行或者多行。为了提高可读性,各子句分行写,必要时使用缩进- 每条命令以
;
或\g
或\G
结束 - 关键字不能被缩写也不能分行
- 关键字不能被缩写也不能分行
- 必须保证所有的
()
、单引号、双引号是成对结束的 - 必须使用英文状态下的半角输入方式
- 字符串型和日期时间类型的数据可以使用单引号
' '
表示 - 列的别名,尽量使用双引号
" "
,而且不建议省略as
- 必须保证所有的
SQL
大小写规范 (建议遵守)
- 在
Windows
环境下是大小写不敏感的 - 在
Linux
环境下是大小写敏感的- 数据库名、表名、表的别名、变量名是严格区分大小写的
- 关键字、函数名、列名(或字段名)、列的别名(字段的别名) 是忽略大小写的
- 推荐采用统一的书写规范
- 数据库名、表名、表别名、字段名、字段别名等都小写
SQL
关键字、函数名、绑定变量等都大写
命名规则
- 数据库、表名不得超过
30
个字符,变量名限制为29
个 - 必须只能包含
A–Z, a–z, 0–9, _
共63个字符 - 数据库名、表名、字段名等对象名中间不要包含空格
- 同一个
MySQL
软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名 - 必须保证你的字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,请在
SQL
语句中使用`(着重号)引起来 - 保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据类型在一个表里是整数,那在另一个表里可就别变成字符型了
注释
单行注释:#注释文字(MySQL特有的方式)
单行注释:-- 注释文字(--后面必须包含一个空格。)
多行注释:/* 注释文字 */