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,用于存储整数。
  • 浮点型FLOATDOUBLE,用于存储小数。
  • 字符型VARCHAR(n),用于存储可变长度的字符串,n表示最大长度。
  • 日期类型DATEDATETIME,分别用于存储日期和时间。
SQL语句分类
  • DDL(数据定义语言) :用于定义数据库、数据表、字段等结构,如CREATEDROPALTERSHOW等。
  • DML(数据操纵语言) :用于操作表中的数据,如INSERTDELETEUPDATE等。
  • DQL(数据查询语言) :用于查询表中的数据,如SELECTFROMWHERE等。
  • DCL(数据控制语言) :用于定义数据库的安全性和完整性,如GRANTREVOKE等(此处仅作了解)。

实操

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)
    • 聚合函数类
相关推荐
xiaok3 小时前
GROUP BY进阶用法
mysql
李慕婉学姐3 小时前
【开题答辩过程】以《基于Android的健康助手APP的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
android·java·mysql
qq_12498707534 小时前
基于springboot健康养老APP的设计与实现(源码+论文+部署+安装)
java·spring boot·后端·mysql·微信小程序·毕业设计
亚林瓜子4 小时前
mysql命令行手动导入csv数据到指定表
数据库·mysql·gui·csv·cli·db·import
一分半心动4 小时前
lnmp架构 mysql数据库Cannot assign requested address报错解决
linux·mysql·php
ChristXlx5 小时前
Linux安装mysql(虚拟机适用)
linux·mysql
BullSmall5 小时前
Apache Doris 精细化调优配置指南
linux·运维·服务器·database
瀚高PG实验室5 小时前
timestampdiff (MYSQL)函数在Highgo DB中的写法
数据库·mysql·瀚高数据库
还是鼠鼠6 小时前
SQL语句执行很慢,如何分析呢?
java·数据库·mysql·面试
云和数据.ChenGuang6 小时前
批量给100台服务器装系统,还要完成后续的配置和软件部署
运维·服务器·开发语言·mysql