MySQL数据库下载及安装教程——《跟老吕学MYSQL》-程序员宅基地

技术标签: # 《跟老吕学MYSQL》  mysql  MySQL安装教程  MySQL教程  MySQL数据库下载及安装教程  数据库  MySQL数据库  MySQL数据库安装教程  

MySQL数据库下载及安装教程

  • 一、MySQL数据库下载及安装教程
    • 1.MySQL数据库下载
      • 1.1 MySQL官网
      • 1.2 MySQL官网下载页(表面上的)
      • 1.3 MySQL官网下载页(真正的下载地址)
      • 1.4 下载教程
    • 2.MySQL数据库安装教程
      • 2.1 MySQL数据库安装版配置安装教程
        • 2.1.1 下载安装程序后,双击安装文件开始安装过程。
        • 2.1.2 检查所需组件
        • 2.1.3 安装所选产品组件
        • 2.1.4 产品配置
        • 2.1.5 配置高可用性
        • 2.1.6 配置服务器类型和网络
        • 2.1.7 配置认证方法
        • 2.1.8 配置账户和角色
        • 2.1.9 配置 Windows 服务
        • 2.1.10 将配置生效
      • 2.2 MySQL数据库解压版配置安装教程
        • 2.2.1 配置环境变量
        • 2.2.2 配置 my.ini
        • 2.2.3 初始化数据库
        • 2.2.4 安装服务
      • 2.3 MySQL安装示例数据库
    • 3.安装问题
      • 3.1 使用说明
      • 3.2 服务无法启动
    • 4.报错解决
    • 11.MySQL 中文排序错误的解决方法
      • 11.1 方法1
      • 11.2 方法2
  • 二、MySQL数据库介绍
    • 1.MySQL概述
    • 2.应用环境
    • 3.系统特性
    • 4.存储引擎
    • 5.应用架构
    • 6.索引功能
      • 6.1 InnoDB 数据表的索引
      • 6.2 限制
    • 7.索引类别
      • 7.1 普通索引
      • 7.2 索引
      • 7.3主索引
      • 7.4 外键索引
      • 7.5 复合索引
      • 7.6 索引长度
      • 7.7 查询和索引
    • 8.初学基础
      • 8.1 连接 MySQL
      • 8.2 修改密码
      • 8.3 增加新用户
      • 8.4 操作技巧
      • 8.5 显示命令
      • 8.6 实例
      • 8.7 文本转数据库
      • 8.8 备份数据库
      • 8.9 还原导入
      • 8.10 启动跟踪
      • 8.11 关闭服务器
      • 8.12 启动服务
    • 9.安全设置
      • 9.1 内部安全性-保证数据目录访问的安全
      • 9.2 外部安全性-保证网络访问的安全
    • 10.管理工具
    • 11.授权问题
      • 11.1 授权协议
      • 11.2 手册bug
    • 12.替代方案
      • 12.1 MariaDB
      • 12.2 PostgreSQL
      • 12.3 NoSQL
      • 12.4 Oracle免费版
    • 13.远程访问
    • 14.新特性
      • 14.1 MySQL PHP 语法
    • 15.MySQL历史版本
      • 15.1 MySQL 1.0
      • 15.2 MySQL 3.0
      • 15.3 MySQL 4.0
      • 15.4 MySQL 5.0
      • 15.5 MySQL 5.1
      • 15.6 MySQL 5.5
      • 15.7 MySQL 5.6
      • 15.8 MySQL 5.7
      • 15.9 MySQL 8.0

一、MySQL数据库下载及安装教程

1.MySQL数据库下载

1.1 MySQL官网

MySQL官网
https://www.mysql.com/cn/


1.2 MySQL官网下载页(表面上的)

MySQL数据库下载及安装教程
MySQL官网下载页
https://www.mysql.com/cn/downloads/


1.3 MySQL官网下载页(真正的下载地址)

MySQL官网下载页
https://dev.mysql.com/downloads/mysql/


1.4 下载教程

MySQL数据库下载及安装教程
进入MySQL官网下载页(真正的下载地址),选择您需要的版本,点击下载即可。


2.MySQL数据库安装教程

2.1 MySQL数据库安装版配置安装教程

2.1.1 下载安装程序后,双击安装文件开始安装过程。

在选择安装类型页面上,您可以看到五个安装选项。
• Developer Default:默认的安装选项。它安装开发应用程序所需的组件,例如 MySQL 服务器、MySQL Shell、MySQL 连接器等
• Server Only:只安装 MySQL 服务器端,不包含命令行工具等组件。
• Client Only:只安装 MySQL 客户端工具等组件,不包含 MySQL Server。
• Full:安装 MySQL 服务器及其所有组件
• Custom:自定义安装自己所需的组件

我们安装 MySQL 服务器以及所有组件的,选择 “Full” 并单击 “Next” 。

MySQL数据库下载及安装教程

2.1.2 检查所需组件

在安装开始之前,安装程序会检查安装所需的先决条件。界面上会显示产品名称、所需组件/软件及其状态。可以看到,安装 MySQL for visual studio ,必须安装 visual studio 2015 或以上版本。同样,要安装 Connector/Python 8.0.19,我们必须先安装 python。
• 如果本页有 “Execute“ 按钮,则先点击 “Execute“ 按钮,然后单击 “Next”。
• 如果没有 “Execute“ 按钮,则直接单击 “Next”。
MySQL数据库下载及安装教程

安装程序向我们发出警告。我们继续安装,单击 “Yes“。
MySQL数据库下载及安装教程


2.1.3 安装所选产品组件

在安装界面上,您可以看到将要安装的 MySQL 产品/软件的列表。查看列表并单击 “Execute“。
MySQL数据库下载及安装教程

安装程序会自动下载所有产品/软件,然后,它会自动安装所有产品。
MySQL数据库下载及安装教程

等待几分钟。安装过程完成后,我们就可以配置 MySQL 数据库服务器和其他组件了。单击 “Next” 进入配置界面。

MySQL数据库下载及安装教程


2.1.4 产品配置

在产品配置界面上,您可以看到需要配置的产品列表。单击“Next”。
MySQL数据库下载及安装教程


2.1.5 配置高可用性

在高可用性界面上,我们选择 “Standalone MySql Server / Classic MySQL Replication”。这是选择我们服务器作为独立服务器或者经典的 MySQL 复制服务器。
MySQL数据库下载及安装教程


2.1.6 配置服务器类型和网络

在类型和网络界面上,我们可以配置以下内容:
• Config Type: 配置类型
• Development Computer: 开发计算机,占用最少的资源。
• Server Computer: 服务器计算机,可以和其他服务器软件一同安装,比如 web 服务器等。中等资源占用。
• Dedicated Computer: 专用计算机,可最大限度的占用资源。
• Connectivity:可以控制客户端如何连接到 MySQL 数据库
MySQL数据库下载及安装教程
MySQL数据库下载及安装教程

2.1.7 配置认证方法

在 MySQL 8.0 版本中,我们可以使用基于 SHA256 的强密码。在 Authentication Method 界面上,选择使用传统身份验证方法或强密码进行身份验证的选项。注意:如果使用强密码加密进行身份验证,请确保所有客户端或者连接器必须更新到最新版本。我们使用强密码加密进行身份验证。
MySQL数据库下载及安装教程


2.1.8 配置账户和角色

在 Accounts and Roles 界面上,您可以指定 MySQL 的 root 帐户密码。MySQL root 帐户是默认的 sysadmin 帐户,为了安全,一般要禁用它。
MySQL数据库下载及安装教程


2.1.9 配置 Windows 服务

在Windows 服务界面上,可以将 MySQL 服务器配置为作为 Windows 服务运行。我们可以自定义服务器的名称以及是否随机自启动服务。

MySQL数据库下载及安装教程


2.1.10 将配置生效

在 “Apply Configuration” 界面上,我们可以看到保存配置的步骤。检查所有配置设置后,单击 “Execute”。
MySQL数据库下载及安装教程

等待配置保存成功后,单击 “Finish” 关闭安装程序。
MySQL数据库下载及安装教程


2.2 MySQL数据库解压版配置安装教程

2.2.1 配置环境变量

将安装包解压到你要安装的目录,将 bin 目录添加至环境变量。
MySQL数据库下载及安装教程


2.2.2 配置 my.ini

在根目录下新建一个 my.ini 文件。
MySQL数据库下载及安装教程

在 my.ini 中添加如下配置:

[mysqld]
; 设置3306端口
port=3306
; 设置mysql的安装目录
basedir=C:\\gl\\SQL\\mysql-8.0.18-winx64
; 设置mysql数据库的数据的存放目录
datadir=C:\\gl\\SQL\\mysql-data
; 允许最大连接数
max_connections=200
; 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
; 服务端使用的字符集默认为UTF8
character-set-server=utf8
; 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
; 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
; 设置mysql客户端默认字符集
default-character-set=utf8
[client]
; 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8

注意:basedir 和 datadir 要改成你自己的目录。


陷阱:
default_authentication_plugin=mysql_native_password 这一句必须要加上,否则可能导致 root 的初始密码无法登陆。


2.2.3 初始化数据库

以管理员身份 运行 cmd,切换至安装目录的 bin 目录下,输入如下命令:

mysqld --initialize --console

默认的服务名就是 mysql,也可以指定服务名

mysqld --initialize --console 服务名

一般是不会去指定服务名的,但是如果你的电脑上需要安装多个 MySQL 服务,就可以用不同的名字区分。

执行成功后,会显示 root 的初始密码,如下图,这个密码需要保存下来。
MySQL数据库下载及安装教程
如果命令中不加 --console ,则在 cmd 窗口将不显示日志信息。可以到 data 目录(my.ini 中 datadir 配置的目录)下找一个 .err 的文件,也可以查看日志信息。

陷阱 1
可能会报“找不到 MSVCP140.dll”

MSVCP140.dll 是 Visual Studio C++ 2015 Redistributable 的组成文件。
一般出现这个问题,是因为没有安装 Visual C++ Redistributable for Visual Studio 2015 所致。这个必须安装,否则后面服务无法启动。

如果已安装,则可以修复一下。
亦可下载一个 MSVCP140.dll,复制到 C:\Windows\System32,运行如下批处理命令注册 dll

@echo 开始注册
copy msvcp140.dll %windir%\system32\
regsvr32 %windir%\system32\msvcp140.dll /s
@echo msvcp140.dll注册成功
@pause

注册成功之后再运行上述 MySQL 命令,就可以正常初始化数据库了。当然不建议这么做。

陷阱 2
执行完成之后,仔细查看输出的信息,可能会有如下警告:

'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.

utf 8 目前是字符集 UTF8MB3 的别名,在将来的版本中将被 UTF8MB4 替换。请考虑使用 UTF8MB4,以便明确无误。
如果出现的话,我们只需将 my.ini 文件中的 utf8 替换成 UTF8MB4


2.2.4 安装服务

安装服务:

mysqld -install

启动服务:

net start mysql

如果上一步中你指定了另外的服务名,将 mysql 改为你指定的服务名。
登录数据库:

mysql -u root -p

这时提示需要输入密码,就是前文让你保存的密码。
登录成功后显示如下:

MySQL数据库下载及安装教程

修改密码:
执行以下语句,即可将密码改为 root

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

安装配置完毕。


2.3 MySQL安装示例数据库

完成上面的步骤后,如果安装开始选择是完整安装类型,则安装程序继续回到产品配置界面。点击 Next,MySQL 安装程序将继续安装示例数据库。
1.在此界面上,输入用户名 root 和密码,然后单击 “Check” 。如果连接建立成功,点击下一步。见下图:
MySQL数据库下载及安装教程

2.在 Apply Configuration Screen 上,单击 Execute 开始安装示例数据库。请参阅以下内容:
MySQL数据库下载及安装教程

安装示例数据库后,单击“**完成”**按钮。
MySQL数据库下载及安装教程

3.安装程序继续到产品配置界面。在此界面上,您可以看到 MySQL Server 8.0.19 和 Sample 和 Example 8.0.19 的安装已成功完成。见下图:
MySQL数据库下载及安装教程

4.安装完成后,您可以将安装日志复制到剪贴板上以供日后查看。此外,如果您想立即开始探索 MySQL,那么您可以选择“Start MySQL Workbench after Setup” 和 “Start MySQL Shell after Setup”,然后单击完成。见下图:
MySQL数据库下载及安装教程

完成后, MySQL 安装程序在数据库中导入了 world 和 sakila 数据库:
• world 数据库是一个包含了世界国家和城市的数据。
• sakila 数据库是关于 DVD(电影)租赁店业务的数据库。


3.安装问题

3.1 使用说明

  1. 如果是用 MySQL + Apache,使用的又是 FreeBSD 网络操作系统的话,安装时候你应按注意到FreeBSD的版本问题,在 FreeBSD 的 3.0 以下版本来说,MySQL Source 内含的 MIT-pthread 运行是正常的,但在这版本以上,你必须使用 native threads,也就是加入一个 with-named-thread-libs=-lc_r 的选项。
  2. 如果在 COMPILE 过程中出了问题,请先检查你的 gcc版本是否在 2.81 版本以上,gmake 版本是否在3.75以上。
  3. 如果不是版本的问题,那可能是你的内存不足,请使用 ./configure–with-low-memory 来加入。
  4. 如果要重新做你的 configure,那么你可以键入 rm config.cache 和 make clean 来清除记录。
  5. 把 MySQL 安装在 /usr/local 目录下,这是缺省值,您也可以按照你的需要设定你所安装的目录。

3.2 服务无法启动

  1. 首先,查看MySQL的服务是否存在。如果不存在需要先安装服务。安装服务的方法是进入MySQL Server的安装目录,找到bin目录,然后找到文件mysqld.exe,使用命令行运行 mysqld --install MySQL57 安装服务(如果不成功尝试使用管理员方式运行,MySQL57是服务的名字,默认是MySQL)。
  2. 如果上述方法安装服务失败,则可采用下述方法安装(成功则跳过此步)。搜索程序“regedit.exe”,即注册表编辑器,打开后找到 “计算机”——“HKEY_LOCAL_MACHINE”——“SYSTEM”——“CurrentControlSet”——“Services”,然后在该目录下新建项MySQL57(服务的名字)即可成功建立项目。
  3. 找到新建的项,然后可以看到其中有ImagePath这一项,这其实是可执行文件的路径。因为MySQL服务是需要靠mysqld这个命令来启动的,所以检查下ImagePath的路径是否正确。路径错误导致启动服务时报错—“无法找到文件”。
  4. 修改ImagePath的内容为正确的路径值,正确的值是"D:\MySQL\MySQL Server 5.7\bin\mysqld" --defaults-file=“D:\MySQL\MySQL Server 5.7\my.ini” MySQL 是这种形式的,对照一下,如果路径不对,修改过来。
  5. 重启计算机,再次启动服务,并可以成功运行MySQL服务。

4.报错解决

  1. Starting MySQL.Manager of pid-file quit without updating fi[失败]
    关于这个错误原因有很多,最大的可能是没有创建测试数据库,可以用/usr/local/mysql/scripts/mysql_install_db –user=mysql命令进行创建;另外一个原因可能是权限设置问题,需要赋予mysql的data权限,可以用chmod -R 命令。

  2. FATAL ERROR: Could not find /home/mysql/bin/my_print_defaults If you are using a binary release,you must run this script from
    within the directory the archive extracted into. If you compiled
    MySQL yourself you must run ‘make install’ first.
    这个错误,是没有指明mysql的data路径导致的,可以很简单的进行解决:
    vim /etc/my.cnf
    在[mysqld] 后面加上路径:
    basedir = /usr/local/mysql
    datadir =/opt/data;

  3. -bash: mysql: command not found
    用mysql命令进行登陆mysql报错,原因是没有设置环境变量,需要设置,或者进入到bin目录进行登陆cd /usr/local/mysql/bin
    mysql -u root

  4. ERROR 1130: Host ’192.168.1.3′ is not allowed to connect to this MySQL server
    用mysql远程工具链接数据库报错,这个错误原因是没有开放远程链接功能,可以在mysql里面输入如下命令进行解决:GRANT ALL PRIVILEGES ON . TO ’root‘@’%’ IDENTIFIED BY ’password’ WITH GRANT OPTION


11.MySQL 中文排序错误的解决方法

11.1 方法1

在 MySQL 数据库中,进行中文排序和查找的时候,对汉字的排序和查找结果是错误的。这种情况在 MySQL 的很多版本中都存在。如果这个问题不解决,那么 MySQL 将无法实际处理中文。
出现这个问题的原因是:MySQL 在查询字符串时是大小写不敏感的,在编绎 MySQL 时一般以 ISO-8859 字符集作为默认的字符集,因此在比较过程中中文编码字符大小写转换造成了这种现象,一种解决方法是对于包含中文的字段加上 “binary” 属性,使之作为二进制比较,例如将 “name char(10)” 改成 “name char(10)binary”。


11.2 方法2

如果你使用源码编译 MySQL,可以编译 MySQL 时使用 --with–charset=gbk 参数,这样 MySQL 就会直接支持中文查找和排序了。


二、MySQL数据库介绍

1.MySQL概述

MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的RDBMS (Relational Database Management System,关系数据库管理系统)应用软件之一。

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL作为网站数据库。


2.应用环境

与其他的大型数据库例如 Oracle、DB2、SQL Server等相比,MySQL自有它的不足之处,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于 MySQL是开放源码软件,因此可以大大降低总体拥有成本。
Linux作为操作系统,Apache 或Nginx作为 Web 服务器,MySQL 作为数据库,PHP/Perl/Python作为服务器端脚本解释器。由于这四个软件都是免费或开放源码软件(FLOSS),因此使用这种方式不用花一分钱(除开人工成本)就可以建立起一个稳定、免费的网站系统,被业界称为“LAMP“或“LNMP”组合。


3.系统特性

  1. MySQL使用 C和 C++编写,并使用了多种编译器进行测试,保证了源代码的可移植性。
  2. 支持 AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统。
  3. 为多种编程语言提供了 API。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby,.NET和 Tcl 等。
  4. 支持多线程,充分利用 CPU 资源。
  5. 优化的 SQL查询算法,有效地提高查询速度。
  6. 既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。
  7. 提供多语言支持,常见的编码如中文的 GB 2312、BIG5,日文的 Shift_JIS等都可以用作数据表名和数据列名。
  8. 提供 TCP/IP、ODBC 和 JDBC等多种数据库连接途径。
  9. 提供用于管理、检查、优化数据库操作的管理工具。
  10. 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
  11. 支持多种存储引擎。
  12. MySQL 是开源的,所以你不需要支付额外的费用。
  13. MySQL 使用标准的 SQL数据语言形式
  14. MySQL 对 PHP 有很好的支持,PHP是比较流行的 Web 开发语言
  15. MySQL是可以定制的,采用了 GPL协议,你可以修改源码来开发自己的 MySQL 系统。
  16. 在线 DDL/更改功能,数据架构支持动态应用程序和开发人员灵活性
  17. 复制全局事务标识,可支持自我修复式集群
  18. 复制无崩溃从机,可提高可用性
  19. 复制多线程从机,可提高性能
  20. 3倍更快的性能
  21. 新的优化器
  22. 原生JSON支持
  23. 多源复制
  24. GIS的空间扩展

4.存储引擎

MyISAMMySQL 5.0 之前的默认数据库引擎,最为常用。拥有较高的插入,查询速度,但不支持事务
InnoDB事务型数据库的首选引擎,支持ACID事务,支持行级锁定, MySQL 5.5 起成为默认数据库引擎
BDB源 自 Berkeley DB,事务型数据库的另一种选择,支持Commit 和Rollback 等其他事务特性
Memory所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在 MySQL 重新启动时丢失
Merge将一定数量的 MyISAM 表联合而成一个整体,在超大规模数据存储时很有用
Archive非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。Archive 拥有高效的插入速度,但其对查询的支持相对较差
Federated将不同的 MySQL 服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用
Cluster/NDB高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用
CSV: 逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个 .csv 文件。这是一种普通文本文件,每个数据行占用一个文本行。CSV 存储引擎不支持索引。
BlackHole:黑洞引擎,写入的任何数据都会消失,一般用于记录 binlog 做复制的中继
EXAMPLE 存储引擎是一个不做任何事情的存根引擎。它的目的是作为 MySQL 源代码中的一个例子,用来演示如何开始编写一个新存储引擎。同样,它的主要兴趣是对开发者。EXAMPLE 存储引擎不支持编索引。
另外,MySQL 的存储引擎接口定义良好。有兴趣的开发者可以通过阅读文档编写自己的存储引擎。


5.应用架构

单点(Single),适合小规模应用
复制(Replication),适合中小规模应用
集群(Cluster),适合大规模应用


6.索引功能

索引是一种特殊的文件(InnoDB 数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。索引不是万能的,索引可以加快数据检索操作,但会使数据修改操作变慢。每修改数据记录,索引就必须刷新一次。为了在某种程度上弥补这一缺陷,许多 SQL 命令都有一个 DELAY_KEY_WRITE 项。这个选项的作用是暂时制止 MySQL 在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行。在需要把许多新记录插入某个数据表的场合,DELAY_KEY_WRITE 选项的作用将非常明显。另外,索引还会在硬盘上占用相当大的空间。因此应该只为最经常查询和最经常排序的数据列建立索引。注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。

从理论上讲,完全可以为数据表里的每个字段分别建一个索引,但 MySQL 把同一个数据表里的索引总数限制为16个。


6.1 InnoDB 数据表的索引

与 InnoDB数据表相比,在 InnoDB 数据表上,索引对 InnoDB 数据表的重要性要大得多。在 InnoDB 数据表上,索引不仅会在搜索数据记录时发挥作用,还是数据行级锁定机制的基础。“数据行级锁定”的意思是指在事务操作的执行过程中锁定正在被处理的个别记录,不让其他用户进行访问。这种锁定将影响到(但不限于)SELECT、LOCKINSHAREMODE、SELECT、FORUPDATE 命令以及 INSERT、UPDATE 和 DELETE 命令。出于效率方面的考虑,InnoDB 数据表的数据行级锁定实际发生在它们的索引上,而不是数据表自身上。显然,数据行级锁定机制只有在有关的数据表有一个合适的索引可供锁定的时候才能发挥效力。


6.2 限制

如果 WHERE 子句的查询条件里有不等号(WHERE coloum !=),MySQL 将无法使用索引。类似地,如果 WHERE 子句的查询条件里使用了函数(WHERE DAY(column)=),MySQL 也将无法使用索引。在 JOIN 操作中(需要从多个数据表提取数据时),MySQL 只有在主键和外键的数据类型相同时才能使用索引。
如果 WHERE 子句的查询条件里使用比较操作符 LIKE 和 REGEXP,MySQL 只有在搜索模板的第一个字符不是通配符的情况下才能使用索引。比如说,如果查询条件是 LIKE 'abc%‘,MySQL 将使用索引;如果查询条件是 LIKE '%abc’,MySQL 将不使用索引。
在 ORDER BY 操作中,MySQL 只有在排序条件不是一个查询条件表达式的情况下才使用索引。(虽然如此,在涉及多个数据表查询里,即使有索引可用,那些索引在加快 ORDER BY 方面也没什么作用)。如果某个数据列里包含许多重复的值,就算为它建立了索引也不会有很好的效果。比如说,如果某个数据列里包含的净是些诸如 “0/1” 或 “Y/N” 等值,就没有必要为它创建一个索引。


7.索引类别

7.1 普通索引

普通索引(由关键字 KEY 或 INDEX 定义的索引)的任务是加快对数据的访问速度。因此,应该只为那些最经常出现查询条件(WHERE column =)或排序条件(ORDER BY column)中的数据列创建索引。只要有可能,就应该选择一个数据最整齐、最紧凑的数据列(如一个整数类型的数据列)来创建索引。


7.2 索引

普通索引允许被索引的数据列包含重复的值。比如说,因为人有可能同名,所以同一个姓名在同一个“员工个人资料”数据表里可能出现两次或更多次。

如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE 把它定义为一个索引。这么做的好处:一是简化了 MySQL 对这个索引的管理工作,这个索引也因此而变得更有效率;二是 MySQL 会在有新记录插入数据表时,自动检查新记录的这个字段的值是否已经在某个记录的这个字段里出现过了;如果是,MySQL 将拒绝插入那条新记录。也就是说,索引可以保证数据记录的独特性。事实上,在许多场合,人们创建索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。


7.3主索引

在前面已经反复多次强调过:必须为主键字段创建一个索引,这个索引就是所谓的“主索引”。主索引区别是:前者在定义时使用的关键字是 PRIMARY 而不是 UNIQUE。


7.4 外键索引

如果为某个外键字段定义了一个外键约束条件,MySQL 就会定义一个内部索引来帮助自己以最有效率的方式去管理和使用外键约束条件。


7.5 复合索引

索引可以覆盖多个数据列,如像 INDEX (columnA, columnB) 索引。这种索引的特点是 MySQL 可以有选择地使用一个这样的索引。如果查询操作只需要用到 columnA 数据列上的一个索引,就可以使用复合索引 INDEX(columnA, columnB)。不过,这种用法仅适用于在复合索引中排列在前的数据列组合。比如说,INDEX (A,B,C) 可以当做 A 或 (A,B) 的索引来使用,但不能当做 B、C 或 (B,C) 的索引来使用。


7.6 索引长度

在为 CHAR 和 VARCHAR 类型的数据列定义索引时,可以把索引的长度限制为一个给定的字符个数(这个数字必须小于这个字段所允许的最大字符个数)。这么做的好处是可以生成一个尺寸比较小、检索速度却比较快的索引文件。在绝大多数应用里,数据库中的字符串数据大都以各种各样的名字为主,把索引的长度设置为10~15 个字符已经足以把搜索范围缩小到很少的几条数据记录了。在为 BLOB 和 TEXT 类型的数据列创建索引时,必须对索引的长度做出限制;MySQL 所允许的最大索引全文索引文本字段上的普通索引只能加快对出现字段内容最前面的字符串(也就是字段内容开头的字符)进行检索操作。如果字段里存放的是由几个、甚至是多个单词构成的较大段文字,普通索引就没什么作用了。这种检索往往以的形式出现,这对 MySQL 来说很复杂,如果需要处理的数据量很大,响应时间就会很长。

这类场合正是全文索引(full-textindex)可以大显身手的地方。在生成这种类型的索引时,MySQL 将把在文本中出现的所有单词创建为一份清单,查询操作将根据这份清单去检索有关的数据记录。全文索引即可以随数据表一同创建,也可以等日后有必要时再使用下面这条命令添加:
ALTER TABLE tablename ADD FULLTEXT(column1,column2)有了全文索引,就可以用 SELECT 查询命令去检索那些包含着一个或多个给定单词的数据记录了。下面是这类查询命令的基本语法:

SELECT * FROM tablename
WHERE MATCH (column1,column2) AGAINST('word1','word2','word3')

上面这条命令将把 column1 和 column2 字段里有 word1、word2 和 word3 的数据记录全部查询出来。
注解:InnoDB 数据表不支持全文索引。


7.7 查询和索引

只有当数据库里已经有了足够多的测试数据时,它的性能测试结果才有实际参考价值。如果在测试数据库里只有几百条数据记录,它们往往在执行完第一条查询命令之后就被全部加载到内存里,这将使后续的查询命令都执行得非常快–不管有没有使用索引。只有当数据库里的记录超过了 1000 条、数据总量也超过了 MySQL 服务器上的内存总量时,数据库的性能测试结果才有意义。

在不确定应该在哪些数据列上创建索引的时候,人们从 EXPLAIN SELECT 命令那里往往可以获得一些帮助。这其实只是简单地给一条普通的 SELECT 命令加一个 EXPLAIN 关键字作为前缀而已。有了这个关键字,MySQL 将不是去执行那条 SELECT 命令,而是去对它进行分析。MySQL 将以表格的形式把查询的执行过程和用到的索引等信息列出来。

在 EXPLAIN 命令的输出结果里,第1列是从数据库读取的数据表的名字,它们按被读取的先后顺序排列。type列指定了本数据表与其它数据表之间的关联关系(JOIN)。在各种类型的关联关系当中,效率最高的是 system,然后依次是 const、eq_ref、ref、range、index 和 All(All 的意思是:对应于上一级数据表里的每一条记录,这个数据表里的所有记录都必须被读取一遍——这种情况往往可以用一索引来避免)。

possible_keys 数据列给出了 MySQL 在搜索数据记录时可选用的各个索引。key 数据列是 MySQL 实际选用的索引,这个索引按字节计算的长度在 key_len 数据列里给出。比如说,对于一个 INTEGER 数据列的索引,这个字节长度将是4。如果用到了复合索引,在 key_len 数据列里还可以看到 MySQL 具体使用了它的哪些部分。作为一般规律,key_len 数据列里的值越小越好。

ref 数据列给出了关联关系中另一个数据表里的数据列的名字。row 数据列是 MySQL 在执行这个查询时预计会从这个数据表里读出的数据行的个数。row 数据列里的所有数字的乘积可以大致了解这个查询需要处理多少组合。

最后,extra 数据列提供了与 JOIN 操作有关的更多信息,比如说,如果 MySQL 在执行这个查询时必须创建一个临时数据表,就会在 extra 列看到 usingtemporary 字样。


8.初学基础

8.1 连接 MySQL

格式:mysql -h 主机地址 -u 用户名 -p 用户密码
1.例1:连接到本机上的MYSQL。
首先在打开 DOS 窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root 是没有密码的,故直接回车即可进入到 MySQL 中了,MySQL 的提示符是:mysql>
2.例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:

mysql -h110.110.110.110 -uroot -pabcd123

(注:u与root可以不用加空格,其它也一样)
3.退出 MySQL 命令:exit (回车)
注意:想要成功连接到远程主机,需要在远程主机打开MySQL远程访问权限
方法如下:
在远程主机中以管理员身份进入
输入如下命令

mysql>GRANT ALL PRIVILEGES ON *.* TO 'agui'@%'IDENTIFIEDBY '123' WITH GRANT OPTION;
FLUSH PRIVILEGES;
//赋予任何主机访问数据的权限
mysql>FLUSH PRIVILEGES
//修改生效

agui为我们使用的用户名
密码为 123
即:在远程主机上作好设置,我们即可通过mysql -h110.110.110.110 -uagui -p123连接进远程主机


8.2 修改密码

格式:

mysqladmin -u用户名 -p 旧密码 -password 新密码

1.例1:给root加个密码a123b456。首先在DOS下进入目录mysqlbin,然后键入以下命令

mysqladmin -uroot -password a123b456

注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。

2.例2:再将root的密码改为a123b45688。

mysqladmin -uroot -p a123b456 -password a123b45688

8.3 增加新用户

(注意:和上面不同,下面的因为是 MySQL 环境中的命令,所以后面都带一个分号作为命令结束符)
格式:grant select on 数据库.* to 用户名@登录主机 identified by “密码”
例1、增加一个用户 test1 密码为 abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以 root 用户连入 MySQL,然后键入以下命令:
grant select,insert,update,delete on . to test1@“%” Identified by “abc”;
但例1增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见例2。
例2、增加一个用户 test2 密码为 abc,让他只可以在 localhost 上登录,并可以对数据库 mydb 进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。
grant select, insert, update, delete on mydb.* to test2@localhost identified by “abc”;
如果你不想 test2 有密码,可以再打一个命令将密码消掉。
grant select, insert, update, delete on mydb.* to test2@localhost identified by “”;
下面来看看 MySQL 中有关数据库方面的操作。注意:必须首先登录到 MySQL 中,以下操作都是在 MySQL 的提示符下进行的,而且每个命令以分号结束。


8.4 操作技巧

1.如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就 OK。
2.你可以使用光标上下键调出以前的命令。但以前我用过的一个 MySQL 旧版本不支持。我用的是mysql-3.23.27-beta-win。


8.5 显示命令

1.显示数据库列表。
show databases;
刚开始时才两个数据库:mysql 和 test。mysql 库很重要它里面有 MySQL 的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。
2.显示库中的数据表:
use mysql; //打开库,学过 FOXBASE 的一定不会陌生吧
show tables;
3.显示数据表的结构:
describe 表名;
4.建库:
create database 库名;
5.建表:
use 库名;
create table 表名 (字段设定列表);
6.删库和删表:
drop database 库名;
drop table 表名;
7.将表中记录清空:
delete from 表名;
8.显示表中的记录:
select * from 表名;
9.显示最后一个执行的语句所产生的错误、警告和通知:
show warnings;
10.只显示最后一个执行语句所产生的错误:
show errors;


8.6 实例

drop database if exists school; //如果存在SCHOOL则删除
create database school; //建立库SCHOOL
use school; //打开库SCHOOL
create table teacher //建立表TEACHER
(
id int(3) auto_increment not null primary key,
name char(10) not null,
address varchar(50) default ‘深圳',
date year
)ENGINE=InnoDB DEFAULT CHARSET=utf8; //建表结束
//以下为插入字段
insert into teacher values('','glchengang',’XX公司‘,'1976-10-10');
insert into teacher values('','jack',’XX公司‘,'1975-12-23');

注:在建表中:
1.将ID设为长度为3的数字字段:int(3)并让它每个记录自动加一:auto_increment并不能为空:not null而且让他成为主字段primary key。
2.将NAME设为长度为10的字符字段。
3.将ADDRESS设为长度50的字符字段,而且缺省值为深圳。varchar和char有什么区别呢,只有等以后的文章再说了。
4.将YEAR设为日期字段。
如果你在mysql提示符键入上面的命令也可以,但不方便调试。你可以将以上命令原样写入一个文本文件中假设为school.sql,然后复制到c:\下,并在DOS状态进入目录\mysql\bin,然后键入以下命令:
mysql -uroot -p密码 < c:\school.sql
如果成功,空出一行无任何显示;如有错误,会有提示。(以上命令已经调试,你只要将//的注释去掉即可使用)。


8.7 文本转数据库

1.文本数据应符合的格式:字段数据之间用tab键隔开,null值用\n来代替.
例:
3.rose 深圳二中 1976-10-10
4.mike 深圳一中 1975-12-23
2.数据传入命令 load data local infile “文件名” into table 表名;
注意:你最好将文件复制到\mysql\bin目录下,并且要先用use命令打开表所在的数据库
或者登录数据库前将路径转移(cd)到要导入文本所在路径。


8.8 备份数据库

(命令在DOS的\mysql\bin目录下执行)

mysqldump --opt school>school.bbb

注释:将数据库school备份到school.bbb文件,school.bbb是一个文本文件,文件名任取,打开看看你会有新发现。
自动备份 mysql 数据库的方法

先是建立批处理文件,将以下代码另存为.bat文件,文件名最好为英文。注意下面的路径,以笔者自己的数据库为例,数据库安装在D盘下mysql\mysql下,备份位置在F:\beifen,后面的代码是日期。

@echo off
color 0D
MODE con: COLS=71 LINES=25
title mysql数据库自动备份脚本(任务计划)--脚本作者:http://www。***。com
set sou_dir="D:\mysql\Mysql\data"
set obj_dir=F:\beifen\%date:~0,10%
net stop mysql
md %obj_dir%
xcopy /e /y %sou_dir% %obj_dir%
net start mysql
@echo off&setlocal enabledelayedexpansion
call:D,30
echo. 30天前的日期为:%D%
echo. 删除30天以前备份......
if exist F:\beifen\%D% rd /s /q F:\beifen\%D%
echo 自动备份完成,程序将自动退出......

8.9 还原导入

还原/导入数据库,导入过程,进入 mysql 数据库控制台,如

mysql -u root -p
mysql>use 数据库

然后使用 source 命令,后面参数为脚本文件(如这里用到的.sql)

mysql>source d:\dbname.sql

如果提示找不到文件,输完 source 后,可以用鼠标把文件直接拖进命令行窗口


8.10 启动跟踪

mysqld --debug

8.11 关闭服务器

mysqladmin -u root shutdown

8.12 启动服务

mysqld --console

9.安全设置

9.1 内部安全性-保证数据目录访问的安全

  1. 数据库文件。
  2. 日志文件。

9.2 外部安全性-保证网络访问的安全

  1. MySQL 授权表的结构和内容
  2. 服务器控制客户访问
  3. 避免授权表风险
  4. 不用 GRANT设置用户

10.管理工具

可以使用命令行工具管理 MySQL 数据库(命令 mysql 和 mysqladmin),也可以从 MySQL 的网站下载图形管理工具 MySQL Administrator, MySQL Query Browser 和 MySQL Workbench。
phpMyAdmin是由 php 写成的 MySQ L资料库系统管理程程序,让管理者可用 Web 界面管理 MySQL 资料库。
phpMyBackupPro也是由 PHP 写成的,可以透过 Web 界面创建和管理数据库。它可以创建伪 cronjobs,可以用来自动在某个时间或周期备份 MySQL 数据库。
另外,还有其他的 GUI 管理工具,例如 mysql-front 以及 ems mysql manager, navicat等等。


11.授权问题

11.1 授权协议

MySQL 遵守的不只是 GPL 协议,而是双授权模式(dual license)即你在遵守 GPL 协议的开源项目使用 MySQL,需要遵守 GPL 协议方能使用。如果你在非开源项目使用(即软件不打算开放源代码),且该软件用来销售,则需要向 MySQL 支付相应 license 费用。


11.2 手册bug

在 5.5.31 版本时人们发现 Oracle 取消了其中的 GPL 协议,造成了一定的不安。有开发者在 MySQL 程序臭虫网站上举报这项授权错误问题,随即 MySQL 工程服务总监 Yngve Svendsen 在网站上坦言,这的确是一个文件臭虫,因为 man 手册程序重新编译时套用了错误的授权内容。不过仍然有人认为,Oracle 取消开源授权改采商业授权的“这一天迟早是要到来的”,并寻求其他代替方案。


12.替代方案

随着 MySQL 被 Oracle 收购,MySQL 的用户和开发者开始质疑开源数据库的命运,与此同时他们开始寻找替代品。

有文章写到了放弃 MySQL 的五大理由:

  1. MySQL 不如其它关系型数据库管理系统那样成熟;
  2. MySQL 是开源的…但只有近似而已;
  3. MySQL 的性能无法与竞争对手相提并论;
  4. MySQL 是 Oracle 所有的,而不是社区驱动的;
  5. 越来越多的强劲对手。

12.1 MariaDB

从 MySQL 转向 MariaDB的代表厂家:谷歌(2013年9月)、RedHat(2013年6月)、维基百科(2013年4月)
MySQL 在 2008 年被Sun以10亿美金所收购,MySQL 创始人 Michael Widenius 则不满 Sun 开发团队脚步过慢,愤而离职成立开源数据库联盟,另外从现有 MySQL 程序代码中,开发出另一个延伸分支版本,也就是名为玛莉亚数据库的企业级开源数据库。
玛莉亚数据库如同 MySQL 的影子版本,玛莉亚数据库是 MySQL 的一个分支版本(branch),而不是衍生版本(folk),提供的功能可和 MySQL 完全兼容。


12.2 PostgreSQL

从 MySQL 转向 PostgreSQL的代表厂家:苹果(2011年)
PostgreSQL是一个自由的对象-关系数据库服务器(数据库管理系统)。PostgreSQL支持大部分 SQL标准并且提供了许多其它现代特性:复杂查询、外键、触发器、视图、事务完整性、MVCC。同样,PostgreSQL 可以用许多方法扩展,比如, 通过增加新的数据类型、函数、操作符、聚集函数、索引方法、过程语言。并且,因为许可证的灵活,任何人都可以以任何目的免费使用、修改、和分发 PostgreSQL,不管是私用、商用、还是学术研究使用。
PostgreSQL 也受 NoSQL 思想的启发,希望能够在今后可以给使用者更多可定制可调节的功能(不是说这个成熟的关系型数据库系统要向 NoSQL 转变)。


12.3 NoSQL

NoSQL(NoSQL = Not Only SQL),意即“不仅仅是 SQL”,是一项全新的数据库革命性运动。NoSQL指的是非关系型的数据库。随着互联网 web2.0网站的兴起,传统的关系数据库在应付 web2.0 网站,特别是超大规模和高并发的 SNS 类型的 web2.0 纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。
其代表的开源软件如:Membase、MongoDB、Hypertable、Apache Cassandra、CouchDB等。


12.4 Oracle免费版

Oracle自 Oracle 10g 后推出对应的免费版。


13.远程访问

1:将 localhost 改成 “%”
修改 “mysql” 数据库里的 “user” 表里的 “host” 项,将"localhost"改成"%"
mysql>use mysql;
mysql>update user set host = ‘%’ where user = ‘root’;
mysql>select host, user from user;
mysql>FLUSH PRIVILEGES;
2:使用 myuser/mypassword 从任何主机连接到 mysql 服务器:
GRANT ALL PRIVILEGES ON . TO ‘myuser’@’%’ IDENTIFIED BY ‘mypassword’ WITH GRANT OPTION;
使用myuser/mypassword从ip为192.168.225.166的主机连接到mysql服务器:
GRANT ALL PRIVILEGES ON . TO ‘myuser’@‘192.168.225.166’ IDENTIFIED BY ‘mypassword’ WITH GRANT OPTION;
3:泛授权
mysql -h localhost -u root
mysql>GRANT ALL PRIVILEGES ON . TO ‘root’@’%’ WITH GRANT OPTION; //赋予任何主机上以root身份访问数据的权限
mysql>FLUSH PRIVILEGES;

  1. 性能:MySQL 8.0 的速度要比 MySQL 5.7 快 2 倍。MySQL 8.0 在以下方面带来了更好的性能:读/写工作负载、IO 密集型工作负载、以及高竞争("hot spot"热点竞争问题)工作负载。
  2. NoSQL:MySQL 从 5.7 版本开始提供 NoSQL 存储功能,在 8.0 版本中这部分功能也得到了更大的改进。该项功能消除了对独立的 NoSQL 文档数据库的需求,而 MySQL 文档存储也为 schema-less 模式的 JSON 文档提供了多文档事务支持和完整的 ACID 合规性。
  3. 窗口函数(Window Functions):从 MySQL 8.0 开始,新增了一个叫窗口函数的概念,它可以用来实现若干新的查询方式。窗口函数与 SUM()、COUNT() 这种集合函数类似,但它不会将多行查询结果合并为一行,而是将结果放回多行当中。即窗口函数不需要 GROUP BY。
  4. 隐藏索引:在 MySQL 8.0 中,索引可以被“隐藏”和“显示”。当对索引进行隐藏时,它不会被查询优化器所使用。我们可以使用这个特性用于性能调试,例如我们先隐藏一个索引,然后观察其对数据库的影响。如果数据库性能有所下降,说明这个索引是有用的,然后将其“恢复显示”即可;如果数据库性能看不出变化,说明这个索引是多余的,可以考虑删掉。
  5. 降序索引:MySQL 8.0 为索引提供按降序方式进行排序的支持,在这种索引中的值也会按降序的方式进行排序。
  6. 通用表表达式(Common Table Expressions CTE):在复杂的查询中使用嵌入式表时,使用 CTE 使得查询语句更清晰。
  7. UTF-8 编码:从 MySQL 8 开始,使用 utf8mb4 作为 MySQL 的默认字符集。
  8. JSON:MySQL 8 大幅改进了对 JSON 的支持,添加了基于路径查询参数从 JSON 字段中抽取数据的 JSON_EXTRACT() 函数,以及用于将数据分别组合到 JSON 数组和对象中的 JSON_ARRAYAGG() 和 JSON_OBJECTAGG()聚合函数。
  9. 可靠性:InnoDB 支持表 DDL 的原子性,也就是 InnoDB 表上的 DDL 也可以实现事务完整性,要么失败回滚,要么成功提交,不至于出现 DDL 时部分成功的问题,此外还支持 crash-safe 特性,元数据存储在单个事务数据字典中。
  10. 高可用性(High Availability):InnoDB 集群为您的数据库提供集成的原生 HA 解决方案。
  11. 安全性:对 OpenSSL 的改进、新的默认身份验证、SQL 角色、密码强度、授权

14.新特性

  1. 表和索引的分区
  2. 行级复制
  3. MySQL 基群基于磁盘的数据支持
  4. MySQL 集群复制
  5. 增强的全文本搜索函数
  6. 增强的信息模式(数据字典)
  7. 可插入的 API
  8. 服务器日志表
  9. XML(标准通用标记语言的子集)/ XPath支持
  10. 实例管理器
  11. 表空间备份
  12. mysql_upgrade 升级程序
  13. 内部任务/事件调度器
  14. 新的性能工具和选项如 mysqlslap

14.1 MySQL PHP 语法

MySQL 可应用于多种语言,包括 PERL, C, C++, JAVA 和 PHP。 在这些语言中,MySQL 在 PHP 的 web 开发中是应用最广泛。
在本教程中我们大部分实例都采用了PHP语言。如果你想了解 MySQL 在 PHP 中的应用,可以访问我们的PHP 中使用 MySQL 介绍。
PHP 提供了多种方式来访问和操作 MySQL 数据库记录。PHP MySQL 函数格式如下:

mysql_function(value,value,...);

以上格式中function部分描述了mysql函数的功能,如

mysqli_connect($connect);
mysqli_query($connect,"SQLstatement");
mysql_fetch_array()
mysql_connect(),mysql_close()

以下实例展示了PHP调用mysql函数的语法:

<html>
<head>

</head>
<body>
<?php
$retval=mysql_function(value,[value,...]);
if(!$retval)
{
die("Error:arelatederrormessage");
}
//OtherwiseMySQLorPHPStatements
?>
</body>
</html>

15.MySQL历史版本


15.1 MySQL 1.0

MySQL 1.0于1995年发布,是MySQL的第一个版本。它只支持ISAM引擎,没有支持事务、存储过程等高级功能。


15.2 MySQL 3.0

noDB引擎,增加了事务、存储过程等高级功能。


15.3 MySQL 4.0

MySQL 4.0于2002年发布,增加了视图、存储函数、触发器等功能。


15.4 MySQL 5.0

MySQL 5.0于2005年发布,增加了存储过程、触发器、视图和事件等功能。


15.5 MySQL 5.1

MySQL 5.1于2008年发布,增加了分区、复制和全文索引等功能。


15.6 MySQL 5.5

MySQL 5.5于2010年发布,增加了半同步复制、多版本并发控制等功能。


15.7 MySQL 5.6

noDBancea等功能。


15.8 MySQL 5.7

noDB引擎改进、全文索引改进等功能。


15.9 MySQL 8.0

MySQL 8.0于2018年发布,增加了窗口函数、CTE、地理空间数据类型等功能。




博主Python老吕说:如果您觉得本文有帮助,辛苦您帮忙点赞、收藏、评论,您的举手之劳将对我提供了无限的写作动力!


精品付费专栏:(暂时免费,尽快订阅、收藏哦)
《跟老吕学Python编程》
《跟老吕学Python编程·附录资料》

前端:
《跟老吕学HTML》
《XHTML》
《CSS》
《JavaScript》
《Vue》

后端:
《跟老吕学C语言》
《C++》
《Java》
《R》
《Ruby》
《PHP》
《Go》
《C#》
《Swift》
《Python》

数据库:
《跟老吕学Oracle语言》
《MYSQL》
《SQL》
《PostgreSQL》
《MongoDB》


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/molangmolang/article/details/136333827

智能推荐

51单片机的中断系统_51单片机中断篇-程序员宅基地

文章浏览阅读3.3k次,点赞7次,收藏39次。CPU 执行现行程序的过程中,出现某些急需处理的异常情况或特殊请求,CPU暂时中止现行程序,而转去对异常情况或特殊请求进行处理,处理完毕后再返回现行程序断点处,继续执行原程序。void 函数名(void) interrupt n using m {中断函数内容 //尽量精简 }编译器会把该函数转化为中断函数,表示中断源编号为n,中断源对应一个中断入口地址,而中断入口地址的内容为跳转指令,转入本函数。using m用于指定本函数内部使用的工作寄存器组,m取值为0~3。该修饰符可省略,由编译器自动分配。_51单片机中断篇

oracle项目经验求职,网络工程师简历中的项目经验怎么写-程序员宅基地

文章浏览阅读396次。项目经验(案例一)项目时间:2009-10 - 2009-12项目名称:中驰别克信息化管理整改完善项目描述:项目介绍一,建立中驰别克硬件档案(PC,服务器,网络设备,办公设备等)二,建立中驰别克软件档案(每台PC安装的软件,财务,HR,OA,专用系统等)三,能过建立的档案对中驰别克信息化办公环境优化(合理使用ADSL宽带资源,对域进行调整,对文件服务器进行优化,对共享打印机进行调整)四,优化完成后..._网络工程师项目经历

LVS四层负载均衡集群-程序员宅基地

文章浏览阅读1k次,点赞31次,收藏30次。LVS:Linux Virtual Server,负载调度器,内核集成, 阿里的四层SLB(Server Load Balance)是基于LVS+keepalived实现。NATTUNDR优点端口转换WAN性能最好缺点性能瓶颈服务器支持隧道模式不支持跨网段真实服务器要求anyTunneling支持网络private(私网)LAN/WAN(私网/公网)LAN(私网)真实服务器数量High (100)High (100)真实服务器网关lvs内网地址。

「技术综述」一文道尽传统图像降噪方法_噪声很大的图片可以降噪吗-程序员宅基地

文章浏览阅读899次。https://www.toutiao.com/a6713171323893318151/作者 | 黄小邪/言有三编辑 | 黄小邪/言有三图像预处理算法的好坏直接关系到后续图像处理的效果,如图像分割、目标识别、边缘提取等,为了获取高质量的数字图像,很多时候都需要对图像进行降噪处理,尽可能的保持原始信息完整性(即主要特征)的同时,又能够去除信号中无用的信息。并且,降噪还引出了一..._噪声很大的图片可以降噪吗

Effective Java 【对于所有对象都通用的方法】第13条 谨慎地覆盖clone_为继承设计类有两种选择,但无论选择其中的-程序员宅基地

文章浏览阅读152次。目录谨慎地覆盖cloneCloneable接口并没有包含任何方法,那么它到底有什么作用呢?Object类中的clone()方法如何重写好一个clone()方法1.对于数组类型我可以采用clone()方法的递归2.如果对象是非数组,建议提供拷贝构造器(copy constructor)或者拷贝工厂(copy factory)3.如果为线程安全的类重写clone()方法4.如果为需要被继承的类重写clone()方法总结谨慎地覆盖cloneCloneable接口地目的是作为对象的一个mixin接口(详见第20_为继承设计类有两种选择,但无论选择其中的

毕业设计 基于协同过滤的电影推荐系统-程序员宅基地

文章浏览阅读958次,点赞21次,收藏24次。今天学长向大家分享一个毕业设计项目基于协同过滤的电影推荐系统项目运行效果:项目获取:https://gitee.com/assistant-a/project-sharing21世纪是信息化时代,随着信息技术和网络技术的发展,信息化已经渗透到人们日常生活的各个方面,人们可以随时随地浏览到海量信息,但是这些大量信息千差万别,需要费事费力的筛选、甄别自己喜欢或者感兴趣的数据。对网络电影服务来说,需要用到优秀的协同过滤推荐功能去辅助整个系统。系统基于Python技术,使用UML建模,采用Django框架组合进行设

随便推点

你想要的10G SFP+光模块大全都在这里-程序员宅基地

文章浏览阅读614次。10G SFP+光模块被广泛应用于10G以太网中,在下一代移动网络、固定接入网、城域网、以及数据中心等领域非常常见。下面易天光通信(ETU-LINK)就为大家一一盘点下10G SFP+光模块都有哪些吧。一、10G SFP+双纤光模块10G SFP+双纤光模块是一种常规的光模块,有两个LC光纤接口,传输距离最远可达100公里,常用的10G SFP+双纤光模块有10G SFP+ SR、10G SFP+ LR,其中10G SFP+ SR的传输距离为300米,10G SFP+ LR的传输距离为10公里。_10g sfp+

计算机毕业设计Node.js+Vue基于Web美食网站设计(程序+源码+LW+部署)_基于vue美食网站源码-程序员宅基地

文章浏览阅读239次。该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流项目运行环境配置:项目技术:Express框架 + Node.js+ Vue 等等组成,B/S模式 +Vscode管理+前后端分离等等。环境需要1.运行环境:最好是Nodejs最新版,我们在这个版本上开发的。其他版本理论上也可以。2.开发环境:Vscode或HbuilderX都可以。推荐HbuilderX;3.mysql环境:建议是用5.7版本均可4.硬件环境:windows 7/8/10 1G内存以上;_基于vue美食网站源码

oldwain随便写@hexun-程序员宅基地

文章浏览阅读62次。oldwain随便写@hexun链接:http://oldwain.blog.hexun.com/ ...

渗透测试-SQL注入-SQLMap工具_sqlmap拖库-程序员宅基地

文章浏览阅读843次,点赞16次,收藏22次。用这个工具扫描其它网站时,要注意法律问题,同时也比较慢,所以我们以之前写的登录页面为例子扫描。_sqlmap拖库

origin三图合一_神教程:Origin也能玩转图片拼接组合排版-程序员宅基地

文章浏览阅读1.5w次,点赞5次,收藏38次。Origin也能玩转图片的拼接组合排版谭编(华南师范大学学报编辑部,广州 510631)通常,我们利用Origin软件能非常快捷地绘制出一张单独的绘图。但是,我们在论文的撰写过程中,经常需要将多种科学实验图片(电镜图、示意图、曲线图等)组合在一张图片中。大多数人都是采用PPT、Adobe Illustrator、CorelDraw等软件对多种不同类型的图进行拼接的。那么,利用Origin软件能否实..._origin怎么把三个图做到一张图上

51单片机智能电风扇控制系统proteus仿真设计( 仿真+程序+原理图+报告+讲解视频)_电风扇模拟控制系统设计-程序员宅基地

文章浏览阅读4.2k次,点赞4次,收藏51次。51单片机智能电风扇控制系统仿真设计( proteus仿真+程序+原理图+报告+讲解视频)仿真图proteus7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0042。_电风扇模拟控制系统设计