存储数据的方式
在数据库领域,存储数据的方式多种多样,主要包括以下几种:
- 变量和列表:
- 变量:在编程语言中用于存储单个数据项。
- 列表(或数组):用于存储一系列有序的数据项。
- 文件:
- 将数据以文本或二进制形式存储在文件中,如CSV、JSON、XML等格式。
- 数据库:
- 数据库是专门用于存储、管理和检索大量数据的系统。它提供了更加复杂的数据组织、访问和安全性控制功能。
DBMS 和 数据库的关系
- DBMS(数据库管理系统):是一种用于创建、维护、管理和访问数据库的软件系统。它提供了数据的存储、查询、更新和删除等功能。
- 数据库:是存储在DBMS中的数据的集合,包括数据表、视图、索引等对象。
DBMS与数据库的关系类似于操作系统与文件系统的关系,DBMS是管理数据库的软件系统,而数据库则是存储数据的实际场所。
关系型数据库与非关系型数据库
- 关系型数据库:基于关系模型组织数据,以表格形式存储数据,并通过SQL(结构化查询语言)进行数据操作。常见的关系型数据库有MySQL、Oracle、SQL Server等。
- 非关系型数据库(NoSQL):不遵循传统的关系模型,而是以键值对、列存储、文档存储或图形数据库等形式存储数据。非关系型数据库更适合处理大量非结构化或半结构化数据,如MongoDB、Redis、Cassandra等。
常用的数据库
- MySQL:开源的关系型数据库管理系统,广泛应用于Web开发中。
- Oracle:商业化的关系型数据库管理系统,功能强大,适用于大型企业级应用。
- SQL Server:微软开发的关系型数据库管理系统,与Windows平台紧密集成。
- MongoDB:非关系型数据库中的代表,以文档形式存储数据,支持灵活的查询和索引。
环境搭建
安装MySQL
安装MySQL主要有两种方式:
- 小皮方式:使用小皮(HeidiSQL)等图形化工具进行一键安装和配置。
- 官网下载安装包:从MySQL官网下载对应版本的安装包,按照提示手动安装并配置环境变量。
SQL的可视化工具
- SQLYog:一款流行的MySQL数据库管理工具,提供图形化界面,方便用户进行数据库操作。
- Navicat:支持多种数据库系统的管理工具,包括MySQL、Oracle、SQL Server等。
- DataGrip:JetBrains出品的数据库IDE,支持多种数据库,提供强大的代码补全和调试功能。
- PyCharm:虽然主要是Python IDE,但也可以通过插件支持数据库操作,如DataGrip插件。
SQL语法介绍
通用语法
- 语句格式:可以写一行或多行,以分号(;)结尾。
- 阅读性:空格、换行、制表符(\t)等用于提高代码的可读性。
- 大小写:SQL语句不区分大小写,但通常关键字大写以提高可读性。
- 注释:
--
:单行注释。#
:在某些SQL方言中作为单行注释(MySQL中不常用)。/* 注释内容 */
:多行注释。
常用的数据类型
- 整型:
INT
,用于存储整数。 - 浮点型:
FLOAT
、DOUBLE
,用于存储小数。 - 字符型:
VARCHAR(n)
,用于存储可变长度的字符串,n表示最大长度。 - 日期类型:
DATE
、DATETIME
,分别用于存储日期和时间。
SQL语句分类
- DDL(数据定义语言):用于定义数据库、数据表、字段等结构,如
CREATE
、DROP
、ALTER
、SHOW
等。 - DML(数据操纵语言):用于操作表中的数据,如
INSERT
、DELETE
、UPDATE
等。 - DQL(数据查询语言):用于查询表中的数据,如
SELECT
、FROM
、WHERE
等。 - DCL(数据控制语言):用于定义数据库的安全性和完整性,如
GRANT
、REVOKE
等(此处仅作了解)。
实操
DDL语句
- 操作数据库:
- 增:
CREATE DATABASE [IF NOT EXISTS] 数据库名 [CHARSET '码表名'];
- 删:
DROP DATABASE 数据库名;
- 改:
ALTER DATABASE 数据库名 CHARSET '码表名';
- 查:
SHOW DATABASES;
、SHOW CREATE DATABASE 数据库名;
、SELECT DATABASE();
- 用(切库):
USE 数据库名;
- 增:
- 约束:
- 单表约束:
- 主键约束:
PRIMARY KEY
,非空且唯一,常结合AUTO_INCREMENT
使用。 - 唯一约束:
UNIQUE
,唯一但可以为空。 - 非空约束:
NOT NULL
,非空但可以重复。 - 默认约束:
DEFAULT
,添加数据时未指定值则使用默认值。
- 主键约束:
- 多表约束:
- 外键约束:
FOREIGN KEY
,用于建立表之间的关联。
- 外键约束:
- 单表约束:
- 操作数据表:
- 增:
CREATE TABLE [IF NOT EXISTS] 数据表名 (列名 数据类型 [约束], ...);
- 删:
DROP TABLE 数据表名;
- 改:
ALTER TABLE 旧表名 RENAME 新表名;
或RENAME TABLE 旧表名 TO 新表名;
- 查:
SHOW TABLES;
、DESC 数据表名;
、SHOW CREATE TABLE 数据表名;
- 增:
- 操作字段:
- 增:
ALTER TABLE 数据表名 ADD 新列名 数据类型 [约束];
- 删:
ALTER TABLE 数据表名 DROP 旧列名;
- 改:
ALTER TABLE 数据表名 MODIFY 旧列名 数据类型 [约束名];
或ALTER TABLE 数据表名 CHANGE 旧列名 新列名 数据类型 [约束名];
- 查:
DESC 数据表名;
- 增:
DML语句
- 操作表数据:
- 增:
- 单条:
INSERT INTO 数据表名 (列名1, 列名2...) VALUES (值1, 值2...);
- 多条:
INSERT INTO 数据表名 VALUES (值1, 值2...), (值1, 值2...);
- 单条:
- 删:
DELETE FROM 数据表名 WHERE 条件;
- 改:
UPDATE 数据表名 SET 列名=列值, ... WHERE 条件;
- 增:
DQL语句
- 单表查询:
- 完整格式:
SELECT [DISTINCT] 列名1 [AS] 别名, 列名2 [AS] 别名 ... FROM 数据表名 WHERE 组前筛选 GROUP BY 分组字段1, 分组字段2 ... HAVING 组后筛选 ORDER BY 排序字段1 [ASC|DESC], 排序字段2 [ASC|DESC] LIMIT 起始索引, 数据条数;
- 简单查询:
SELECT * FROM 数据表名 WHERE 条件;
- 聚合查询:使用
COUNT()
、MAX()
、MIN()
、AVG()
、SUM()
等聚合函数。 - 排序查询:
ORDER BY
子句用于排序查询结果。 - 分组查询:
GROUP BY
子句用于将查询结果按一个或多个列进行分组。 - 分页查询:
LIMIT
子句用于实现分页功能。
- 完整格式:
- 多表查询:
- 细节: 多表查询的精髓:就是把多张表拼接成一张表 去 进行单表查询.
- 交叉查询:
SELECT * FROM A, B;
(结果集为表的笛卡尔积)。 - 连接查询:
- 内连接:
SELECT * FROM A INNER JOIN B ON 关联条件;
或SELECT * FROM A, B WHERE 关联条件;
(结果集为表的交集)。 - 外连接:
- 左外连接:
SELECT * FROM A LEFT OUTER JOIN B ON 关联条件;
(结果集为左表全集+交集,无交集部分用Null填充)。 - 右外连接:
SELECT * FROM A RIGHT OUTER JOIN B ON 关联条件;
(结果集为右表全集+交集)。
- 左外连接:
- 内连接:
- 子查询:一个SQL语句的查询条件依赖于另一个SQL语句的查询结果。
- 自关联查询:表自己与自己进行关联查询,常用于处理具有层级关系的数据(如省市区)。
窗口函数
- 概述:窗口函数用于给表新增一列,新增的内容取决于与什么函数一起使用。
- 格式:
窗口函数 OVER(PARTITION BY 分组字段 ORDER BY 排序字段 ASC|DESC)
- 常用函数:
- 排序类:
ROW_NUMBER()
、RANK()
、DENSE_RANK()
、NTILE(n)
。 - 聚合函数类
- 排序类: