概述
结构化查询语言](Structured Query Language)简称SQL,结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;
sql 语句就是对数据库进行操作的一种语言。
本教程有参考:廖雪峰教程
简单的说只要我们编写程序就要涉及到操作数据库,数据库就好比一个大仓库,比如一个电商网站需要把用户和商品信息存入数据库;或者一个手机游戏需要把用户的道具、通关信息存入数据库,都必须通过SQL来完成。
所以,现代程序离不开关系数据库,要使用关系数据库就必须掌握SQL。
本教程立不懂SQL的人在一周内学会SQL
SQL语言按照功能可以分为4大类 :
-
数据查询语言(DQL)(Data Query Language):称为"数据检索语句",从表中获得数据,确定数据怎样在应用程序给出。
其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。
-
数据定义语言(DDL)(Data Definition Language):用于改变数据库结构,包括创建、更改和删除数据库对象。
CREATE(create)—创建、ALTER(alter)—修改、DROP(drop)—删除
-
数据操纵语言(DML)(Data Manipulation Language):是最常见的SQL命令用于检索、删除、插入和修改数据
INSERT(insert)—添加、SELECT(select) –查询、UPDATE(update)—修改、DELETE(delete)—删除
-
数据控制语言(DCL)(Data Control Language):对用户或角色赋予权限以及收回权限授权(grant)、回收权限(revoke)
在事务方面还有一个:
-
事物控制语言(TCL)(Thing Control Language):
提交事物(commit)、事物节点(savepoint)、事物回滚(rollback)
数据库的分类:
数据库基于存储介质的不同分为两类:
- 关系型数据库(SQL)
- 非关系型数据库(NoSQL:Not Only SQL,不是关系型的数据库都叫做非关系型数据库)
目前,主流的关系数据库主要分为以下几类:
- 商用数据库,例如:Oracle,SQL Server,DB2等;
- 开源数据库,例如:MySQL,PostgreSQL等;
- 桌面数据库,以微软Access为代表,适合桌面应用程序使用;
- 嵌入式数据库,以Sqlite为代表,适合手机应用和桌面程序。
非关系型数据库:
memcached、mongodb、redis(同步到磁盘)
两种数据库的区别:
- 关系型数据库:安全(保存到磁盘基本不可能丢失),容易理解,比较浪费空间(二维表)
- 非关系型数据库:效率高,不安全(断电会丢失)
数据模型
数据库按照数据结构来组织、存储和管理数据,实际上,数据库一共有三种模型:
- 层次模型
- 网状模型
- 关系模型
层次模型就是以“上下级”的层次关系来组织数据的一种方式,层次模型的数据结构看起来就像一颗树:
网状模型把每个数据节点和其他很多节点都连接起来,它的数据结构看起来就像很多城市之间的路网:
关系模型把数据看作是一个二维表格,任何数据都可以通过行号+列号来唯一确定,它的数据模型看起来就是一个Excel表:
随着时间的推移和市场竞争,最终,基于关系模型的关系数据库获得了绝对市场份额
关系数据库的关系模型是基于数学理论建立的。 虽然讲起来挺复杂,但是,基于日常生活的关系模型却十分容易理解。
我们以学校班级为例,一个班级的学生就可以用一个表格存起来,并且定义如下:
ID | 姓名 | 班级ID | 性别 | 年龄 |
---|---|---|---|---|
小明 | 201 | M | 9 | |
2 | 小红 | 202 | F | 8 |
3 | 小军 | 202 | M | 8 |
4 | 小白 | 201 | F | 9 |
其中,班级ID对应着另一个班级表:
ID | 名称 | 班主任 |
---|---|---|
201 | 二年级一班 | 王老师 |
202 | 二年级二班 | 李老师 |
通过给定一个班级名称,可以查到一条班级记录,根据班级ID,又可以查到多条学生记录,这样,二维表之间就通过ID映射建立了“一对多”关系。
数据类型
对于一个关系表,除了定义每一列的名称外,还需要定义每一列的数据类型。关系数据库支持的标准数据类型包括数值、字符串、时间等:
名称 | 类型 | 说明 |
---|---|---|
INT | 整型 | |
BIGINT | 长整型 | 4字节整数类型,范围约+/-21亿 |
REAL | 浮点型 | 8字节整数类型,范围约+/-922亿亿 |
DOUBLE | 浮点型 | 4字节浮点数,范围约+/-1038 |
DECIMAL(M,N) | 高精度小数 | 8字节浮点数,范围约+/-10308 |
CHAR(N) | 定长字符串 | 由用户指定精度的小数,例如,DECIMAL(20,10)表示一共20位,其中小数10位,通常用于财务计算 |
VARCHAR(N) | 变长字符串 | 存储指定长度的字符串,例如,CHAR(100)总是存储100个字符的字符串 |
BOOLEAN | 布尔类型 | 存储True或者False |
DATE | 日期类型 | 存储日期,例如,2018-06-22 |
TIME | 时间类型 | 存储时间,例如,12:20:59 |
DATETIME | 日期和时间类型 | 存储日期+时间,例如,2018-06-22 12:20:59 |
上面的表中列举了最常用的数据类型。很多数据类型还有别名,例如,REAL
又可以写成FLOAT(24)
。还有一些不常用的数据类型,例如,TINYINT
(范围在0~255)。各数据库厂商还会支持特定的数据类型,例如JSON
。
选择数据类型的时候,要根据业务规则选择合适的类型。通常来说,BIGINT
能满足整数存储的需求,VARCHAR(N)
能满足字符串存储的需求,这两种类型是使用最广泛的。