So Easy系列之MySQL数据库教程
1. 数据库概述
1.1. 数据库概述
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。
数据库指的是以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等操作。
1.2. 关系型数据库概述
关系数据库管理系统RDBMS(Relational Database Management System):包括相互联系的数据集合 (数据库)和存取这些数据的一套程序 (数据库管理系统软件)。关系数据库管理系统就是将数据间的关系以数据库表的形式加以表达,并将数据存储在表格中,以便于查询。管理关系数据库,并将数据组织为相关的行和列的系统。MySQL、Oracle、SQL Server 是一个关系数据库管理系统 (RDBMS)。
1.3. MySQL数据库概述
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。
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.4. 百度百科
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策(本词条“授权政策”),它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。由于其社区版的性能卓越,搭配PHP和Apache可组成良好的开发环境。
1.5. 维基百科
MySQL原本是一个开放源代码的关系数据库管理系统,原开发者为瑞典的MySQL AB公司,该公司于2008年被升阳微系统(Sun Microsystems)收购。2009年,甲骨文公司(Oracle)收购升阳微系统公司,MySQL成为Oracle旗下产品。
MySQL在过去由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,因此被广泛地应用在Internet上的中小型网站中。随着MySQL的不断成熟,它也逐渐用于更多大规模网站和应用,比如维基百科、Google和Facebook等网站。非常流行的开源软件组合LAMP中的“M”指的就是MySQL。
但被甲骨文公司收购后,Oracle大幅调涨MySQL商业版的售价,且甲骨文公司不再支持另一个自由软件项目OpenSolaris的发展,因此导致自由软件社群们对于Oracle是否还会持续支持MySQL社群版(MySQL之中唯一的免费版本)有所隐忧,因此原先一些使用MySQL的开源软件逐渐转向其它的数据库。例如维基百科已于2013年正式宣布将从MySQL迁移到MariaDB数据库。
2. MySQL数据库安装
2.1. Windows环境下安装
首先需要下载Windows版本的MySQL安装文件,然后安装MySQL数据库环境,安装成功后还需要对MySQL数据库进行相关配置。具体操作步骤如下:
- 打开浏览器,在地址栏中输入http://dev.mysql.com/downloads/mysql/5.5.html#downloads。
- 根据Windows系统选择下载的版本,分别为32位和64位两种,点击“Download”按钮。
- 点击上图中红色框的链接,进行下载MySQL数据库安装文件。
- 下载成功后,鼠标双击安装文件,进行MySQL数据库的安装。
- 弹出MySQL 5.5安装向导对话框,点击【Next】按钮,继续安装。
- 勾选【I accept the terms in the License Agreement】选项,表示同意上述协议内容。点击【Next】按钮,继续安装。
- 上图是选择安装类型界面,其中提供了三种安装类型,分别是Typical(经典安装)、Custom(定制安装)和Complete(完全安装)。为了更好地了解MySQL的安装配置过程,这里选择【Custom】按钮,继续安装。
² Typical(经典安装):只安装MySQL服务器、mysql命令行客户端和命令行使用程序。
² Complete(完全安装):将安装软件包内包含的所有组件。其中包含的组件有嵌入式服务器库、基准套件、支持脚本和文档。
² Custom(定制安装):允许完全控制想要安装的软件包和安装路径。
- 上图中显示红色X图标表示未安装,这里默认选择全部安装。【Location】表示安装路径,这里选择默认路径即可。点击【Next】按钮,继续安装。
- 上图为安装确认界面,点击【Install】按钮,继续安装。
- 上图为MySQL安装进度界面,只需等待安装完成即可。
- 安装完成后,会弹出MySQL Enterprise版的介绍说明对话框,点击【Next】,完成安装。
- 上图为安装完成界面,其中【Launch the MySQL Instance Configuration Wizard】选项,选中该选项,MySQL安装文件将启动MySQL配置向导。然后点击【Finish】按钮,结束安装。
- 上图为MySQL配置界面,点击【Next】按钮,进行相关配置。
- 上图为选择配置类型对话框,可以选择【Detailed Configuration】(详细配置)和【Standard Configuration】(标准配置)两种。点击【Detailed Configuration】按钮,进行相关配置。
² Detailed Configuration(详细配置):适合想要更加详细控制服务器配置的高级用户。
² Standard Configuration(标准配置):适合要快速启动MySQL而不必考虑服务器配置的新用户。
- 上图为选择服务器类型,提供了三种服务器类型,分别是【Developer Machine】(开发主机)、【Server Machine】(服务器)和【Dedicated MySQL Server Machine】(MySQL专用服务器)。这里选择【Developer Machine】选项,继续相关配置。
- 上图选择数据库用途界面,提供【Multifunctional Database】(多功能数据库)、【Transactional Database Only】(只是事物处理数据库)和【Non-Transactional Database Only】(只是非事物处理数据库)三种选项。这里选择【Multifunctional Database】选项,继续相关配置。
- 上图为InnoDB表空间配置对话框,为InnoDB数据库文件选择存储位置,一般可以直接默认即可。
- 进入设置服务器最大并发连接数对话框,提供【Decision Support (DSS)/OLAP】(决策支持)、【Online Transaction Processing (OLTP)】(联机事物处理)和【Manual Setting】(人工设置)三个选项。这里选择【Manual Setting】选项,并将最大并发连接数设置为20即可。
- 上图为设置网络选项对话框,【Enable TCP/IP Networking】选项会默认启动。如果选择【Enable Strict Mode】选项,MySQL会对输入的数据进行严格的检验。
- 上图为设置MySQL默认语言编码字符集的对话框,这里选择“UTF-8”即【Best Support For Multilingualism】即可。(也可以选择【Manual Selected Default Character Set/Collation】选项,进行人工设置默认语言编码)
- 上图为设置Windows选项对话框,选择【Install As Windows Service】选项,表示将MySQL安装为Windows服务并设置服务名称。选择【Include Bin Directory in Windows PATH】选项,表示将MySQL的bin目录添加到环境变量PATH中。
- 上图为设置访问MySQL数据库使用的用户名和密码。【Enable root access from remote machines】选项表示只允许从本机登录连接root。
- 将上述配置信息全部完成后,进入配置确认对话框。没有任何问题的话,点击【Execute】按钮,进行配置。
- 当上图过程完成后,表示MySQL数据库配置过程结束,将看到下图所示内容,点击【Finish】按钮结束配置。
- 打开【计算机管理】的【服务】界面,可以查找到MySQL服务启动信息,如下图。
- 如果看到MySQL服务已经启动信息,表示MySQL数据库安装成功。
2.2. MySQL安装目录结构
MySQL数据库的数据存储目录为data,该目录通常在C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.1\data。MySQL安装目录中的bin目录中存放着MySQL数据库的常用执行文件,my.ini文件是MySQL数据库的配置文件。
2.3. 启动服务并登录MySQL
在安装MySQL数据库的过程中,将MySQL注册成Windows操作系统的服务。要在系统中使用MySQL数据库,首先需要启动相关服务。具体的操作步骤如下:
- 点击【开始】菜单,选择【运行】命令,打开【运行】对话框。
- 在【打开】文本框中输入“services.msc”命令,点击【确定】按钮,打开【服务管理器】。
- 或者点击【开始】菜单,选择【运行】命令,在【打开】文本框中输入“cmd”命令。在命令行中通过命令启动或关闭MySQL数据库。
- 启动MySQL数据库服务后,就可以使用MySQL数据库提供的功能了。下面需要登录MySQL数据库,点击【开始】菜单,选择【运行】命令,在【打开】文本框中输入“cmd”命令。
- 在命令行中通过登录命令连接到MySQL数据库,连接MySQL的命令格式如下:
上述命令中“-u”后面内容表示登录MySQL数据库的用户名,“-p”表示登录MySQL数据库的密码。(“-h”后面内容表示服务器主机名,是可以省略的)
- 输入上述登录MySQL命令后,点击回车键,提示输入登录MySQL的密码。即可成功登录MySQL数据库。
- 也可以通过MySQL Command Line Client登录。选在【开始】【所有程序】【MySQL】【MySQL Server 5.5】【MySQL 5.5 Command Line Client】菜单,输入密码即可登录MySQL数据库。
- 通过命令“quite”或“exit”退出MySQL数据库。
2.4. 更改MySQL的配置
在成功安装MySQL数据库后,即已经MySQL相关配置完成。但在实际开发时,会根据实际需求来更改MySQL配置参数,可以通过配置向导来更改配置。具体操作步骤如下:
- 进入到MySQL安装目录中的bin目录中,启动MySQLInstanceConfig程序。
- 点击【Next】按钮,进入维护选项对话框。想要重新配置已有的服务器,选择【Reconfigure Instance】选项;要想卸载已有的服务器,选择【Remove Instance】选项。因为是更改MySQL数据库的配置,需要选择【Reconfigure Instance】选项,点击【Next】按钮,进行重新配置MySQL。
- 进入配置过程中,可以参考之前安装配置时的信息,根据现有需求重新进行配置。
2.5. SQLyog安装
SQLyog 是一个易于使用的、快速而简洁的图形化管理MYSQL数据库的工具,它能够在任何地点有效地管理你的数据库。SQLyog是业界著名的Webyog公司出品的一款简洁高效、功能强大的图形化MySQL数据库管理工具。使用SQLyog可以快速直观地让您从世界的任何角落通过网络来维护远端的MySQL数据库。
- 访问官方网站下载安装文件https://www.webyog.com/product/downloads。
- 鼠标双击SQLyog安装文件,进行安装过程。
- 在SQLyog安装欢迎界面,点击【下一步】按钮,继续安装过程。
- 阅读版权许可内容,选择【我接收“许可证协议”中的条款】,点击【下一步】按钮,继续安装过程。
- 选择SQLyog安装组件,一般情况下默认即可。点击【下一步】按钮,继续安装过程。
- 选择SQLyog安装的本地磁盘路径,一般情况下默认即可。点击【下一步】按钮,继续安装过程。
- 等待Navicat for MySQL自动安装,直到看到如下界面,表示安装成功。
2.6. SQL语言概述
SQL(Structured Query Language)是“结构化查询语言”,它是对关系型数据库的操作语言。它可以应用到所有关系型数据库中,例如:MySQL、Oracle、SQL Server等。SQ标准(ANSI/ISO)有:
- SQL-92:1992年发布的SQL语言标准;
- SQL:1999:1999年发布的SQL语言标签;
- SQL:2003:2003年发布的SQL语言标签;
分类:
- DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
- DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);
- DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
- DQL(Data Query Language):数据查询语言,用来查询记录(数据)。
3. 数据库操作
3.1. 解决编码问题
在真正操作MySQL数据库之前,首先需要解决一个问题,就是MySQL的编码问题。主要是由于国内操作主要含有中文导致的。
- 登录MySQL数据库,查看MySQL的编码。
² character_set_client:你发送的数据必须与client指定的编码一致!!!服务器会使用该编码来解读客户端发送过来的数据;
² character_set_connection:通常该编码与client一致!该编码不会导致乱码!当执行的是查询语句时,客户端发送过来的数据会先转换成connection指定的编码。但只要客户端发送过来的数据与client指定的编码一致,那么转换就不会出现问题;
² character_set_database:数据库默认编码,在创建数据库时,如果没有指定编码,那么默认使用database编码;
² character_set_server:MySQL服务器默认编码;
² character_set_result:响应的编码,即查询结果返回给客户端的编码。这说明客户端必须使用result指定的编码来解码。
- 由于控制台编码只能为GBK,而MySQL编码为UTF-8,就会导致乱码问题。可以修改MySQL安装目录中的my.ini文件解决。
3.2. 创建数据库
创建数据库是在系统磁盘上划分一块区域用于数据的存储和管理,如果管理员在设置权限时为用户创建了数据库,则可以直接使用,否则需要用户自己创建数据库。MySQL中创建数据库的基本SQL语法格式为:
“database_name”为要创建的数据库名称,该名称不能与已经存在的数据库重名。
如果创建的数据库名称与已经存在的数据库重名,则会报错。为了避免报错,可以这样来处理:
成功创建数据库后,可以查看当前所有存在的数据库信息。
如果可以查看到刚刚创建的数据库名称,就表明创建数据库成功。
3.3. 操作数据库
在MySQL数据库中,可以对刚刚创建的数据库设置编码,一般为UTF-8,具体语句如下:
将当前MySQL数据库切换到刚刚创建的数据库中,使用如下语句:
3.4. 删除数据库
删除数据库是将已经存在的数据库从磁盘空间上清除。清除之后,数据库中的所有数据也将一同被清除。MySQL中删除数据库的语法格式如下:
需要注意的是:使用删除数据库语句时,MySQL不会给出任何提示确认信息。一旦执行数据库的删除操作,数据库中所有的数据内容将被删除,并且不能恢复。
4. 数据表操作
4.1. 常用数据类型
MySQL与Java一样,也有数据类型。MySQL支持多种数据类型,主要有数值类型、日期/时间类型和字符串类型。
- 数值数据类型:包括整数类型TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT,浮点小数数据类型FLOAT和DOUBLE及定点小数类型DECIMAL。
类型名称 | 说明 | 存储需求 |
TINYINT | 很小的整数 | 1个字节 |
SMALLINT | 小的整数 | 2个字节 |
MEDIUMINT | 中等大小的整数 | 3个字节 |
INT | 普通大小的整数 | 4个字节 |
BIGINT | 大整数 | 8个字节 |
FLOAT | 单精度浮点数 | 4个字节 |
DOUBLE | 双精度浮点数 | 8个字节 |
DECIMAL | 压缩的“严格”定点数(金钱) | M+2个字节 |
- 日期/时间类型:包括YEAR、TIME、DATE、DATETIME和TIMESTAMP。
类型名称 | 日期格式 | 存储需求 |
YEAR | YYYY | 1个字节 |
TIME | HH:MM:SS | 3个字节 |
DATE | YYYY-MM-DD | 3个字节 |
DATETIME | YYYY-MM-DD HH:MM:SS | 8个字节 |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | 4个字节 |
- 字符串类型:包括CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET等。
类型名称 | 说明 | 存储需求 |
CHAR | 固定长度字符串 | M个字节,1<=M<=255 |
VARCHAR | 可变长度字符串 | M+1个字节,1<=M<=255 |
BLOB | 字节类型 | M+2个字节,M<2^16 |
ENUM | 枚举类型 | 1或2个字节 |
4.2. 创建数据表
数据表属于数据库,在创建数据表之前,应该使用语句“USE <数据库名>”切换到指定数据库中。如果没有选择数据库,会抛出“No database selected”的错误。
创建数据表的语法格式如下:
- 要创建的表名,不区分大小写,但不能使用SQL语言中的关键字。
- 数据表中每一个字段的名称和数据类型,如果要创建多个,用逗号分开。
例如:创建员工表user_emp,结构如下表:
字段名称 | 数据类型 | 备注 |
id | INT(11) | 员工编号 |
name | VARCHAR(25) | 员工名称 |
depid | INT(11) | 所在部门编号 |
salary | FLOAT | 工资 |
【案例4.2.1】创建emp表:
4.3. 查看表结构
创建好数据表之后,可以查看表结构的定义。查看表结构可以使用DESCRIBE和SHOW CREATE TABLE语句。
- DESCRIBE/DESC 语句可以查看表的字段信息,其中包括字段名、字段数据类型等,语法格式如下:
或者简写为:
- SHOW CREATE TABLE语句可以用来显示创建表时的CREATE TABLE语句,语法格式如下:
如果不加“\G”参数,显示的结果可能非常混乱,加上参数“\G”之后,可使显示结果更加直观,易于查看。
4.4. 修改数据表
修改表指的是修改数据库中已经存在的数据表的结构。MySQL使用ALERT TABLE语句修改表。
- 修改表名
- 修改字段的数据类型
- 修改字段名
- 添加字段
“FIRST”为可选参数,其作用是将新添加的字段设置为表的第一个字段;“AFTER”为可选参数,其作用是将新添加的字段添加到指定的“已存在字段名”的后面。
- 删除字段
4.5. 删除数据表
删除数据表就是将数据库已经存在的表从数据库中删除。需要注意的是,在删除表的同时,表的定义和所有数据都会被删除。
使用DROP TABLE语句可以一次性删除一个数据表或者多个数据表,语法格式如下:
参数“IF EXISTS”用于在删除前判断删除的表是否存在。加上该参数后再删除表时,如果表不存在,SQL语句也可以顺利执行,但是会发出警告。
5. 完整性约束
5.1. 使用主键约束
主键是表中一列或多列的组合。主键约束要求主键字段的数据唯一,并且不允许为空。主键和记录之间的关系如同身份证和人之间的关系,它们之间是一一对应的。主键分为两种类型:单字段主键和多字段联合主键。
- 单字段主键
² 在定义字段的同时指定主键,语法格式如下:
² 在定义完所有字段之后指定主键,语法格式如下:
- 多字段联合主键,语法格式如下:
5.2. 主键自增约束
在数据库中,经常希望每次插入新记录时,系统会自动生成字段的主键值,可以为该表主键添加AUTO_INCREMENT关键字来实现。默认情况下,AUTO_INCREMENT的初始值为1,每新增一条记录,字段值自动加1。一个表中只能有一个字段使用AUTO_INCREMENT关键字,并该字段必须是主键。AUTO_INCREMENT约束的字段可以是任何整数类型。
设置主键自增的语法格式如下:
5.3. 使用外键约束
外键用来在两个表的数据之间建立链接,一个表可以有一个或多个外键。外键不一定是本表的主键,但对应另外一个表的主键。与外键关联的主键字段不允许被删除,如果删除首先要将外键撤销。
对于两个具有关联关系的表而言,具有主键的那个表叫做主表或父表,具有外键的那个表叫做从表或子表。
创建外键的语法格式如下:
5.4. 使用非空约束
非空约束指的是字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统会报错。
非空约束的语法格式如下:
5.5. 使用唯一性约束
唯一性约束要求该字段唯一,允许为空,但只能出现一个空值。唯一约束可以确保一列或几列不出现重复值。
唯一性约束的语法格式如下:
UNIQUE与PRIMARY KEY的区别:一个表中可以有多个字段被声明为UNIQUE,但只能有一个PRIMARY KEY声明,声明为PRIMARY KEY的字段不允许有空值,但声明为UNIQUE的字段允许为空(NULL)的存在。
5.6. 使用默认约束
默认约束指定某字段的默认值。如果性别字段中,男性较多时,将该字段默认约束设置为“男”。如果插入一条新的记录时没有为该字段赋值,那么数据库会自动为这个字段赋值为“男”。
默认约束的语法格式如下:
6. 查询数据操作
6.1. 基本查询语句
查询数据就是指从一张或多张数据表中查询所需的数据内容。其中可以分为查询所有字段和查询指定字段。
- 查询所有字段
SELECT查询记录最简单的形式是从一个表中检索所有记录,实现的方法是使用星号(*)通配符指定查找所有字段的名称。语法格式如下:
- 查询指定字段
SELECT查询记录可以从一个表中检索指定记录,实现的方法是在SELECT关键字后指定具体字段名。语法格式如下:
6.2. 条件查询语句
数据库中包含大量的数据,根据特殊要求,可能只需要查询表中的指定数据,即对数据进行过滤。在SELECT语句中,通过WHERE子句可以对数据进行过滤,语法格式如下:
在WHERE子句中,MySQL提供了一系列的条件判断符,如下表:
操作符 | 说明 |
= | 相等 |
<> , != | 不等 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
BETWEEN AND | 位于两值之间 |
IN(SET) | 包含 |
IS NULL | 为空 |
AND | 并且 |
OR | 或 |
NOT | 相反 |
【案例6.2.1】查询性别为女,并且年龄小于50的记录。
【案例6.2.2】查询学号为S_1001,或者姓名为LiSi的记录。
【案例6.2.3】查询学号为S_1001,S_1002,S_1003的记录。
【案例6.2.4】查询学号不是S_1001,S_1002,S_1003的记录。
【案例6.2.5】查询年龄为null的记录。
【案例6.2.6】查询年龄在20到40之间的学生记录。
=20 AND age<=40;" v:shapes="_x0000_s1067">
【案例6.2.7】查询性别非男的学生记录。
’male’;" v:shapes="_x0000_s1066">
【案例6.2.8】查询姓名不为null的学生记录。
6.3. 模糊查询语句
如果要查找所有的包含字符“ed”的记录,可以在WHERE子句中使用LIKE关键字进行查找,将这种查询称之为模糊查询。可以和LIKE关键字配合使用的通配符有“%”和“_”。
- 百分号通配符“%”,匹配任意长度的字符,甚至包括零字符。
² 查询以指定字符开始的记录,语法格式如下:
² 查询以指定字符结束的记录,语法格式如下:
² 查询字段包含指定字符的记录,语法格式如下:
- 下划线通配符“_”,一次只能匹配任意一个字符。
【案例6.3.1】查询姓名由5个字母构成的学生记录。
【案例6.3.2】查询姓名由5个字母构成,并且第5个字母为“i”的学生记录。
【案例6.3.3】查询姓名以“z”开头的学生记录。
【案例6.3.4】查询姓名中第2个字母为“i”的学生记录。
【案例6.3.5】查询姓名中包含“a”字母的学生记录。
6.4. 字段控制查询
在查询数据库记录时,也可以控制查询结果的显示效果,例如可以将查询的重复记录去除等。
- 去除重复记录,语法格式如下:
- 显示查询两字段之和的记录,语法格式如下:
- 为查询字段添加别名,语法格式如下:
【案例6.4.1】查询emp表中sal字段不重复的记录。
【案例6.4.2】查询雇员的月薪与佣金之和。
【案例6.4.3】查询雇员的月薪与佣金之和,其中如果有NULL值的话设置为0。
【案例6.4.4】查询雇员的月薪与佣金之和,其中如果有NULL值的话设置为0,为计算的和添加别名。
6.5. 排序查询语句
在查询数据库记录时,也可以将查询的结果按照某指定字段进行排序显示,可以使用ORDER BY子句完成。语法格式如下:
“ASC”关键字表示按照正序排序,“DESC”关键字表示按照倒序排序。当省略时,默认按照正序排序方式。
【案例6.5.1】查询所有学生记录,按年龄升序排序。
【案例6.5.2】查询所有学生记录,按年龄降序排序。
【案例6.5.3】查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序。
6.6. 聚合函数查询
有时候并不需要返回实际表中的数据,而只是对数据进行总结。MySQL提供了一些函数,可以实现计算数据表中记录行数的总数等功能。如下表:
函数 | 作用 |
AVG() | 返回某字段的平均值 |
COUNT() | 返回某字段的行数 |
MAX() | 返回某字段的最大值 |
MIN() | 返回某字段的最小值 |
SUM() | 返回某字段的和 |
【案例6.6.1】查询emp表中记录数。
【案例6.6.2】查询emp表中有佣金的人数。
【案例6.6.3】查询emp表中月薪大于2500的人数。
2500;" v:shapes="_x0000_s1050">
【案例6.6.4】统计月薪与佣金之和大于2500元的人数。
2500;" v:shapes="_x0000_s1049">
【案例6.6.5】查询有佣金的人数,以及有领导的人数。
【案例6.6.6】查询所有雇员月薪和。
【案例6.6.7】查询所有雇员月薪和,以及所有雇员佣金和。
【案例6.6.8】查询所有雇员月薪+佣金和。
【案例6.6.9】统计所有员工平均工资。
【案例6.6.10】查询最高工资和最低工资。
6.7. 分组查询语句
分组查询是对数据按照某个或多个字段进行分组,MySQL中使用GROUP BY 关键字对数据进行分组。
- GROUP BY关键字通常和聚合函数一起使用。语法格式如下:
- GROUP BY关键字可以和HAVING一起限定显示记录所需满足的条件,只有满足条件的分组才会被显示。
HAVING关键字与WHERE关键字都是用来查询条件的,两者之间有什么区别呢?其中重要的一点是HAVING在数据分组之后进行过滤来选择分组,而WHERE在分组之前用来选择记录。另外WHERE排除的记录不再包括在分组中。
【案例6.7.1】查询每个部门的部门编号和每个部门的工资和。
【案例6.7.2】查询每个部门的部门编号以及每个部门的人数。
【案例6.7.3】查询每个部门的部门编号以及每个部门工资大于1500的人数。
1500 GROUP BY deptno;" v:shapes="_x0000_s1040">
【案例6.7.4】查询工资总和大于9000的部门编号以及工资和。
9000;" v:shapes="_x0000_s1039">
6.8. 连接查询语句
连接是关系数据库模型的主要特点,连接查询是关系数据库中最主要的查询,主要包含内连接和外连接等。
- 内连接查询语法格式如下:
- 外连接查询语法格式如下:
6.9. LIMIT(MySQL方言)
SELECT返回所有匹配的行,有可能是表中所有的行,如仅仅需要返回第一行或者前几行,可以使用LIMIT关键字,语法格式如下:
“位置偏移量”参数指的是MySQL从哪一行开始显示,是一个可选参数。如果不指定“位置偏移量”,将会从表中的第一条记录开始。“行数”参数指的是返回的记录条数。
【案例6.9.1】查询5行记录,起始行从0开始。
【案例6.9.2】查询10行记录,起始行从3开始。
7. DML数据操作
7.1. 插入数据
MySQL数据库中使用INSERT语句向数据库表中插入新的数据记录,可以向数据表的所有字段插入数据,也可以向数据表的指定字段插入数据。
- 向数据表的所有字段插入数据。
“VALUES”关键字后是插入数据表中字段的记录,一般情况下,是数据表所有字段。但也可以是一部分字段记录,如果是这种情况下,没有插入记录的字段约束不能是NOT NULL的。
例如如下案例:
- 向数据表的指定字段插入数据。
这种情况下,字段名与字段值是一一对应的。没有插入值的字段会使用默认值。
例如如下案例:
7.2. 更新数据
数据表有数据之后,可以对数据进行更新操作,MySQL中使用UPDATE语句更新表中的记录,可以更新特定的行或者同时更新所有的行。语法格式如下:
保证UPDATE以WHERE子句结束,通过WHERE子句指定被更新的记录所需要满足的条件,如果忽略WHERE子句,MySQL将更新表中所有的行。
例如如下案例:
50 AND gender=’male’;" v:shapes="_x0000_s1032">
60 OR gender=’female’;" v:shapes="_x0000_s1031">
7.3. 删除数据
从数据表中删除数据使用DELETE语句,DELETE语句允许WHERE子句指定删除条件。DELETE语句基本语法格式如下:
使用WHERE子句可以删除指定记录,如果没有使用WHERE子句,DELETE语句将删除表中的所有记录。
例如如下案例:
30;" v:shapes="_x0000_s1027">
8. MySQL用户管理
8.1. 创建用户
创建新用户,必须有相应的权限来执行创建操作。在MySQL数据库中,使用CREATE USER语句来实现。语法格式如下:
主机名表示MySQL数据库所在的计算机,“localhost”表示本机,“%”表示任何可以登录MySQL数据库的计算机。
8.2. 修改密码
因为所有账户信息都保存在user表中,因此可以通过直接修改user表来改变用户密码。语法格式如下:
8.3. 授权
使用CREATE USER语句创建的用户是没有任何权限的,还需要使用GRANT语句为该用户授权。语法格式如下:
8.4. 收回权限
在为某一用户授权后,也可以REVOKE语句撤销用户的权限。语法格式如下:
8.5. 查看权限
也可以利用SHOW语句查看某一用户的权限,语法格式如下:
8.6. 删除用户
在MySQL数据库中,可以使用DROP USER语句删除用户。语法格式如下:
9. 数据备份与还原
9.1. 数据备份
MySQL可以使用mysqldump命令将指定数据库备份到指定脚本中,具体语法格式如下:
生成脚本路径;" v:shapes="_x0000_s1079">
9.2. 数据还原
在新创建一个数据库时,可以使用已从其他数据库备份的数据来恢复当前数据库。如果已经登录MySQL数据库,可以使用如下命令进行恢复数据:
如果没有登录MySQL数据库的话,也可以使用如下命令进行恢复数据: