Mysql新手教程

Mysql新手教程
Nan Wu一、什么是数据库
想象我们的学校是一个超级大社区,每天都在产生海量信息:新生入学的档案、学生的成绩变动、图书借阅记录…… 这么多数据,如果像把杂物堆进仓库一样随意存放,找起来就像大海捞针。这时,数据库就像一位 “超级电子管家”,它能把这些数据分门别类整理得井井有条。
以学校学生信息管理为例,数据库会把每位同学的信息放进不同 “抽屉”—— 也就是表。一个 “抽屉” 专门存学生基本信息,比如姓名、年龄、班级,像小明的信息就有专属的一行记录;另一个 “抽屉” 存成绩,每次考试后,语文、数学等各科分数都会准确归档。而且,这些 “抽屉” 之间还会用学号这个 “密码钥匙” 关联起来,老师想查看小明的全部信息,数据库眨眨眼就能把分散在不同 “抽屉” 的数据快速整合。
图书馆的图书借阅系统更是数据库大显身手的舞台。每本书都有独一无二的 “身份证号”(ISBN 编码),当你想借《三体》时,数据库会立刻在庞大的 “书架地图” 里定位它的位置、查看是否被借出。借阅记录也会被详细记录,到了还书日期,数据库就像贴心小闹钟,提醒你及时归还。
更神奇的是,数据库不仅能 “存”,还能快速 “取” 和 “管”。比如校长想知道全校平均分最高的班级,数据库能瞬间扫描所有成绩 “抽屉”,计算并给出答案;图书馆管理员想统计最受欢迎的书籍,数据库一眼就能找出借阅次数最多的书目。它就像拥有超能力,让杂乱的数据变得有序,让信息查找和管理变得高效又轻松 。
在数据的浩瀚宇宙里,数据库家族就像一个庞大的 “数据管理联盟”,每个成员都有独特的 “看家本领”。这个家族主要分为三大门派:关系型数据库、非关系型数据库和向量数据库,它们就像不同类型的 “数据仓库”,各有专长,守护着不同场景下的数据秩序。
非关系型数据库是 “自由派”,更像是超大号的 “储物箱”,存放数据不拘一格。比如文档型数据库 MongoDB,能像收纳百变积木一样,轻松存下格式复杂的 JSON 数据;键值对数据库 Redis,就像个 “闪电快递柜”,能以毫秒级速度存取数据,常用于缓存热门内容。向量数据库则是 “新潮派”,它专为存储和处理向量数据而生,就像一位精通空间计算的 “数据魔法师”,在人工智能、推荐系统和图像检索等领域大放异彩。
关系型数据库是 “老牌派”,它的代表作品是 MySQL,而 MySQL 堪称 “关系型数据库门派” 的明星成员,它就像一位严谨又高效的 “数据管家”。关系型数据库讲究 “数据表格化”,就像用整齐的档案柜管理数据,每个表格都是一个 “档案夹”,数据以行和列的形式有序排列,通过 “主键” 和 “外键” 这些 “密码钥匙”,不同表格间的数据可以精准关联。
在 Web 开发领域,MySQL 是当之无愧的 “幕后英雄”。当你打开热门电商网站选购商品,点击查看商品详情、加入购物车时,MySQL 在后台迅速响应,精准调取商品信息、库存数据和用户偏好。它就像一个超级智能的 “库存管理员” 和 “用户喜好分析师”,确保页面流畅加载,数据准确无误,为你打造丝滑的购物体验。全球超半数的网站都依赖它,从个人博客到大型电商平台,都有它忙碌的身影。
在企业应用中,MySQL 更是 “中流砥柱”。大型企业每天产生海量的客户信息、交易记录和财务数据,MySQL 凭借强大的事务处理能力,像一位公正的 “数据法官”,确保每一笔数据操作都符合规则,维护数据的完整性和一致性。同时,它还能灵活应对高并发场景,即便在 “双十一” 这样的购物狂欢节,面对数以亿计的订单请求,也能稳定运行,高效处理数据,保障企业业务顺畅运转。凭借开源免费、性能卓越、易于扩展等优势,MySQL 成为众多企业搭建数据管理系统的首选,稳稳占据着数据库市场的重要席位 。
向量数据库是 “探索派”,它的代表作品是 Pinecone,它能像一位“数据探路者”,探索未知空间,挖掘隐藏在海量数据中的价值。以推荐系统为例,它能根据用户历史行为和兴趣,精准推荐与之相关的商品。再如图像识别,向量数据库能快速理解和比较图像中的特征向量,实现高效的图像检索。
在这个数据驱动的时代,数据库就像一位智慧的 “数据管家”,它帮助我们高效管理和利用海量信息。无论是学校的学生信息、图书馆的借阅记录,还是电商网站的商品数据,数据库都能让这些信息有序存储、快速检索、灵活分析,为我们的生活和工作提供强大的支持。
二、MySQL 基础知识
2.1 MySQL 特点
- 开源性:源代码公开,可自由使用、修改和分发,降低了开发成本。
- 高性能和可靠性:采用多线程、多用户架构,能高效处理大量并发连接和数据操作,并且支持多种存储引擎(如 InnoDB 和 MyISAM),可根据不同需求选择。
- 兼容性和移植性:能在 Windows、Linux、macOS 和 Unix 等多种操作系统上运行。
- 丰富特性:支持事务管理(确保数据完整性和一致性)、多种索引类型(提高查询速度)、视图(简化复杂查询)、存储过程和触发器(增强功能性和灵活性)以及全文检索(适用于文本搜索应用)。
- 安全性:提供多层次安全机制,包括用户权限管理、SSL 加密连接、数据加密等。
2.2 MySQL 发展史
2.2.1 萌芽期:三位极客的”车库创业”(1995-1999)
1995年,瑞典工程师Michael Widenius在自家车库里捣鼓出了MySQL的雏形。当时他只是想为自己开发的数据库应用找一个轻量级存储方案,却意外开创了开源数据库的新纪元。取名”MySQL”其实是个”家庭梗”——他用女儿My的名字+数据库(SQL)组合而成,就像给孩子起小名一样随性。
早期MySQL基于mSQL开发,但性能却青出于蓝。1996年发布的1.0版本只能处理简单查询,却在北欧中小企业中悄悄流行。1999年,Widenius与合伙人成立T.c.X公司,正式开启商业化之路,此时MySQL已能支持事务处理,初现”技术黑马”特质。
2.2.2 爆发期:搭上互联网快车的”开源逆袭”(2000-2008)
2000年是关键转折点:MySQL宣布采用GPL开源协议,瞬间吸引全球开发者。恰逢互联网泡沫时期,雅虎、谷歌等公司正为昂贵的Oracle数据库发愁,MySQL凭借”免费+高效”的组合拳迅速上位。2003年发布的5.0版本支持存储过程和触发器,标志着它从”玩具数据库”迈向企业级应用。
2008年,MySQL被Sun Microsystems以10亿美元收购,这让开源社区炸开了锅。但Sun的收购反而加速了技术迭代,同年发布的5.1版本引入分区表和事件调度器,在电商、社交平台等场景中大放异彩。当时淘宝每天处理数千万订单,背后的数据库正是MySQL集群。
2.2.3 震荡期:甲骨文收购引发的”开源保卫战”(2009-2013)
2009年,甲骨文收购Sun Microsystems,MySQL的命运蒙上阴影。甲骨文曾一度放缓开源更新,甚至被质疑想推动用户购买商业版。这引发了社区的强烈反弹:Widenius带头创立MariaDB分支,Percona等公司也推出优化版本,一场”开源保卫战”悄然打响。
但MySQL自身技术仍在前进:2010年发布的5.5版本引入InnoDB存储引擎作为默认引擎,彻底解决了事务处理性能瓶颈;2013年的5.6版本支持JSON数据类型,开始拥抱非结构化数据趋势。尽管面临分叉危机,MySQL在Web领域的占有率已超过50%。
2.2.4 转型期:云时代的”技术突围”(2014-2020)
2014年,MySQL 5.7版本发布,带来了JSON索引、窗口函数等重磅功能,正式向大数据领域进军。同年,甲骨文推出MySQL Cloud Service,将数据库搬上云端,亚马逊AWS、阿里云等也纷纷推出MySQL托管服务,数据库进入”云原生”时代。
2018年发布的8.0版本堪称里程碑:支持CTE(公共表表达式)、隐藏索引等高级特性,性能提升30%以上。此时MySQL已不再是单纯的关系型数据库,通过与Oracle Analytics等工具集成,开始扮演企业数据中枢的角色。
2.2.5 新纪元:开源生态与AI融合(2021至今)
如今MySQL已形成庞大的技术生态圈:
- 分支家族:MariaDB、Percona Server等分支持续优化
- 云原生:MySQL HeatWave支持实时分析,与Kubernetes深度集成
- AI赋能:2023年推出的MySQL 8.1支持向量数据库功能,可直接存储AI模型向量,在推荐系统、智能客服等场景中大显身手
截至2024年,MySQL在DB-Engine排名中稳居前三,全球超1000万家企业使用。从车库里的小项目到支撑万亿级交易的技术巨头,MySQL的发展史就是一部”开源改变世界”的活教材——它证明了技术普惠的力量,也成为无数开发者入门数据库的”启蒙老师”。
三、MySQL 数据库环境搭建
3.1 Windows 系统安装
- 下载 MySQL 安装程序:指导学生前往 MySQL 官方网站,根据系统版本下载合适的 MySQL 安装包(如.msi 格式)。
123网盘备用下载地址✈️,提取码:O9RH
- 安装过程
- 安装 Navicat for MySQL:下载 Navicat 安装程序并进行安装,按照提示完成软件安装过程。
123网盘备用下载地址✈️,提取码:mJSl - 连接数据库:打开 Navicat,新建 MySQL 连接,填写主机地址(如localhost)、端口号(默认 3306)、用户名(如 root)和密码,测试连接成功后即可连接到 MySQL 数据库。
四、MySQL 数据库基本操作
- 创建数据库和表:在 Navicat 中演示如何创建数据库和表,输入数据库名称、字符集等信息创建数据库;在数据库中创建表,定义表的字段名称、数据类型、主键等属性。
五、MySQL 数据类型
5.1 数值类型
- 整数类型:
- TINYINT(极小整数):占用 1 个字节,范围为 -128 到 127,适用于存储年龄、性别等取值范围较小的整数。
- SMALLINT(小整数):占用 2 个字节,范围为 -32768 到 32767,适用于存储年龄、用户 ID 等取值范围较小的整数。
- MEDIUMINT(中等整数):占用 3 个字节,范围为 -8388608 到 8388607,适用于存储年龄、用户 ID 等取值范围中等的整数。
- INT(整数):占用 4 个字节,范围为 -2147483648 到 2147483647,适用于存储年龄、用户 ID 等取值范围较大的整数。
- BIGINT(大整数):占用 8 个字节,范围为 -9223372036854775808 到 9223372036854775807,适用于存储年龄、用户 ID 等取值范围特别大的整数。
- 浮点类型:
- FLOAT(单精度浮点数):占用 4 个字节,范围为 -3.402823466E + 38 到 -1.175494351E - 38 和 1.175494351E - 38 到 3.402823466E + 38,适用于存储小数,不适合用于存储精确货币金额。
- DOUBLE(双精度浮点数):占用 8 个字节,范围为 -1.7976931348623157E + 308 到 -2.2250738585072014E - 308 和 2.2250738585072014E - 308 到 1.7976931348623157E + 308,适用于存储小数,不适合用于存储精确货币金额。
- DECIMAL(定点数):用于存储精确小数,定义时需指定精度和标度,如DECIMAL(10, 2)表示总位数为 10 位,小数部分为 2 位。
- 日期和时间类型:
- DATE(仅存储日期,格式为 YYYY - MM - DD):占用 3 个字节,范围为 ‘1000 - 01 - 01’ 到 ‘9999 - 12 - 31’,适用于存储生日、注册日期等日期信息。
- TIME(仅存储时间,格式为 HH:MM:SS):占用 3 个字节,范围为 ‘-838:59:59’ 到 ‘838:59:59’,适用于存储时间信息,如记录会议时间、课程时间等。
- DATETIME(存储日期和时间,格式为 YYYY - MM - DD HH:MM:SS):占用 8 个字节,范围为 ‘1000 - 01 - 01 00:00:00’ 到 ‘9999 - 12 - 31 23:59:59’,适用于存储订单创建时间、用户注册时间等信息。
- TIMESTAMP(时间戳,存储从 1970 年 1 月 1 日 00:00:00 UTC 到指定时间的秒数):占用 4 个字节,范围为 ‘1970 - 01 - 01 00:00:01’ 到 ‘2038 - 01 - 19 03:14:07’,适用于存储日志记录时间、数据变更时间等信息。
- 字符串类型
- CHAR:定长字符串类型,定义时需指定长度,如CHAR(10),无论实际存储字符串长度多少,都占用固定长度空间,适合存储长度固定的数据,如身份证号、邮编等。
- VARCHAR:可变长度字符串类型,实际存储时占用空间为字符串实际长度加 1 或 2 个字节(用于记录字符串长度),如VARCHAR(50),适合存储长度不固定的数据,如姓名、地址等。
- TEXT:用于存储较大文本数据,如文章内容、评论等,根据存储文本大小不同,有TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT等不同类型。
- BLOB:二进制大对象类型,用于存储二进制数据,如图像、音频、视频等,同样有TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB等不同类型。
- 其他类型:
- JSON类型:简单介绍JSON类型,用于存储 JSON 格式数据,在存储结构化数据且数据结构可能变化时非常有用;
- 空间数据类型(如POINT、LINESTRING、POLYGON等),用于存储地理空间数据,但在基础课程中不做深入讲解。
六、MySQL 数据操作
- 插入数据
- 插入单行数据:使用INSERT INTO语句向表中插入数据,例如向students表插入一条记录:
sql INSERT INTO students (name, age, gender) VALUES ('张三', 20, '男');
解释字段列表和值列表需一一对应,字符串和日期类型数据需用引号括起来。
插入多行数据:演示如何一次性插入多行数据,如:
sql INSERT INTO students (name, age, gender) VALUES ('李四', 22, '女'), ('王五', 21, '男');
- 插入单行数据:使用INSERT INTO语句向表中插入数据,例如向students表插入一条记录:
- 查询数据
- 基本查询:使用SELECT语句查询表中的所有数据,如
SELECT * FROM students;,查询指定字段数据,如SELECT name, age FROM students;。 - 条件查询:通过WHERE子句添加查询条件,如
SELECT * FROM students WHERE age > 20;,讲解常用的比较运算符(如>、<、=、!=、LIKE等)和逻辑运算符(如AND、OR、NOT)的使用。 - 排序查询:利用ORDER BY子句对查询结果进行排序,如
SELECT * FROM students ORDER BY age DESC;表示按年龄降序排列,ASC表示升序(默认)。 - 限制查询结果数量:使用LIMIT子句限制返回的行数,如
SELECT * FROM students LIMIT 5;表示返回前 5 条记录,还可指定偏移量,如SELECT * FROM students LIMIT 2, 3;表示从第 3 条记录开始返回 3 条记录。 - 聚合函数查询:介绍常用聚合函数,如COUNT()(统计记录数)、SUM()(求和)、AVG()(求平均值)、MAX()(求最大值)、MIN()(求最小值)。例如,统计学生总数
SELECT COUNT(*) FROM students;,计算学生平均年龄SELECT AVG(age) FROM students;。 - 分组查询:结合GROUP BY子句和聚合函数进行分组查询,如按性别统计学生人数
SELECT gender, COUNT(*) FROM students GROUP BY gender;,还可使用HAVING子句对分组结果进行过滤,如SELECT gender, COUNT(*) FROM students GROUP BY gender HAVING COUNT(*) > 1;表示查询人数大于 1 的性别分组。
- 基本查询:使用SELECT语句查询表中的所有数据,如
- 更新数据:使用UPDATE语句更新表中的数据,如将学生 “张三” 的年龄更新为 21 岁:
sql UPDATE students SET age = 21 WHERE name = '张三';
强调WHERE子句的重要性,若省略则会更新整张表的所有记录。 - 删除数据:通过DELETE FROM语句删除表中的数据,如删除年龄小于 18 岁的学生记录:
sql DELETE FROM students WHERE age < 18;
同样,若无WHERE子句,将删除整张表的所有数据。

























