0. 相关概念
~ DB / RDB - relational database
~ 关系型数据库管理系统 DBMS / RDBMS - relational database management system
~ 数据库管理员 DBA - database administrator
~ DBS - database system
~ 结构性查询语言/不仅仅是sql SQL / NoSQL - structured query language / not only SQL
- 键值对保存数据 KV数据库 - Redis / DynamoDB - 性能极好 - 游戏开发 / IoT应用 / 实时分析
- 体量大的低价值数据库 文档数据库 - MongoDB / DynamoDB / CouchDB - 价值低体量大 / 扩展能力 - 内容管理 / 日志处理 / 实时协作同步
- 列族数据库 - Cassandra / HBase - 大数据场景下提数性能好 / 实时查询
- 图数据库 - Neo4j / MemGraph - Cypher - 社交网络 / 推荐系统 / 流数据处理
- 时序数据库 - InfluxDB / Prometheus / DolphinDB - 时间序列分析 - 金融 / 监控
- 搜索引擎 - ElasticSearch / Solr - 倒序索引 - 全文检索
1. 关系型数据库的特征
~ 理论基础 - 关系代数(集合论、一阶逻辑、关系运算)
~ 具体表象 - 用二维表组织数据
- 表 - 实体(entity)- 关系(relation)
- 行 - 记录(record)- 元组(tuple)
- 列 - 字段(field)- 属性(attribute)
- 主键(primary key)
- 外键(foreign key)
- 行数 - 集合的势(cardinality)
- 列数 - 集合的度(degree)
- 取值范围 - 域(domain)
~ 编程语言 - 结构化查询语言 - SQL
- 数据定义语言 - DDL - create / drop / alter / rename / truncate
- 数据操作语言 - DML - insert / delete / update / select 插入/删除/更新/查询
- 数据控制语言 - DCL - grant / revoke
- 事务控制语言 - TCL - start transaction / commit / rollback
2. 关系型数据库相关产品
~ Oracle
~ MySQL
~ IBM DB2
~ Microsoft SQLServer
~ PostgreSQL
~ MariaDB
3. MySQL相关知识
~ 性能好、成本低、可靠性高
~ LAMP --> Linux + Apache + MySQL + PHP
~ MySQL的SQL方言跟大数据平台的HiveSQL相似度最高
~ 安装和启动
- Windows环境 - MySQL Installer - Windows服务 - MySQL80
- macOS环境 - MySQL Server / MySQL Workbench - 系统设置 - MySQL
- Linux环境 - CentOS / Redhat - 包管理工具RPM
~ 连接MySQL服务器
- 命令行客户端 - mysql -h localhost -u root -p
- 图形化客户端
~ Workbench - 功能比较完备,界面不够漂亮 - 官方工具
~ Navicat - 付费工具,界面漂亮,功能比较强大 - PremiumSoft
~ SQLyog - 付费/社区,功能比较强大,界面一般 - Webyog
~ DataGrip - 支持多种数据库,智能代码编辑器,资源占用高 - JetBrains
4. MySQL命令
~ show - 显示相关信息
~ help - 获取帮助信息
~ system - 调用系统命令
~ source - 执行SQL脚本
~ edit - 打开文本编辑器
~ quit - 退出客户端
5. 使用DDL建库建表
~ 创建数据库
create database db_name default character set utf8mb4;
~ 删除数据库
drop database if exists db_name;
~ 切换上下文
use db_name;
~ 创建二维表
create table table_name
(
field_name data_type not null,
field_name data_type default x, 字段名,数据类型
...
primary key (field_name) 约束
);
指定重音、大小写不敏感,是默认的
~ 删除二维表
drop table if exists table_name;
~ 修改二维表
- 添加列
alter table table_name add column field_name data_type; column可以省略
- 删除列
alter table table_name drop column field_name;
- 修改列
alter table table_name modify column field_name data_type;
alter table table_name change column old_field new_field data_type;
- 添加约束
alter table table_name add constraint ...;
- 删除约束
alter table table_name drop constraint ...;
- 修改表名
alter table old_table_name rename to new_table_name;
6. SQL数据类型
==~ help获取帮助信息==
help 'data types'; 查看数据类型
help 'decimal';
help 'varchar';
https://devdocs.io/mariadb/
~ 整数 - tinyint / smallint短整数 / mediumint / int / bigint长整数
1字节 2字节 3字节 4字节 8字节
int / integer - 取值范围从 -2^31 到 2^31-1
int unsigned - 无符号整数 - 只能表示0和正数 - 取值范围从 0 到 2^32-1
int(4) zerofill - 11 --> 0011 / 123 ---> 0123 / 1234 ---> 1234 4位整数,不足用0填充
----------------------------------------------------------------
bigint - 取值范围从 -2^63 到 2^63-1
bigint unsigned - 只能表示0和正数 - 取值范围从 0 到 2^64-1
----------------------------------------------------------------
smallint - 取值范围从 -32768 到 32767
smallint unsigned - 只能表示0和正数 - 取值范围从 0 到 65535
~ 小数 - float / double / numeric / decimal / dec
decimal(M,D) / numeric - M位有效数字,小数点后面有D位有效数字 decimal(4,2)99.99
最大值:M - 65, D - 30
默认值:M - 10, D - 0
~ 字节串 - binary / varbinary - 二进制数据 固定/可变
~ 字符串 - char / varchar
char(M) / charater - 定长字符串 - 255
varchar(M) / character varying - 变长字符串 - 65535 ---> utf8mb4 ---> varchar(16383) 65535/4=16383
经验:不要把大文本或大二进制数据放到数据库二维表中,比较好的做法是保存文件的资源路径
~ 日期和时间 - date / time / datetime / timestamp
date - 日期 - 1998-05-08
time - 时间 - 14:25:39
datetime - 日期时间 1998-05-08 14:25:39
~ 其他类型
boolean - tinyint - 1 / 0
enum / set - 有限选项 - enum('男', '女') / enum('东', '南', '西', '北') 枚举/集合{MySQL方言
longtext / longblob - 文本大对象(CLOB)/ 二进制大对象(BLOB)- 单列4G
json - JSON数组 / JSON对象 - [1, 2, 3] / {'name': '骆昊', 'age': 43} - 4G
7. 表关系的建立
~ 一对一 - 多对一的特例,可以将任何一方视为多添加外键列,再给外键列加唯一约束
~ 一对多 - 在多的一方添加外键列
~ 多对多 - 创建中间表,将多对多关系变成两个多对一关系
8. 使用DML实现写数据操作
~ 插入数据 - inser
insert into table_name
(field_name, field_name, ...)
values
(value, value, ...);
~ 删除数据 - delete
delete from table_name
where key = ...;
~ 更新数据 - update
update table_name
set field = value
, field = value
where key = ...;