云计算百科
云计算领域专业知识百科平台

MySQL基础教程:全面理论与实践指南(一)

🌟 嗨,我是Lethehong!🌟

🌍 立志在坚不欲说,成功在久不在速🌍

🚀 欢迎关注:👍点赞⬆️留言收藏🚀

🍀欢迎使用:小智初学计算机网页IT深度知识智能体

🚀个人博客:Lethehong有一起互链的朋友可以私信我

✅GPT体验码:https://gitee.com/lethehong/chatgpt-share

✅GPT体验码:私信博主~免费领取体验码

Lethehong诚邀您加入社群,送您海量编程资源,DeepSeek资料包,各种线上线下活动等你来开启,快来占据你得一席之地吧! 

【人工智能教程】——人工智能学习者的未来战舰!这个平台用"星际探索"模式重构AI教育:从机器学习基础到多模态大模型实战,每个技术栈都化身可交互的太空舱。上周我在「Transformer空间站」通过修复对话系统的注意力漏洞,竟掌握了BERT的微调精髓!平台三大核心引擎:

  • 工业级沙盘:复刻字节跳动推荐算法系统,用真实点击数据训练你的排序模型
  • 智能调试舱:代码错误会被三维可视化,梯度消失问题竟用银河系粒子动画演示
  • 大厂AI工坊:开放京东智能客服训练框架,零距离接触千万级对话语料库 独创的「元宇宙研习」模式更震撼——戴上VR头盔即刻潜入神经网络内部,亲眼见证卷积核如何捕捉图像特征!新用户注册即送《AIGC实战宝典》+100小时Tesla V100算力卡,隐藏口令【AI_Captain】可解锁谷歌DeepMind课程解密版。
  • 点击启航:前言 – 人工智能教程 → 让你的AI能力光年跃迁!  

    优质专栏:

    热点时事 

    星辰瀚海——Linux秘境之操作系统 

    Python在手,bug溜走!码农的快乐,你不懂~ 

    目录

    一、MySQL简介与理论基础

    关系型数据库核心概念

    MySQL架构

    存储引擎

    MySQL数据类型

    二、数据库和表的基本操作

    数据库操作语法详解

     表操作语法详解

    三、增:INSERT 插入数据

    插入语法详解

    实际应用场景

    四、查:SELECT 查询数据

    SELECT语法详解

    排序与ORDER BY子句 

    分组和聚合函数 

    限制结果数量 

    模糊查询与LIKE操作符 

    正则表达式查询 

    实际应用场景

    五、改:UPDATE 更新数据

    UPDATE语法详解

    更新单个记录 

    更新多个字段 

    条件更新与表达式 

    多表更新 

    实际应用场景 

    六、删:DELETE 删除数据

    DELETE语法详解

    删除特定记录 

    条件删除 

    限制删除数量 

    多表删除 

    清空表 

    DELETE与TRUNCATE的区别

    实际应用场景

    七、总结


    一、MySQL简介与理论基础

    MySQL是世界上最流行的开源关系型数据库管理系统之一,广泛应用于网站、应用程序和企业级系统。它采用客户端/服务器架构,支持多用户环境,并基于SQL(结构化查询语言)标准。

    关系型数据库核心概念

  • 关系模型:数据以表格(二维表)形式存储,表之间通过关系连接

  • ACID特性:

    • 原子性(Atomicity):事务中的操作要么全部完成,要么全部不完成

    • 一致性(Consistency):事务执行前后,数据库从一个一致状态变到另一个一致状态

    • 隔离性(Isolation):并发执行的事务之间不会互相影响

    • 持久性(Durability):事务一旦提交,其结果将永久保存

  • MySQL架构

    MySQL采用多层架构设计:

  • 连接层:处理客户端连接请求

  • 服务层:包括查询解析、优化和缓存

  • 存储引擎层:负责数据的存储和提取

  • 文件系统层:将数据持久化到磁盘

  • 存储引擎

    MySQL支持多种存储引擎,每种都有特定的特性和用途:

    • InnoDB:默认存储引擎,支持事务、外键和行级锁

      CREATE TABLE example (id INT) ENGINE=InnoDB;

    • MyISAM:适合读密集型应用,支持全文索引

      CREATE TABLE logs (id INT, message TEXT) ENGINE=MyISAM;

    • Memory:将数据存储在内存中,速度极快但不持久

      CREATE TABLE temp_data (id INT) ENGINE=MEMORY;

    • Archive:适合存储和检索大量很少被查询的历史数据

      CREATE TABLE old_logs (id INT, log_text TEXT) ENGINE=ARCHIVE;

    MySQL数据类型

  • 数值类型:

    • INT:整数类型,4字节

    • TINYINT:小整数,1字节

    • BIGINT:大整数,8字节

    • FLOAT/DOUBLE:浮点数

    • DECIMAL:精确小数

  • 字符串类型:

    • CHAR(n):固定长度字符串

    • VARCHAR(n):可变长度字符串

    • TEXT:长文本

  • 日期和时间类型:

    • DATE:日期,格式'YYYY-MM-DD'

    • TIME:时间,格式'HH:MM:SS'

    • DATETIME:日期和时间,格式'YYYY-MM-DD HH:MM:SS'

    • TIMESTAMP:时间戳

  • 其他类型:

    • ENUM:枚举类型

    • SET:集合类型

    • BLOB:二进制大对象

  • 二、数据库和表的基本操作

    数据库操作语法详解

    — 创建数据库
    CREATE DATABASE [IF NOT EXISTS] mydb
    [CHARACTER SET charset_name]
    [COLLATE collation_name];

    — 查看所有数据库
    SHOW DATABASES;

    — 使用数据库
    USE mydb;

    — 删除数据库
    DROP DATABASE [IF EXISTS] mydb;

     表操作语法详解

    — 创建表
    CREATE TABLE students (
    id INT AUTO_INCREMENT PRIMARY KEY, — 主键,自动递增
    name VARCHAR(50) NOT NULL, — NOT NULL约束
    age INT CHECK (age > 0), — CHECK约束
    gender ENUM('男', '女'), — 枚举类型
    class VARCHAR(20),
    score FLOAT DEFAULT 0, — 默认值
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, — 自动记录创建时间
    INDEX idx_class (class) — 索引
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

    — 查看表结构
    DESCRIBE students;
    — 或
    SHOW COLUMNS FROM students;

    — 修改表结构
    ALTER TABLE students ADD COLUMN email VARCHAR(100);
    ALTER TABLE students MODIFY COLUMN name VARCHAR(100);
    ALTER TABLE students DROP COLUMN email;

    — 删除表
    DROP TABLE [IF EXISTS] students;

    三、增:INSERT 插入数据

    插入语法详解

    基本语法:

    INSERT INTO table_name [(column1, column2, …)]
    VALUES (value1, value2, …)[, (value1, value2, …), …];

    插入单条数据

    INSERT INTO students (name, age, gender, class, score)
    VALUES ('张三', 20, '男', '计算机科学1班', 89.5);

    插入多条数据

    INSERT INTO students (name, age, gender, class, score) VALUES
    ('李四', 19, '男', '计算机科学1班', 76.0),
    ('王五', 21, '男', '计算机科学2班', 92.5),
    ('赵六', 20, '女', '计算机科学2班', 85.0),
    ('钱七', 22, '女', '计算机科学1班', 79.5);

    INSERT的高级用法

    — 插入或更新(如果主键存在则更新)
    INSERT INTO students (id, name, score)
    VALUES (1, '张三', 95)
    ON DUPLICATE KEY UPDATE score = 95;

    — 从其他表插入数据
    INSERT INTO students_backup
    SELECT * FROM students WHERE class = '计算机科学1班';

    — 忽略错误继续执行
    INSERT IGNORE INTO students (id, name, age)
    VALUES (1, '张三', 20);

    实际应用场景

    当新学生入学时,需要将学生信息录入系统:

    — 新学期开始,添加一批新生
    INSERT INTO students (name, age, gender, class, score) VALUES
    ('刘备', 18, '男', '计算机1班', NULL), — 新生还没有成绩
    ('关羽', 19, '男', '计算机1班', NULL),
    ('张飞', 18, '男', '计算机1班', NULL);

    四、查:SELECT 查询数据

    SELECT语法详解

    基本语法:

    SELECT [DISTINCT] column1, column2, …
    FROM table_name
    [JOIN table_name2 ON join_condition]
    [WHERE condition]
    [GROUP BY column(s)]
    [HAVING group_condition]
    [ORDER BY column(s) [ASC|DESC]]
    [LIMIT offset, row_count];

    查询所有记录

    SELECT * FROM students;

    查询特定列

    SELECT name, age, score FROM students;

    条件查询与WHERE子句详解 

    — 查询计算机科学1班的学生
    SELECT * FROM students WHERE class = '计算机科学1班';

    — 查询成绩大于80的学生
    SELECT name, score FROM students WHERE score > 80;

    — 查询年龄在19到21岁之间的学生
    SELECT * FROM students WHERE age BETWEEN 19 AND 21;

    — 复合条件:AND, OR, NOT
    SELECT * FROM students
    WHERE (class = '计算机科学1班' OR class = '计算机科学2班')
    AND score >= 80
    AND NOT gender = '女';

    — NULL值处理
    SELECT * FROM students WHERE score IS NULL;
    SELECT * FROM students WHERE score IS NOT NULL;

    排序与ORDER BY子句 

    — 按成绩降序排列
    SELECT * FROM students ORDER BY score DESC;

    — 先按班级升序,再按成绩降序
    SELECT * FROM students ORDER BY class ASC, score DESC;

    — 按字段位置排序(不推荐,但需了解)
    SELECT name, age, score FROM students ORDER BY 3 DESC; — 按第3列(score)排序

    分组和聚合函数 

    — 计算每个班级的平均分
    SELECT class, AVG(score) as avg_score FROM students GROUP BY class;

    — 查找每个班级的最高分和最低分
    SELECT
    class,
    MAX(score) as highest_score,
    MIN(score) as lowest_score,
    COUNT(*) as student_count,
    SUM(score) as total_score,
    STDDEV(score) as score_deviation — 标准差
    FROM students
    WHERE score IS NOT NULL
    GROUP BY class;

    — HAVING子句(对分组结果进行筛选)
    SELECT class, AVG(score) as avg_score
    FROM students
    GROUP BY class
    HAVING avg_score > 80;

    限制结果数量 

    — 查询前3名学生
    SELECT * FROM students ORDER BY score DESC LIMIT 3;

    — 分页查询:每页5条,查询第2页
    SELECT * FROM students LIMIT 5, 5; — 偏移量5,返回5条
    — 或使用更现代的语法
    SELECT * FROM students LIMIT 5 OFFSET 5;

    模糊查询与LIKE操作符 

    — 查询名字中包含"张"的学生
    SELECT * FROM students WHERE name LIKE '%张%';

    — 查询以"计算机"开头的班级
    SELECT DISTINCT class FROM students WHERE class LIKE '计算机%';

    — 通配符说明
    — %:匹配任意数量的字符
    — _:匹配单个字符
    SELECT * FROM students WHERE name LIKE '张_'; — 匹配"张"后跟一个字符的名字

    正则表达式查询 

    — 查询名字中包含数字的学生
    SELECT * FROM students WHERE name REGEXP '[0-9]';

    — 查询名字以"张"或"王"开头的学生
    SELECT * FROM students WHERE name REGEXP '^[张王]';

    实际应用场景

    期末考试后,教师需要统计班级情况:

    — 查询每个班级的及格率
    SELECT
    class,
    COUNT(*) as total_students,
    SUM(CASE WHEN score >= 60 THEN 1 ELSE 0 END) as passed_students,
    ROUND(SUM(CASE WHEN score >= 60 THEN 1 ELSE 0 END) / COUNT(*) * 100, 2) as pass_rate
    FROM students
    WHERE score IS NOT NULL
    GROUP BY class;

    五、改:UPDATE 更新数据

    UPDATE语法详解

    基本语法:

    UPDATE table_name
    SET column1 = value1, column2 = value2, …
    [WHERE condition]
    [ORDER BY …]
    [LIMIT row_count];

    更新单个记录 

    — 更新张三的成绩
    UPDATE students SET score = 92.0 WHERE name = '张三';

    更新多个字段 

    — 李四转班并更新信息
    UPDATE students
    SET class = '计算机科学2班', age = 20
    WHERE name = '李四';

    条件更新与表达式 

    — 给所有90分以上的学生加5分奖励(但不超过100分)
    UPDATE students
    SET score = LEAST(score + 5, 100)
    WHERE score > 90;

    — 所有学生年龄增加1岁
    UPDATE students SET age = age + 1;

    — 使用CASE表达式进行条件更新
    UPDATE students
    SET score = CASE
    WHEN score < 60 THEN score + 5 — 不及格加5分
    WHEN score >= 60 AND score < 90 THEN score + 3 — 良好加3分
    ELSE score — 优秀不变
    END;

    多表更新 

    — 基于另一个表的数据更新当前表
    UPDATE students s
    JOIN student_extra_info sei ON s.id = sei.student_id
    SET s.email = sei.email, s.phone = sei.phone
    WHERE sei.update_flag = 1;

    实际应用场景 

    期中考试后,某些学生参加了补考,需要更新成绩:

    — 批量更新补考成绩
    UPDATE students
    SET score = CASE
    WHEN name = '李四' THEN 82.5
    WHEN name = '钱七' THEN 88.0
    ELSE score
    END
    WHERE name IN ('李四', '钱七');

    六、删:DELETE 删除数据

    DELETE语法详解

    基本语法:

    DELETE FROM table_name
    [WHERE condition]
    [ORDER BY …]
    [LIMIT row_count];

    删除特定记录 

    — 删除指定学生
    DELETE FROM students WHERE name = '赵六';

    条件删除 

    — 删除成绩不及格的学生
    DELETE FROM students WHERE score < 60;

    限制删除数量 

    — 删除成绩最低的3名学生
    DELETE FROM students
    ORDER BY score ASC
    LIMIT 3;

    多表删除 

    — 删除已经在毕业生表中的学生
    DELETE s FROM students s
    JOIN graduated_students g ON s.id = g.student_id;

    清空表 

    — 删除表中所有数据(逐行删除,可回滚)
    DELETE FROM students;

    — 或者(直接删除表并重建,效率更高,不可回滚)
    TRUNCATE TABLE students;

    DELETE与TRUNCATE的区别

  • 事务支持:DELETE支持事务回滚,TRUNCATE不支持

  • 速度:TRUNCATE通常更快

  • 自增值:TRUNCATE会重置AUTO_INCREMENT计数器

  • 触发器:DELETE会触发DELETE触发器,TRUNCATE不会

  • 实际应用场景

    学期结束,需要清理临时学生数据:

    — 删除已经毕业的学生
    DELETE FROM students WHERE id IN (
    SELECT id FROM graduated_students
    );

    — 假设要删除旧学期的数据并保留新学期数据
    — 创建备份
    CREATE TABLE students_new_semester AS
    SELECT * FROM students WHERE entry_year = 2025;

    — 清空原表
    TRUNCATE TABLE students;

    — 将新数据插回原表
    INSERT INTO students
    SELECT * FROM students_new_semester;

    — 删除临时表
    DROP TABLE students_new_semester;

    七、总结

    这篇文章全面介绍了MySQL数据库系统的核心知识,涵盖了MySQL的基础理论、架构和存储引擎,以及数据库与表的基本操作(创建、查看、修改、删除)。文章系统地讲解了SQL的四大操作:INSERT(数据插入)、SELECT(数据查询,包括条件查询、排序、分组、聚合等高级功能)、UPDATE(数据更新)和DELETE(数据删除),并为每种操作提供了丰富的语法示例和实际应用场景。这是一份适合从入门到进阶的MySQL学习指南,结构清晰,实例丰富,既包含了语法详解,又结合了实际场景应用,对于数据库初学者和需要查阅参考的开发者都具有很高的实用价值。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » MySQL基础教程:全面理论与实践指南(一)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!