# SQL 笔记
# 概念
# 数据库基本概念
- 数据(data):描述事物的符号记录称为数据。
- 数据库(DataBase,DB):是长期存储在计算机内、有组织的、可共享的大量数据的集合,具有永久存储、有组织、可共享三个基本特点。
- 数据库管理系统(DataBase Management System,DBMS):是位于用户与操作系统之间的一层数据管理软件。
- 数据库系统(DataBase System,DBS):是有数据库、数据库管理系统(及其应用开发工具)、应用程序和数据库管理员(DataBase Administrator DBA)组成的存储、管理、处理和维护数据的系统。
- 实体(entity):客观存在并可相互区别的事物称为实体。
- 属性(attribute):实体所具有的某一特性称为属性。
- 码(key):唯一标识实体的属性集称为码。
- 实体型(entity type):用实体名及其属性名集合来抽象和刻画同类实体,称为实体型。
- 实体集(entity set):同一实体型的集合称为实体集。
- 联系(relationship):实体之间的联系通常是指不同实体集之间的联系。
- 模式(schema):模式也称逻辑模式,是数据库全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
- 外模式(external schema):也称子模式(subschema)或用户模式,它是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。
- 内模式(internal schema):内模式也称为存储模式(storage schema),一个数据库只有一个内模式。他是数据物理结构和存储方式的描述,是数据库在数据库内部的组织方式。
# 常用数据模型
- 层次模型(hierarchical model)
- 网状模型(network model)
- 关系模型(relational model)
- 关系(relation):一个关系对应通常说的一张表
- 元组(tuple):表中的一行即为一个元组
- 属性(attribute):表中的一列即为一个属性
- 码(key):表中可以唯一确定一个元组的某个属性组
- 域(domain):一组具有相同数据类型的值的集合
- 分量:元组中的一个属性值
- 关系模式:对关系的描述,一般表示为 关系名(属性 1, 属性 2, ..., 属性 n)
- 面向对象数据模型(object oriented data model)
- 对象关系数据模型(object relational data model)
- 半结构化数据模型(semistructure data model)
# 关系数据库
- 查询(R 为关系)
选择:σF(R) --F为选择条件- 投影:πA(R) --A 为 R 中的属性列
- 连接:R⋈S --S 为要连接的关系
- 除:R÷S --S 为被除的关系
- 并:R∪S --S 为要合并的关系
- 差:R-S
- 交:R∪S
- 笛卡尔积:R×S
- 运算符:∧ 与 ∨ 或 ¬ 非
# E-R 图
# 实体之间的联系
- 一对一联系(1:1)
- 一对多联系(1:n)
- 多对多联系(m:n)
# E-R 图
提示
E-R 图提供了表示实体型、属性和联系方法
- 实体用矩形表示,矩形内写明实体名
- 属性用椭圆表示,并用无向边将其与对应的实体型连接起来
- 联系用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁标上联系的类型(1:1、1:n 或 m:n)
# SQL 通配符
| 通配符 | 描述 |
|---|---|
| % | 替代一个或多个字符 |
| _ | 仅替代一个字符 |
| [charlist] | 字符列中的任何单一字符 |
| [^charlist] 或 [!charlist] | 不在字符列中的任何单一字符 |
# MySQL 常用数据类型
# 文本型
| 数据类型 | 描述 |
|---|---|
| CHAR(size) | 保存固定长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多 255 个字符。 |
| VARCHAR(size) | 保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。 |
# 数值型
| 数据类型 | 描述 |
|---|---|
| INT(size) | -2147483648 到 2147483647 常规。0 到 4294967295 无符号*。在括号中规定最大位数。 |
| FLOAT(size,d) | 带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。 |
| DOUBLE(size,d) | 带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。 |
# 日期型
| 数据类型 | 描述 |
|---|---|
| DATE() | 日期。格式:YYYY-MM-DD |
| DATETIME() | 日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS |
# 创建基本表
Create Table<表名>
(<列名> <数据类型> [列级完整性约束条件]
[,<列名> <数据类型> [列级完整性约束条件]]…
[,<表级完整性约束条件>]);
提示
主码约束:Primary key
唯一码约束:Uniqu
非空值约束:Not NULL
# 修改基本表
Alter Table<表名>
[Add [Column] <新列名><数据类型>[完整性约束]]
[Add <表级完整性约束>]
[Drop [Column] <列名> [Cascade(级联)|Restarict(限制)]] --删除列
[Drop Constraint<完整性约束名> [Cascade(级联)|Restarict(限制)]]
[Alter Column <列名> <数据类型>]; --修改数据类型
# 删除基本表
Drop Table<表名> [Cascade(级联)|Restarict(限制)];
# 增加数据
Insert
Into <表名> [(<属性列1> [,<属性列2>]…)]
Values(<数据1>[,<数据2>…]);
# 修改数据
Update <表名>
Set <列名>=<表达式> [,<列名>=<表达式>]…
[Where<条件>];
# 删除数据
Delete
From<表名>
[Where<条件>];
# 查询数据
Select[All|Distinct(去重复)] <目标表达式> [,<目标表达式>]…
From <表名> [,<表名>]…
[Where <条件表达式>]
[Group by <列名> [Having<条件表达式>]] --分组
[Order by <列名>[Asc(升序)|Desc(降序)]] --排序
# 分页查询
SELECT * FROM 表名 LIMIT (当前页数-1) * 分页大小,分页大小
提示
LIMIT 内不支持计算符,需要程序去计算
# 模式
# 创建模式
Create Schema <模式名>Authorization<用户名>
# 删除模式
Drop Schema<模式名><Cascade(级联)|Restarict(限制)>
# 视图
# 创建视图
Create View <视图名> [(列名 [,<列名>]…)]
As <子查询>
# 删除视图
Drop View <视图名> [Cascade(级联)]