【MySQL_01】简介

MySQL原本是一个开放源码的关系数据库管理系统,原开发者为瑞典的MySQL AB公司,该公司于2008年被昇阳微系统(Sun Microsystems,开发Java的那个)收购。2009年,甲骨文公司(Oracle)收购昇阳微系统公司,MySQL成为Oracle旗下产品(Oracle自家数据库也叫Oracle)。

MySQL:官方发音为/maɪ ˌɛskjuːˈɛl/“My S-Q-L”,但也经常被读作/maɪ ˈsiːkwəl/“My Sequel”。

🐈‍⬛github:https://github.com/mysql

💻官网: https://www.mysql.com

🌏维基百科:https://zh.wikipedia.org/wiki/MySQL

一、发展历史与版本

1.1 历史

  1. 起源与早期发展(1995-2000)

    • 1995年由瑞典开发者 Michael Widenius(Monty)、David AxmarkAllan Larsson 创建,名称取自 Monty 的女儿 “My” 和结构化查询语言 “SQL” 的组合。
    • 目标是为中小型项目提供轻量、开源的关系型数据库,替代昂贵的商业数据库(如 Oracle)。
  2. 开源崛起(2000-2008)

    • 2000年以 GPL 协议 开源,成为 LAMP 技术栈(Linux + Apache + MySQL + PHP/Perl/Python)的核心,推动早期互联网应用(如博客、论坛)的普及。
    • 2001年发布 3.23 版本,首次支持事务处理(通过 Berkeley DB 引擎)。
  3. 商业化与争议(2008-2010)

    • 2008年被 Sun Microsystems 以 10 亿美元收购,2010年随 Sun 被 Oracle 收购,引发开源社区对闭源风险的担忧。
    • 社区分支 MariaDB 诞生(由 Monty 主导),但 MySQL 在 Oracle 管理下持续迭代。
  4. 现代演进(2010-至今)

    • 2018年发布 MySQL 8.0,支持窗口函数、JSON 增强、原子 DDL 等特性。
    • 2020年推出 MySQL HeatWave,整合事务处理(OLTP)与数据分析(OLAP)。
    • 截至 2025年2月,MySQL 长期占据全球数据库流行度 第二名(DB-Engines 数据),市场份额超 40%。
      在这里插入图片描述

MySQL在过去由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,因此被广泛地应用在Internet上的中小型网站中。随着MySQL的不断成熟,它也逐渐用于更多大规模网站和应用,比如:
在这里插入图片描述

但被甲骨文公司收购后,Oracle大幅调涨MySQL商业版的售价,且甲骨文公司不再支持另一个自由软件项目OpenSolaris的发展,因此导致自由软件社群们对于Oracle是否还会持续支持MySQL社群版(MySQL之中唯一的免费版本)有所隐忧,MySQL的创始人麦克尔·维德纽斯以MySQL为基础,成立分支计划MariaDB。而原先一些使用MySQL的开源软件逐渐转向MariaDB或其它的数据库。例如维基百科已于2013年正式宣布将从MySQL迁移到MariaDB数据库。

在这里插入图片描述


1.2 版本及分类

MySQL的许可证现在分为免费的社区版与收费的标准版、企业版等。

一般说来,如果在非开源项目中发布了MySQL,或者需要Oracle公司提供对MySQL的技术支持,或者使用MySQL的一些企业版工具或插件,或者修改MySQL源代码并作为闭源的软件等等情形,需要购买商业版本。

如果只是安装并使用MySQL,甚至修改并使用MySQL,无论是否收费;或者软件中不包含MySQL,软件的用户自行安装MySQL;或者使用GPL协议的开源软件产品中包含了MySQL,这些情形可能使用社区版MySQL。


按许可证分类:

版本特点优势适用场景
社区版(Community Edition免费开源,基于 GPL 许可证,适合中小型企业、开发环境。无成本,适合预算有限的项目;社区支持活跃,文档丰富。中小型企业、开发环境、个人项目、教育用途。
企业版(Enterprise Edition)付费版,提供完整功能和技术支持,包含高级工具和服务。包括备份工具、高级安全功能(如数据加密、审计日志)、性能监控和调优工具;官方技术支持。大型企业、高安全性需求场景、关键业务系统。
集群版(Cluster Edition)开源免费,基于 GPL 许可证,支持分布式数据库架构和高可用性。支持高可用性和分布式数据库架构;适合需要横向扩展的场景。需要高可用性和扩展性的场景,如 Web 应用、物联网。
高级集群版(Cluster CGE)需付费,提供高级集群功能和技术支持,基于 MySQL NDB Cluster。提供更强大的集群管理功能、高可用性和实时性能优化;官方技术支持。大型企业、高并发和高可用性需求的场景,如金融、电信。
嵌入式版(Embedded Edition)免费开源,专为嵌入式系统设计,占用资源较少。轻量级,适合资源受限的环境;易于集成到应用程序中。嵌入式系统、IoT 设备、移动应用。
经典版(Classic Edition)旧版 MySQL,基于 MyISAM 存储引擎,现已逐渐淘汰。简单易用,适合传统应用。旧系统维护、传统应用迁移。

主要版本号:

版本发布时间主要特性
MySQL 5.52010年InnoDB 成为默认存储引擎。
MySQL 5.62013年支持全文索引、GTID 复制等。
MySQL 5.72015年支持 JSON 数据类型、性能优化、安全性提升。
MySQL 8.02018年支持 UTF-8mb4 字符集、窗口函数、增强的 JSON 功能。
MySQL 8.42024年4月长期支持版本(LTS)。
MySQL 9.22025年1月最新创新版本( Innovation),带来了大量针对 JavaScript 和存储程序的改进。

衍生版本:

  1. MariaDB

    • 特点:由 MySQL 创始人开发,基于 MySQL 分支,提供更快的查询性能和更多存储引擎支持。
    • 适用场景:关注开源生态的企业。
  2. Percona Server

    • 特点:基于 MySQL 社区版开发,增加了企业级特性,专注于性能和高可用性。

二、特性

  • 使用 C 和 C++ 编写,并使用了多种编译器进行测试,保证源代码的可移植性。
  • 支持 AIX、BSDi、FreeBSD、HP-UX、Linux、Mac OS、Novell NetWare、NetBSD、OpenBSD、OS/2 Wrap、Solaris、Windows 等多种操作系统。
  • 为多种编程语言提供了 API。这些编程语言包括 C、C++、C#、VB.NET、Delphi、Eiffel、Java、Perl、PHP、Python、Ruby 和 Tcl 等。
  • 支持多线程,充分利用 CPU 资源,支持多用户。
  • 优化的 SQL 查询算法,有效地提高查询速度。
  • 既能够作为一个单独的应用程序在客户端服务器网络环境中执行,也能够作为一个程序库而嵌入到其他的软件中。
  • 提供多语言支持,常见的编码如中文的 GB 2312、BIG5,日文的 Shift JIS 等都可以用作数据表名和数据列名。
  • 提供 TCP/IP、ODBC 和 JDBC 等多种数据库连接途径。
  • 提供用于管理、检查、优化数据库操作的管理工具。
  • 可以处理拥有上千万条记录的大型数据库。

三、应用场景与典型案例

  1. 互联网与 Web 服务

    • 全球超 40% 的网站 使用 MySQL(W3Techs 数据),包括 Facebook、Twitter、YouTube(早期架构)。
    • 典型场景:用户认证、内容管理(CMS)、订单处理。
  2. 企业级应用

    • 金融:银行交易流水、支付系统(依赖事务一致性)。
    • 电信:用户计费、通话记录存储。
    • 制造业:ERP 系统、供应链管理。
  3. 嵌入式与物联网

    • 轻量级版本(如 MySQL Embedded Server)用于智能设备、工业传感器数据采集。
  4. 云计算服务

    • AWS RDS阿里云 PolarDB 等云服务基于 MySQL 提供托管数据库。

四、生态系统与工具链

  1. 开源分支与衍生项目

    • MariaDB:完全兼容 MySQL 的社区分支,由 Monty 主导开发。
    • Percona Server:企业级优化版本,集成 XtraBackup 等工具。
  2. 管理与监控工具

    • MySQL Workbench:官方图形化管理工具,支持建模与性能调优。
    • Percona Monitoring and Management (PMM):开源监控平台,提供性能分析。
    • phpMyAdmin:基于 Web 的数据库管理界面。
  3. 开发与运维工具

    • mysqldump:逻辑备份工具。
    • MySQL Shell:支持 JavaScript/Python 脚本的高级客户端。

五、挑战与竞争

  1. 竞争对手

    • PostgreSQL:在复杂查询、JSON 处理、GIS 支持上更具优势。
    • NoSQL(如 MongoDB):灵活的数据模型,适合非结构化数据场景。
    • 云原生数据库(如 AWS Aurora):通过硬件优化争夺高端市场。
  2. 技术挑战

    • 单机性能瓶颈:需依赖分库分表或中间件实现水平扩展。
    • 实时分析能力:传统上依赖外部 OLAP 工具(如 Apache Spark)。
<think>我们正在讨论MySQL的DATE_ADD函数。根据用户意图,需要提供DATE_ADD函数的用法和示例。引用内容:[^1]提到DATE_ADD函数用于对日期和时间进行增加操作,并提供了基本用法和实际应用示例。[^2]展示了一个具体的SQL示例,使用DATE_ADD函数增加秒和微秒。[^3]展示了在统计连续两天刷题的应用中使用DATE_ADD函数,通过增加一天来连接同一用户后一天的记录。因此,我们可以这样组织回答:1.介绍DATE_ADD函数的作用:用于在日期/时间值上加上一个时间间隔。2.语法:DATE_ADD(date,INTERVALexprunit)-date:合法的日期表达式,可以是日期、时间或日期时间值。-expr:要添加的时间间隔数值,可以是正数(增加)或负数(减少,相当于DATE_SUB)。-unit:时间单位,如DAY,MONTH,YEAR,HOUR,MINUTE,SECOND,MICROSECOND等。3.示例:提供几个不同单位的示例,包括引用中的示例。4.注意事项:如边界情况、单位的使用等。同时,根据指令,需要生成相关问题。注意:所有行内数学表达式用$...$,独立公式用$$...$$,但这里主要涉及SQL代码,所以用代码块。使用中文回答。回答结构:1.函数简介2.语法说明3.示例(多个)4.注意事项5.生成相关问题</think>### MySQL DATE_ADD 函数详解 #### 1. 函数作用 DATE_ADD() 是 MySQL 中用于**对日期/时间值进行加法运算**的核心函数。它允许在指定日期基础上添加特定的时间间隔(如天数、小时、月份等),生成新的日期时间值[^1]。 #### 2. 基本语法 ```sql DATE_ADD(base_date, INTERVAL expression unit) ``` - **base_date**:基准日期(支持 `DATE`/`DATETIME`/`TIMESTAMP` 类型) - **expression**:要添加的数值(可正可负) - **unit**:时间单位(见下表) ##### 常用时间单位: | 单位 | 说明 | 示例表达式 | |-----------------|----------------------|------------------------------| | `DAY` | 天数 | `INTERVAL 3 DAY` | | `MONTH` | 月份 | `INTERVAL -1 MONTH` | | `YEAR` | 年份 | `INTERVAL 2 YEAR` | | `HOUR` | 小时 | `INTERVAL 4 HOUR` | | `MINUTE` | 分钟 | `INTERVAL 30 MINUTE` | | `SECOND` | 秒 | `INTERVAL 45 SECOND` | | `MICROSECOND` | 微秒 | `INTERVAL 500 MICROSECOND` | | `QUARTER` | 季度(3个月) | `INTERVAL 1 QUARTER` | | `WEEK` | 周(7天) | `INTERVAL 2 WEEK` | | `SECOND_MICROSECOND` | 秒+微秒组合 | `INTERVAL '1.999999' SECOND_MICROSECOND`[^2] | #### 3. 使用示例 **示例1:基础日期加法** ```sql -- 3天后的日期 SELECT DATE_ADD('2023-10-01', INTERVAL 3 DAY); -- 结果 → 2023-10-04 -- 2个月前的时间 SELECT DATE_ADD('2023-10-01 08:30:00', INTERVAL -2 MONTH); -- 结果 → 2023-08-01 08:30:00 ``` **示例2:精确时间计算** ```sql -- 增加1秒999999微秒 SELECT DATE_ADD('2017-12-31 23:59:59.000002', INTERVAL '1.999999' SECOND_MICROSECOND); -- 结果 → 2018-01-01 00:00:01.000001[^2] ``` **示例3:用户行为分析(连续活跃统计)** ```sql -- 统计次日活跃用户比例 SELECT COUNT(q2.user_id)/COUNT(q1.user_id) AS retention_rate FROM user_activity AS q1 LEFT JOIN user_activity AS q2 ON q1.user_id = q2.user_id AND q2.activity_date = DATE_ADD(q1.activity_date, INTERVAL 1 DAY) WHERE q1.activity_date = '2023-10-01';[^3] ``` #### 4. 注意事项 1. **负间隔等效 DATE_SUB** `DATE_ADD(date, INTERVAL -1 DAY)` 完全等价于 `DATE_SUB(date, INTERVAL 1 DAY)` 2. **自动处理边界值** 当添加月份/年份时,若目标日期无效(如2月30日),MySQL 会自动调整为有效日期: ```sql SELECT DATE_ADD('2023-01-31', INTERVAL 1 MONTH); -- 结果 → 2023-02-28(非31日) ``` 3. **时间溢出处理** 时间分量超过范围时会自动进位: ```sql SELECT DATE_ADD('2023-10-01 23:59:59', INTERVAL 1 MINUTE); -- 结果 → 2023-10-02 00:00:59 ``` 4. **支持日期表达式** 第一个参数可以是字段名或表达式: ```sql UPDATE orders SET delivery_date = DATE_ADD(NOW(), INTERVAL 7 DAY) WHERE status = 'confirmed'; ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

感谢地心引力

有用的话请我喝杯咖啡吧????

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值