MySQL数据库概述与基础

存储数据的方式

在数据库领域,存储数据的方式多种多样,主要包括以下几种:

  1. 变量和列表 :
    • 变量:在编程语言中用于存储单个数据项。
    • 列表(或数组):用于存储一系列有序的数据项。
  2. 文件 :
    • 将数据以文本或二进制形式存储在文件中,如CSV、JSON、XML等格式。
  3. 数据库 :
    • 数据库是专门用于存储、管理和检索大量数据的系统。它提供了更加复杂的数据组织、访问和安全性控制功能。
DBMS 和 数据库的关系
  • DBMS(数据库管理系统):是一种用于创建、维护、管理和访问数据库的软件系统。它提供了数据的存储、查询、更新和删除等功能。
  • 数据库:是存储在DBMS中的数据的集合,包括数据表、视图、索引等对象。

DBMS与数据库的关系类似于操作系统与文件系统的关系,DBMS是管理数据库的软件系统,而数据库则是存储数据的实际场所。

关系型数据库与非关系型数据库
  • 关系型数据库:基于关系模型组织数据,以表格形式存储数据,并通过SQL(结构化查询语言)进行数据操作。常见的关系型数据库有MySQL、Oracle、SQL Server等。
  • 非关系型数据库(NoSQL):不遵循传统的关系模型,而是以键值对、列存储、文档存储或图形数据库等形式存储数据。非关系型数据库更适合处理大量非结构化或半结构化数据,如MongoDB、Redis、Cassandra等。
常用的数据库
  • MySQL:开源的关系型数据库管理系统,广泛应用于Web开发中。
  • Oracle:商业化的关系型数据库管理系统,功能强大,适用于大型企业级应用。
  • SQL Server:微软开发的关系型数据库管理系统,与Windows平台紧密集成。
  • MongoDB:非关系型数据库中的代表,以文档形式存储数据,支持灵活的查询和索引。

环境搭建

安装MySQL

安装MySQL主要有两种方式:

  1. 小皮方式:使用小皮(HeidiSQL)等图形化工具进行一键安装和配置。
  2. 官网下载安装包:从MySQL官网下载对应版本的安装包,按照提示手动安装并配置环境变量。
SQL的可视化工具
  • SQLYog:一款流行的MySQL数据库管理工具,提供图形化界面,方便用户进行数据库操作。
  • Navicat:支持多种数据库系统的管理工具,包括MySQL、Oracle、SQL Server等。
  • DataGrip:JetBrains出品的数据库IDE,支持多种数据库,提供强大的代码补全和调试功能。
  • PyCharm:虽然主要是Python IDE,但也可以通过插件支持数据库操作,如DataGrip插件。

SQL语法介绍

通用语法
  1. 语句格式:可以写一行或多行,以分号(;)结尾。
  2. 阅读性:空格、换行、制表符(\t)等用于提高代码的可读性。
  3. 大小写:SQL语句不区分大小写,但通常关键字大写以提高可读性。
  4. 注释 :
    • --:单行注释。
    • #:在某些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语句
  • 单表查询 :
    • 完整格式:

      sql 复制代码
      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)。
    • 聚合函数类
相关推荐
小白男神3 天前
MySQL进阶学习四(存储过程、游标、触发器)
mysql
这个DBA有点耶3 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
kybs19913 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
程序猿_极客3 天前
【免费】分享一套优质的基于SSM的校园失物招领系统的设计与实现,源码+文档+视频详解(讲解)
java·mysql·ssm·课程设计·失物招领系统
于平安3 天前
MySQL-触发器
数据库·mysql
大猫和小黄3 天前
MySQL锁与MVCC深度解析
mysql·mvcc·锁
数据库小学妹3 天前
MySQL库存扣减实战:原子UPDATE、分桶方案与锁范围分析
数据库·后端·mysql
Linux-lucky3 天前
39-41-Linux学习之旅之redis缓存基础与NFS基础
linux·运维·mysql·ubuntu
于平安3 天前
MySQL-变量,流程控制与游标
数据库·mysql