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)
    • 聚合函数类
相关推荐
i道i5 小时前
MySQL win安装 和 pymysql使用示例
数据库·mysql
Oak Zhang7 小时前
sharding-jdbc自定义分片算法,表对应关系存储在mysql中,缓存到redis或者本地
redis·mysql·缓存
久醉不在酒8 小时前
MySQL数据库运维及集群搭建
运维·数据库·mysql
WindFutrue8 小时前
使用Mybatis向Mysql中的插入Point类型的数据全方位解析
数据库·mysql·mybatis
一只爱撸猫的程序猿9 小时前
一个简单的Linux 服务器性能优化案例
linux·mysql·nginx
计算机毕设源码qq-38365310419 小时前
(附项目源码)Java开发语言,215 springboot 大学生爱心互助代购网站,计算机毕设程序开发+文案(LW+PPT)
java·开发语言·spring boot·mysql·课程设计
袁庭新10 小时前
Cannal实现MySQL主从同步环境搭建
java·数据库·mysql·计算机·java程序员·袁庭新
爱学习的白杨树10 小时前
MySQL中有哪几种锁?
数据库·mysql
Stara051113 小时前
Git推送+拉去+uwsgi+Nginx服务器部署项目
git·python·mysql·nginx·gitee·github·uwsgi
不爱学习的啊Biao13 小时前
初识mysql数据库
数据库·mysql·oracle