当前位置: 首页 > news >正文

Mysql数据库——第一阶段

文章目录

  • 一、数据库基础概念
  • 二、MySQL 核心概念
    • 1. 数据库(Database)
    • 2. 表(Table)
    • 3. 字段(Column)
    • 4. 记录(Row)
    • 5. 主键(Primary Key)
    • 6.常用数据类型汇总表
  • 三、MySQL 基本操作
    • 1. 数据库操作
    • 2. 表操作
  • 四、MySQL 增删改查(CRUD)操作
    • 1. 新增数据(Create)
    • 2. 查询数据(Read)
    • 3. 更新数据(Update)
    • 4. 删除数据(Delete)
  • 五、多表查询
    • 1. 多表查询的基础:表间关系
    • 2. 多表查询的核心语法:JOIN 关键字
    • 3.多表查询的进阶操作
    • 4.多表查询的注意事项
  • 六、第二阶段用到的mysql知识点梳理:
    • (一)sql注释区别
    • (二)数据库元信息

在数字化时代,数据已成为核心资产,而数据库则是管理这些数据的 “仓库”。无论是网站后台、移动应用还是企业系统,都离不开数据库的支持。本文将带你走进数据库世界,重点以最流行的 MySQL 为例,讲解基础知识点及核心操作。

一、数据库基础概念

什么是数据库?

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。它就像一个电子化的文件柜,允许用户对数据进行新增、查询、更新、删除等操作。

数据库的类型

目前主流数据库可分为两类:

  • 关系型数据库:采用表格(二维表)结构存储数据,通过主键关联不同表,代表有 MySQL、Oracle、SQL Server 等。
  • 非关系型数据库:不采用表格结构,数据存储形式灵活,代表有 MongoDB(文档型)、Redis(键值型)等。

为什么选择 MySQL?
MySQL 是一款开源的关系型数据库管理系统(RDBMS),具有以下优势:

  • 开源免费,成本低
  • 性能稳定,处理速度快
  • 跨平台,支持 Windows、Linux 等系统
  • 社区活跃,文档丰富
  • 兼容性好,支持多种编程语言

下载地址

二、MySQL 核心概念

1. 数据库(Database)

数据库是表的集合,一个 MySQL 服务器可以管理多个数据库。例如:一个电商系统可能包含user(用户库)、order(订单库)等多个数据库。

2. 表(Table)

表是数据库中存储数据的基本单位,由行和列组成,类似 Excel 表格。例如:users表可存储用户信息。

3. 字段(Column)

表中的列称为字段,每个字段代表数据的一个属性。例如:users表可能包含id、name、age等字段。

4. 记录(Row)

表中的行称为记录,每条记录代表一个具体的数据条目。例如:users表中id=1,name=“张三”,age=25就是一条记录。

5. 主键(Primary Key)

用于唯一标识表中每条记录的字段,通常为id字段,值不可重复且不能为空。

6.常用数据类型汇总表

类型分类数据类型长度/字节主要特点适用场景
整数类型TINYINT1字节范围:-128127(有符号);0255(无符号)状态标记、性别(1/2)等
INT4字节范围:-2147483648~2147483647(有符号)常用ID、数量统计等
BIGINT8字节范围:-9e18~9e18(有符号)大整数、订单号、大数据量计数
小数类型DECIMAL(M,D)可变M为总位数,D为小数位数,精确计算金额、价格等需精确的值
FLOAT4字节单精度浮点数,精度约6-7位非精确科学计算
DOUBLE8字节双精度浮点数,精度约15-17位高精度科学计算
字符串类型CHAR(N)0-255字符固定长度,查询效率高手机号、身份证号等固定长度字符串
VARCHAR(N)0-65535字符可变长度,节省空间用户名、地址等长度不固定的字符串
TEXT0-65535字符存储长文本,不计入行长度限制文章内容、评论等
日期时间类型DATE3字节格式:YYYY-MM-DD,仅存储日期生日、注册日期等
DATETIME8字节格式:YYYY-MM-DD HH:MM:SS,不受时区影响订单时间、发布时间等
TIMESTAMP4字节格式:YYYY-MM-DD HH:MM:SS,受时区影响,可自动更新最后登录时间、数据更新时间
特殊类型BOOLEAN1字节本质为TINYINT(1),存储0(假)/1(真)逻辑判断(启用/禁用、是/否)
ENUM-从预定义列表中选择一个值性别(男/女)、状态(待审核/已通过)等
JSON-存储JSON格式数据,支持嵌套结构配置信息、半结构化数据

三、MySQL 基本操作

以下操作假设你已安装 MySQL 并通过客户端(如 MySQL Command Line、Navicat 等)连接到服务器。

1. 数据库操作

创建数据库

-- 创建名为testdb的数据库,指定字符集为utf8mb4(支持中文)
CREATE DATABASE testdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

查看所有数据库

SHOW DATABASES;

使用数据库

USE testdb; -- 切换到testdb数据库

删除数据库

DROP DATABASE testdb; -- 谨慎操作!会删除整个数据库及其中所有数据

2. 表操作

创建表

以创建users表为例:

CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT, -- 自增主键name VARCHAR(50) NOT NULL, -- 用户名,非空age INT, -- 年龄,可空email VARCHAR(100) UNIQUE, -- 邮箱,唯一值created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 创建时间,默认当前时间
);

查看所有表

SHOW TABLES;

查看表结构

DESCRIBE users; -- 或简写为 DESC users

删除表

DROP TABLE users; -- 谨慎操作!会删除表及所有数据

四、MySQL 增删改查(CRUD)操作

CRUD 是数据库操作的四大核心:Create(新增)、Read(查询)、Update(更新)、Delete(删除)。

1. 新增数据(Create)

使用INSERT语句插入数据:

-- 插入完整字段数据
INSERT INTO users (name, age, email) 
VALUES ('张三', 25, 'zhangsan@example.com');-- 插入部分字段(其他字段使用默认值)
INSERT INTO users (name, email) 
VALUES ('李四', 'lisi@example.com');-- 批量插入
INSERT INTO users (name, age, email) 
VALUES ('王五', 30, 'wangwu@example.com'),('赵六', 28, 'zhaoliu@example.com');

2. 查询数据(Read)

使用SELECT语句查询数据,这是最常用也最复杂的操作:

查询所有数据

SELECT * FROM users; -- *表示查询所有字段

查询指定字段

SELECT name, age FROM users; -- 只查询name和age字段

带条件查询

-- 查询年龄大于25的用户
SELECT * FROM users WHERE age > 25;-- 查询name为"张三"且age=25的用户
SELECT * FROM users WHERE name = '张三' AND age = 25;

排序查询

-- 按年龄升序排列(默认ASC)
SELECT * FROM users ORDER BY age;-- 按年龄降序排列
SELECT * FROM users ORDER BY age DESC;

限制查询结果

-- 只查询前2条记录
SELECT * FROM users LIMIT 2;-- 从第2条开始(索引从0开始),查询3条记录
SELECT * FROM users LIMIT 1, 3;

3. 更新数据(Update)

使用UPDATE语句更新数据,务必加WHERE条件,否则会更新所有记录:

-- 将id=1的用户年龄改为26
UPDATE users 
SET age = 26 
WHERE id = 1;-- 同时更新多个字段
UPDATE users 
SET age = 27, email = 'new_zhangsan@example.com' 
WHERE id = 1;

4. 删除数据(Delete)

使用DELETE语句删除数据,同样需要谨慎使用WHERE条件:

-- 删除id=4的用户
DELETE FROM users WHERE id = 4;-- 删除年龄小于18的用户
DELETE FROM users WHERE age < 18;

注意:DELETE语句会删除记录但保留表结构,若要清空表且重置自增 ID,可使用TRUNCATE TABLE users;

五、多表查询

在实际数据库应用中,数据往往分散在多个表中(如用户表、订单表、商品表),多表查询正是通过表间关联关系,将分散的数据整合起来的核心操作。下面以 MySQL 为例,介绍多表查询的核心概念和常用操作。

1. 多表查询的基础:表间关系

多表查询的前提是表之间存在关联关系,通常通过外键(Foreign Key) 实现:

  • 一对一:如users表(用户基本信息)与user_profiles表(用户详细资料),一个用户对应一条详细资料。
  • 一对多:如users表与orders表,一个用户可有多条订单(orders表中用user_id关联users表的id)。
  • 多对多:如students表与courses表,通过中间表student_courses(含student_id和course_id)关联。

2. 多表查询的核心语法:JOIN 关键字

多表查询主要通过JOIN关键字实现,根据关联逻辑不同,分为以下几类:

1. 内连接(INNER JOIN)

只返回两表中关联条件匹配的记录(即 “交集”)。

语法:

SELECT 字段列表
FROM1
INNER JOIN2 
ON1.关联字段 =2.关联字段;

示例:查询用户及其订单信息(只显示有订单的用户)

SELECT u.id AS 用户ID,u.name AS 用户名,o.order_no AS 订单号,o.create_time AS 下单时间
FROM users u  -- 别名u
INNER JOIN orders o  -- 别名o
ON u.id = o.user_id;  -- 关联条件:用户ID=订单的用户ID

2. 左连接(LEFT JOIN)

返回左表所有记录,以及右表中与左表匹配的记录;右表无匹配时,显示NULL。

语法:

SELECT 字段列表
FROM 左表
LEFT JOIN 右表 
ON 左表.关联字段 = 右表.关联字段;

示例:查询所有用户及其订单(包括无订单的用户)

SELECT u.id AS 用户ID,u.name AS 用户名,o.order_no AS 订单号
FROM users u
LEFT JOIN orders o 
ON u.id = o.user_id;

3. 右连接(RIGHT JOIN)

返回右表所有记录,以及左表中与右表匹配的记录;左表无匹配时,显示NULL。

语法:

SELECT 字段列表
FROM 左表
RIGHT JOIN 右表 
ON 左表.关联字段 = 右表.关联字段;

示例:查询所有订单及对应用户(包括订单关联用户不存在的情况,如异常订单)

SELECT o.order_no AS 订单号,u.name AS 用户名
FROM users u
RIGHT JOIN orders o 
ON u.id = o.user_id;

4. 全连接(FULL JOIN)

返回左右两表所有记录,匹配的记录合并,不匹配的部分用NULL填充。
注意:MySQL 不直接支持FULL JOIN,可通过UNION组合左连接和右连接实现。

示例:

-- 左连接结果 + 右连接中左表无匹配的记录
SELECT u.id, o.order_no 
FROM users u LEFT JOIN orders o ON u.id = o.user_id
UNION
SELECT u.id, o.order_no 
FROM users u RIGHT JOIN orders o ON u.id = o.user_id;

3.多表查询的进阶操作

1. 多表连接(3 张及以上表)
通过连续JOIN关联多张表,核心是明确每张表的关联字段。

示例:查询订单、用户及商品信息(3 表关联)

SELECT u.name AS 用户名,o.order_no AS 订单号,p.name AS 商品名,od.quantity AS 购买数量
FROM orders o
INNER JOIN users u ON o.user_id = u.id  -- 订单关联用户
INNER JOIN order_details od ON o.id = od.order_id  -- 订单关联订单项
INNER JOIN products p ON od.product_id = p.id;  -- 订单项关联商品

2. 带条件的多表查询
JOIN后通过WHERE添加过滤条件,或在JOIN时通过ON细化关联条件。

示例:查询 2023 年下单的用户及订单

SELECT u.name, o.order_no
FROM users u
INNER JOIN orders o ON u.id = o.user_id
WHERE o.create_time BETWEEN '2023-01-01' AND '2023-12-31';

3. 结合聚合函数的多表查询

通过GROUP BY和聚合函数(COUNT/SUM等)统计关联数据。

示例:统计每个用户的订单总数

SELECT u.id AS 用户ID,u.name AS 用户名,COUNT(o.id) AS 订单总数  -- 统计订单数量
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
GROUP BY u.id, u.name;  -- 按用户分组

4.多表查询的注意事项

  • 使用表别名:通过AS给表起短别名(如users u),简化代码。
  • 避免笛卡尔积:若忘记写ON关联条件,会返回两表所有记录的组合(数据量 = 表 1 行数 × 表 2 行数),需特别注意。
  • 明确字段归属:当多表有同名字段(如id),必须通过 “表名。字段名” 指定(如u.id)。
  • 优先用内连接:内连接性能通常优于外连接,非必要时避免全连接。
  • 索引优化:关联字段(如外键user_id)建议建立索引,提升查询速度。

六、第二阶段用到的mysql知识点梳理:

(一)sql注释区别

符号类型适用数据库关键特点注入中常见用途
/**/多行注释几乎所有数据库可跨多行,需用/**/包裹替代空格、拆分关键字
--单行注释所有主流数据库仅单行有效,--后必须跟空格截断 SQL 语句,注释后续内容
#单行注释MySQL 等(非通用)仅单行有效,#后无需空格截断 SQL 语句(MySQL 环境)

(二)数据库元信息

元数据类别主要存储表核心字段作用说明示例查询
数据库信息schemataSCHEMA_NAME数据库名称(如业务库、系统库)sql SELECT SCHEMA_NAME FROM information_schema.schemata; (查询所有数据库名)
DEFAULT_CHARACTER_SET_NAME数据库默认字符集(如utf8mb4sql SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME FROM information_schema.schemata WHERE SCHEMA_NAME = 'jrlt'; (查询jrlt库的字符集)
表信息tablesTABLE_NAME表名(如用户表、订单表)sql SELECT TABLE_NAME FROM information_schema.tables WHERE table_schema = 'jrlt'; (查询jrlt库的所有表)
ENGINE表的存储引擎(如InnoDBsql SELECT TABLE_NAME, ENGINE FROM information_schema.tables WHERE table_schema = 'jrlt'; (查询jrlt库所有表的存储引擎)
CREATE_TIME表的创建时间sql SELECT TABLE_NAME, CREATE_TIME FROM information_schema.tables WHERE table_schema = 'jrlt' ORDER BY CREATE_TIME DESC; (按创建时间倒序显示表)
字段信息columnsCOLUMN_NAME字段名(如idusernamesql SELECT COLUMN_NAME FROM information_schema.columns WHERE table_schema = 'jrlt' AND table_name = 'users'; (查询jrlt.users表的所有字段)
DATA_TYPE/COLUMN_TYPE字段数据类型(如intvarchar(50)sql SELECT COLUMN_NAME, COLUMN_TYPE FROM information_schema.columns WHERE table_schema = 'jrlt' AND table_name = 'users'; (查询字段名和完整类型)
IS_NULLABLE/COLUMN_KEY是否允许为 NULL、是否为主键 / 唯一键sql SELECT COLUMN_NAME, IS_NULLABLE, COLUMN_KEY FROM information_schema.columns WHERE table_schema = 'jrlt' AND table_name = 'users'; (查询字段约束)
索引信息statisticsINDEX_NAME/COLUMN_NAME索引名、包含的字段sql SELECT INDEX_NAME, COLUMN_NAME FROM information_schema.statistics WHERE table_schema = 'jrlt' AND table_name = 'users'; (查询users表的所有索引及字段)
NON_UNIQUE是否为非唯一索引(0= 唯一,1= 非唯一)sql SELECT INDEX_NAME, NON_UNIQUE FROM information_schema.statistics WHERE table_schema = 'jrlt' AND table_name = 'users'; (查询索引是否唯一)
视图信息viewsVIEW_DEFINITION视图的定义 SQL 语句sql SELECT TABLE_NAME, VIEW_DEFINITION FROM information_schema.views WHERE table_schema = 'jrlt'; (查询jrlt库所有视图的定义)
权限信息user_privilegesGRANTEE/PRIVILEGE_TYPE被授权用户、权限类型(如SELECTDELETEsql SELECT GRANTEE, PRIVILEGE_TYPE FROM information_schema.user_privileges WHERE GRANTEE LIKE '%root%'; (查询root用户的权限)

文章转载自:

http://owN3YF78.hffpy.cn
http://Rt8vmhTF.hffpy.cn
http://v4VOuWpe.hffpy.cn
http://Zwaa8jgG.hffpy.cn
http://AOVYB1o5.hffpy.cn
http://LIw8hgdM.hffpy.cn
http://fJLRLBPi.hffpy.cn
http://hflh8Ooe.hffpy.cn
http://okXC5SuK.hffpy.cn
http://UaFZQSOQ.hffpy.cn
http://eK1LO1ZP.hffpy.cn
http://tOcp5k5V.hffpy.cn
http://vui8HOhc.hffpy.cn
http://VvSvAxK4.hffpy.cn
http://SO8nDWoe.hffpy.cn
http://Oo39ZXY8.hffpy.cn
http://WmgafO09.hffpy.cn
http://x72pRem4.hffpy.cn
http://zysTjRW9.hffpy.cn
http://ojybhdi2.hffpy.cn
http://sxMVWpjg.hffpy.cn
http://LjvDNouV.hffpy.cn
http://hx2fLdI9.hffpy.cn
http://BJTlpS0E.hffpy.cn
http://Ee0xJFQs.hffpy.cn
http://iW5hhNrP.hffpy.cn
http://bGjITdy5.hffpy.cn
http://G989qTL1.hffpy.cn
http://IpesglwF.hffpy.cn
http://ifOYmoqI.hffpy.cn
http://www.dtcms.com/a/371548.html

相关文章:

  • 10 qml教程-自定义属性
  • 万字详解网络编程之TCP/IP协议与UDP协议
  • Gitlab 配置自定义 clone 地址
  • 408考研——循环队列代码题常见套路总结
  • 「日拱一码」081 机器学习——梯度增强特征选择GBFS
  • 阿里云镜像地址获取,并安装 docker的mysql和nginx等服务,java,python,ffmpeg,go等环境
  • IPSec综合配置实验
  • 实现滚动到页面指定位置
  • Linux 系统监控 + 邮件告警实战:CPU、内存、IO、流量全覆盖
  • HarmonyOS 应用开发新范式:深入剖析 Stage 模型与 ArkTS 状态管理
  • Elasticsearch面试精讲 Day 11:索引模板与动态映射
  • 5G NR PDCCH之信号调制
  • Android --- AOSP下载及编译
  • C#中的托管资源与非托管资源介绍
  • 初识Vue
  • JSP到Tomcat特详细教程
  • 滑动窗口与双指针(1)——定长
  • Lua > OpenResty Lua Module
  • [LeetCode 热题 100] 32. 最长有效括号
  • Python IO编程——文件读写
  • fps:游戏玩法
  • S 4.1深度学习--自然语言处理NLP--理论
  • [NCTF2019]Fake XML cookbook
  • ARM体系结构学习②
  • 多环境配置切换机制能否让开发与生产无缝衔接?
  • SC3336 rgb sensor linux
  • 人工智能学习:Transformer架构
  • Android --- AOSP源码导入Android Studio
  • 华为HCIP-Datacom-Core Technology H12-831 书籍目录
  • (RDFS)随机深度特征选择方法解释:简而言之,RDFS主要针对的是恶意的服务器,它建立在客户端是诚实的前提下。