购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第1章
初识MySQL

本章内容:

· MySQL的介绍

· 在Windows上安装MySQL

· 在Linux上安装MySQL

· 在Docker上安装MySQL

本章将讲解MySQL在Web业务场景下的意义和优势,介绍MySQL 8的特性和作用,并讲述在多种环境下安装MySQL的步骤,以便初学者可以快速开始MySQL的学习。

1.1 MySQL是什么

MySQL是当下流行的关系数据库管理系统(Relational Database Management System,RDBMS),使用C和C++语言编写而成,因而具有源码级的可移植性。MySQL可以在Linux、macOS、Novell NetWare、OpenBSD、Solaris、Windows等多种操作系统中运行。在Web应用方面,MySQL是非常好的关系数据库管理系统应用软件之一。作为一种关系数据库管理系统,它将数据保存在不同的数据表中。MySQL所使用的SQL语言是用于访问数据库的常用标准化语言。由于MySQL体积小、速度快、总拥有成本低,尤其是具有开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。由于其社区版性能卓越,因此搭配各种后端语言可以组成良好的开发环境。此外,MySQL既可以嵌入应用程序中,也可以独立支持数据仓库、全文索引和高可用的冗余系统、在线事务处理系统。另外,MySQL还具有如下特点:

· 为多种编程语言提供了API,这些编程语言包括C、C++、Python、Java、Perl、PHP、Ruby、.NET等。

· 支持多线程,可以充分利用CPU资源。

· 具有优化的SQL查询算法,有效地提高了查询速度。

· 提供TCP/IP、ODBC和JDBC等多种数据库连接途径。

· 支持可以处理上千万条记录的大型数据库。

· 支持多种存储引擎,比如InnoDB、MyISAM等。

· MySQL是可以定制的,它采用了GPL协议,因而用户可以通过修改源码来开发自己的MySQL系统。

· 提供多语言支持,常见的编码如中文的GB2312、UTF-8等都可以用作数据表名和数据列名。

· 提供用于管理、检查、优化数据库操作的管理工具。

· 具有在线DDL更改功能,数据架构支持动态应用程序,提高了开发人员操作数据表的灵活性。

· 复制无崩溃从机,可以提高可用性。

· 复制多线程从机,可以提高性能。

1.2 MySQL 8安装和配置

1.2.1 安装版本的选择

在安装MySQL时,应选择自己所需的版本和相应的文件格式。MySQL有开发版本和通用版本。开发版本具有最新功能,但不建议用于生产用途。通用版本可用于生产用途,因此建议安装最新的版本。

MySQL 8.0的版本号由三个数字和一个可选后缀组成,例如MySQL-8.0.3.[x],x可选,如果有,则会随着版本的发布而自增。版本号中的数字解释如下:

· 第一个数字(8)是主版本号。

· 第二个数字(0)是次版本号。主、次版本号一起构成发布的序列号,序列号表示包含稳定的功能集。

· 第三个数字(3)是发布系列中的版本号。每个新的错误修订版的版本号中都会增加此值。一般情况下建议安装最新的版本。

1.2.2 在Windows平台下安装和配置MySQL

MySQL只能安装在Microsoft Windows 64位操作系统中,如果想要安装MySQL 8.0 Server(服务器版),那么还需要在系统中安装Microsoft Visual C++ 2015 Redistributable Package和Microsoft .NET Framework 4.5.2或更高版本。在安装服务器版本之前,应确保在本地系统中已下载好软件安装包。下面将演示在Windows系统中安装MySQL数据库的两种方式。

1.MySQL Installer(利用安装程序安装)

进入MySQL官网下载相关安装包,如图1-1所示。第一个安装包用于在线安装,在网络畅通的情况下,可以选用这种安装方式。第二个是可以离线安装的软件包,一般建议采用这种安装方式。

图1-1 下载安装包

首次下载MySQL安装程序时,安装向导会引导我们完成MySQL产品的初始安装。首次安装需要进行初始设置,MySQL安装程序在初始设置期间会检测主机上安装的现有MySQL产品,并将它们添加到要管理的产品列表中。如图1-2所示,当我们打开MSI文件之后,会提示我们选择安装的类型。

图1-2 选择安装的类型

如图1-2所示,总共有5种安装类型。

①Developer Default(默认安装):用于MySQL应用程序的开发。如果我们想要利用MySQL来进行应用程序的开发,可以选择此安装类型。

②Server only(仅安装服务器):仅安装MySQL服务器。此安装类型在下载MySQL服务器安装包时会让用户选择安装GA版(一般可用性,即稳定版)或开发版。该安装类型使用默认的安装路径和数据存储路径。

③Client only(仅安装客户端):仅安装最新的MySQL应用程序和MySQL连接器。此安装类型类似于默认安装类型,不同之处在于它不包括MySQL服务器或通常与服务器捆绑的客户端程序,例如mysql或mysqladmin。

④Full(完整):安装所有可用的MySQL产品。如果是初学者,那么可以选择此安装类型。

⑤Custom(自定义):此安装类型可以从MySQL安装程序目录中筛选想安装的各个MySQL产品。

选择好想要的安装类型,单击Next按钮,就会进入安装需求检查对话框,如图1-3所示。

图1-3 安装需求检查对话框

在安装需求检查对话框中包括如下内容:

①显示初始设置中的当前步骤。读者在此列表中看到的步骤可能会略有不同,具体步骤取决于主机上已安装的产品、必备软件的可用性以及读者想要安装在主机上的产品。

②按产品列出所有待确认的安装需求。

③安装需求的详细说明可以帮助我们解决安装前需要解决的问题。如果需要安装必备的软件,则该界面会提供下载用的网址(URL)。在下载并安装所需的软件后,单击Check按钮来验证是否已经满足安装需求。

④提供以下辅助安装的操作:

· Back:返回上一步。此操作可以让我们回到上一步重新选择安装类型。

· Execute:让MySQL安装程序尝试为所有选择的安装项目下载和安装必备的软件。

· Next:不进行安装需求检查而继续安装产品,其中不包括未通过安装需求检查的产品。

· Cancel:取消安装MySQL产品。

MySQL网络和身份认证配置,如图1-4所示。

图1-4 MySQL网络配置

在该对话框中有以下选项:

①选择需要配置的服务类型。

②默认的服务端口号,①和②这两个配置可以不做修改。

③建议勾选Show Advanced and Logging Options复选框,以便在后续步骤中设置自定义日志记录和高级选项。

继续往下执行,会出现设置密码的对话框,如图1-5所示。

图1-5 账户密码设置

该对话框包含以下内容:

①给服务设置密码。

②重复输入一次以确认密码,应当确保这两次输入的密码一致。

MySQL服务名称设置,如图1-6所示。

图1-6 MySQL服务名称设置

在该对话框中输入MySQL服务的名称,建议使用默认值。

设置MySQL服务相关的输出日志存储的路径,如图1-7所示。

图1-7 设置MySQL服务输出日志存储的路径

在该对话框中包含以下内容:

①设置MySQL服务的错误日志输出路径。

②设置一般的日志输出路径。

③设置查询日志的输出路径。

④设置二进制日志的输出路径。

验证是否安装成功。如图1-8所示,按住键盘上的Windows键,选择“运行”,然后在弹出的对话框中输入services.msc,并按回车键。

图1-8 进入“运行”对话框

接下来会出现如图1-9所示的服务窗口。如果可以看到MySQL 8.0这个服务,就表示MySQL数据库安装成功。

图1-9 系统服务窗口

在服务成功启动之后,可以使用界面化工具Navicat连接数据库,当出现如图1-10所示的对话框时,输入主机名、端口号以及安装时设置的密码。在单击“测试连接”按钮之后,若出现连接成功的字样,则说明安装与配置都正确。

图1-10 通过界面化工具测试连接

2.在Windows上默认安装MySQL服务

表1-1所示是以默认安装类型安装MySQL服务后生成的相关目录,当我们需要查看相关信息或者数据日志时可能会用到。

表1-1 默认安装MySQL服务之后生成的相关目录

1.2.3 在Linux平台下安装和配置MySQL

使用MySQL Yum存储库安装最新的MySQL GA版本的步骤如下。

1.添加MySQL Yum存储库

要将MySQL Yum存储库添加到系统的存储库列表中,可以使用RPM命令来完成,具体步骤如下:

首先选择并下载适用于目标平台的安装包(发布包)。

我们可以查看目标系统的平台版本(操作系统版本序列号)。如图1-11所示,该平台的版本序列号为7。

图1-11 查看目标系统的操作系统版本序列号

然后下载工具wget,下载完成之后用下面的命令进行安装:

    yum install wget -y

接着下载对应版本的RPM文件,因为目前的平台是7系列,所以选择安装7.3版本的RPM文件。执行如下命令进行下载:

    wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

当出现如图1-12所示的界面时,说明下载成功。

图1-12 下载RPM包

2.安装下载的发布包

安装命令如下:

    yum install platform-and-version-specific-package-name.rpm

需要注意的是,platform-and-version-specific-package-name为下载的RPM包的名称。而后执行如下命令:

    yum install mysql80-community-release-el7-3.noarch.rpm -y

如果出现如图1-13所示的Complete说明,就表示发布包安装完成。

图1-13 发布包安装成功

如果使用的是其他系列的版本,那么可以根据实际情况选择安装相应的发布包。

对于基于EL6的系统,命令的形式为:

    yum install mysql80-community-release-el6-{version-number}.noarch.rpm

对于基于EL7的系统,命令的形式为:

    yum install mysql80-community-release-el7-{version-number}.noarch.rpm

对于基于EL8的系统,命令的形式为:

    yum install mysql80-community-release-el8-{version-number}.noarch.rpm

对于Fedora 34,命令的形式为:

    dnf install mysql80-community-release-fc34-{version-number}.noarch.rpm

对于Fedora 33,命令的形式为:

    dnf install mysql80-community-release-fc33-{version-number}.noarch.rpm
3.安装MySQL

通过以下命令安装MySQL:

    yum install mysql-community-server -y

这条命令将安装MySQL服务器包(mysql-community-server)以及运行该服务器所需组件的包,包括客户端包(mysql-community-client)、客户端和服务器的常见错误消息和字符集(mysql-community-common)以及共享客户端库(mysql-community-libs)。如果出现如图1-14所示的信息,就表示安装成功。

图1-14 安装MySQL

4.启动MySQL服务器

使用以下命令启动MySQL服务器:

    systemctl start mysqld

使用以下命令检查MySQL服务器的状态:

    systemctl status mysqld

查询服务的状态,显示running时表示服务已经启动,如图1-15所示。

图1-15 MySQL服务状态

需要注意的是,如果操作系统已启用systemd,则应使用标准systemctl(或service)命令(例如stop、start、status和restart)来管理MySQL服务器的服务。mysqld服务默认是启用的(在系统重新启动时启用了)。

5.登录MySQL

在安装MySQL服务时系统创建了一个超级用户账户(root)。超级用户的密码已设置并存储在错误日志文件中,如果我们想要知道密码,可以使用如下命令进行查询:

    grep 'temporary password' /var/log/mysqld.log

如图1-16所示,最后输出的字符串就是想要查看的密码。

图1-16 想要查看的密码

我们使用生成的临时密码登录并为超级用户账户设置自定义密码,以便尽快更改root密码。首先执行下面的命令进行登录:

    mysql -uroot -p

如图1-17所示,在登录过程中需要输入密码,可以输入之前查询到的密码进行登录。

图1-17 MySQL登录

然后执行如下命令修改密码:

    alter user 'root'@'localhost' identified by 'NewPass';

在修改密码时注意密码要尽量复杂,需要包含数字、大小写字母和标记符号,否则系统会出现如图1-18所示的提示,提示密码修改出错。

图1-18 修改MySQL账户的密码

1.2.4 在Docker平台下安装和配置MySQL

Docker是一个用于开发、交付和运行应用程序的开放平台。Docker能够将应用程序与基础架构分开,从而快速交付软件。借助Docker,可以采用与管理应用程序相同的方式来管理基础架构。

Docker是当下热门的容器,为了省去Linux下安装配置程序烦琐且易于出错的步骤,笔者增加了本节内容,安装Docker环境后,就能在其下快速地安装Redis服务。

1.在CentOS下安装Docker

安装Docker的系统需求是必须具备一个CentOS 7或者CentOS 8的维护版本,不支持之前的旧版本。

1)卸载旧版本

较旧的Docker版本称为docker或docker-engine。如果安装过这些程序,请卸载它们及其相关的依赖项。

2)更新系统yum工具包

需要安装yum-utils软件包:

    $ sudo yum install -y yum-utils
3)设置稳定的存储库(可选择其中一个)

可以根据自己的网络情况选择存储库地址,推荐使用阿里云和清华大学源,如果设置官方源,那么需要单独设置好网络才可以进行正常操作。

使用官方源地址:

    $ sudo yum-config-manager \
        --add-repo \
    https:// download.docker.com/linux/centos/docker-ce.repo

使用阿里云:

    $ sudo yum-config-manager \
       --add-repo \
    http:// mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

使用清华大学源:

    $ sudo yum-config-manager \
        --add-repo \
    https:// mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
4)安装Docker Engine-Community

安装社区版Docker包:

    $ sudo yum install docker-ce docker-ce-cli containerd.io
5)启动Docker

启动Docker很简单:

    $ sudo systemctl start docker
6)验证是否正确安装

可以使用如下命令来验证Docker是否正确安装:

    $ sudo docker run hello-world
2.在Windows 10下安装Docker

Docker Desktop是Docker在Windows 10和macOS操作系统上的官方安装方式,这种方式依然是先在虚拟机中安装Linux,再安装Docker。用户可以从网上搜索Docker Desktop的安装软件docker-ce-desktop-windows(此方法仅适用于Windows 10操作系统专业版、企业版、教育版和部分家庭版)。

1)安装Hyper-V虚拟机

Hyper-V是微软开发的虚拟机,类似于VMWare或VirtualBox,只是Hyper-V仅适用于Windows 10。这是Docker Desktop for Windows所使用的虚拟机(这个虚拟机一旦启用,VirtualBox、VMWare、Workstation 15及以下版本将无法使用。如果必须在计算机上使用其他虚拟机,则不要在Windows中启动Hyper-V)。

2)启动Hyper-V

启动Hyper-V的操作步骤如下:

在Windows中右击“开始”按钮,在弹出的快捷菜单中选择“应用和功能”命令,如图1-19所示。

打开“程序和功能”窗口,单击“启用或关闭Windows功能”链接,如图1-20所示。

图1-19 选择“应用和功能”命令

图1-20 “程序和功能”窗口

在打开的“Windows功能”对话框中勾选“Hyper-V”复选框,然后单击“确定”按钮,如图1-21所示。

图1-21 勾选“Hyper-V”复选框

3)安装Docker

接下来双击下载的安装Docker的EXE文件,在打开的对话框中单击Next按钮,最后单击Finish按钮完成安装。

安装完成后,Docker会自动启动,通知栏上会出现 图标,表示Docker正在运行,然后按Win+R快捷键,在弹出的“运行”窗口中输入PowerShell。

用户还可以执行命令docker run hello-world来检查是否安装成功。

3.利用Docker安装MySQL
1)下载MySQL镜像

执行docker pull mysql/mysql-server:8.0下载MySQL镜像,如图1-22所示。

图1-22 下载镜像

2)启动MySQL服务

执行如下命令启动MySQL服务:

    docker run --name=mysql1 --restart on-failure -d mysql/mysql-server:8.0
3)其他操作

删除容器的命令如下:

    docker rm -f mysql1

停止容器的命令如下:

    docker stop mysql1
4)查看启动的日志

查看启动日志的命令如下:

    docker logs mysql1

查看MySQL服务的密码的命令如下:

    docker logs mysql1 2>&1 | grep GENERATED

查询到的密码如图1-23所示。

图1-23 查询到的密码

5)登录MySQL服务

登录MySQL服务的命令如下:

    docker exec -it mysql1 mysql -uroot -p

当系统询问时,输入生成的root密码。由于该MYSQL_ONETIME_PASSWORD选项默认为true,因此在将MySQL客户端连接到服务器后,必须通过以下语句来重置服务器root账户的密码:

    alter user 'root'@'localhost' identified by 'password';

或者执行下面的命令进行安装:

    docker run -p 3306:3306 --name mysql \
    -v /root/mysql/log:/var/log/mysql \
    -v /root/mysql/data:/var/lib/mysql \
    -v /root/mysql/conf:/etc/mysql \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -d mysql/mysql-server:8.0

以上命令挂载了服务的日志文件和lib文件,已经设置好了密码。需要注意的是,在执行这条命令之前,要在宿主机的/root/mysql/conf目录下创建my.cnf文件,这个文件是服务启动的配置文件,该配置文件至少应该有如下几行内容:

    [mysqld]
    init_connect='set collation_connection = utf8_general_ci'
    init_connect='set names utf8'
    secure_file_priv=

1.3 如何学习MySQL

在学习MySQL数据库之前,很多读者会问,如何才能更好地学习MySQL的相关技能呢?下面就讲述学习MySQL的方法。

1.培养兴趣

兴趣是最好的老师,不论学习什么知识,兴趣都可以极大地提高学习效率,学习MySQL也不例外。

2.扎实基础

随着技术应用的不断深入,只有有着扎实的基础功底,才能在技术道路上走得更远。对于MySQL的学习而言,SQL语句是其中最基础的部分,很多功能都通过SQL语句来实现,所以读者在学习的过程中要多编写SQL语句,最好能对同一功能使用不同的SQL语句来实现。

1.4 本章练习

1.下载并安装MySQL数据库。

2.使用配置向导配置MySQL为系统服务,并设置为手动启动或者关闭MySQL服务。 BihfW5t/jfjOUjIgxWXRjHDDJT+nwpVoWE+s/A5NRMj+TvQb7p+Vx2M8o7RR7qRv



第2章
数据库设计

本章内容:

· 数据库设计理论

· 连接数据库

· 创建数据库和表

本章将讲解数据库设计理论,以简单的示例讲解三大范式以及MySQL中对数据库和表的基本操作(包括创建数据库、切换数据库、创建表等)。

2.1 关系数据库设计理论三大范式

关系模型(Relational Model)是一种基于表的数据模型,它广泛应用于数据库管理系统(DBMS)中。关系模型的核心思想是将数据组织成表,每个表包含一组相关的行和列。这些行和列之间的关系通过主键和外键来定义,从而实现数据的完整性、一致性和可维护性。关系模型中一些重要术语介绍如下:

· 属性(Attribute):列的名称。

· 关系(Relation):列属性之间存在的某种关联。

· 表(Table):由多个属性以及众多元组所表示的各个实例组成。

· 键(Key):由一个或多个属性组成,其值能唯一标识关系中的一个元组。如果某个关系A中的一个(组)属性是另一个关系B的键,则该(组)属性在A中被称为外键。

· 笛卡儿积(交叉连接,Cross Join):第一个关系的每一行数据分别与第二个关系的每一行数据组合。

· 自然连接(Natural Join):第一个关系的每一行数据与第二个关系的每一行数据进行匹配,若得到交叉部分则合并,若无交叉部分则舍弃。

· θ连接(Theta Join):加上约束条件的笛卡儿积,先得到笛卡儿积,再根据约束条件删除不满足条件的元组。

· 外连接(Outer Join):执行自然连接后,将舍弃的部分也加入,并且把匹配失败处的属性设置为null。

表2-1是一张酒店客人入住信息表。

表2-1 酒店客人入住信息表

通过表2-1可以发现,该表存在不符合规范的设计,总共有如下几点:

(1)信息重复:比如客房类型和客房状态存在大量的数据重复。

(2)更新异常:修改了一个记录中的信息,但是另一个记录中相同的信息却没有被同步修改。

(3)插入异常:无法正确表示信息。

(4)删除异常:丢失有效信息。

下面利用三大范式对数据库进行改造。

第一范式(1NF): 目标是确保每列的原子性,如果每列都是不可再分的最小数据单元(也被称为最小的原子单元),则满足第一范式。

例2.1 第一范式优化表格示例。

没有经过第一范式优化的表格如表2-2所示。

表2-2 没有经过第一范式优化的表格

经过第一范式优化的表格如表2-3所示。

表2-3 经过第一范式优化的表格

第二范式(2NF): 要求每张表只描述一件事情。

例2.2 第二范式优化表格示例。

没有经过第二范式优化的表格如表2-4所示。

表2-4 没有经过第二范式优化的表格

经过第二范式优化之后,把一张表拆解成两张表,分别为Guest表和Room表。

Guest表如表2-5所示。

表2-5 Guest表

Room表如表2-6所示。

表2-6 Room表

第三范式(3NF): 如果一个关系满足第二范式,并且除了主键以外的其他列都不依赖于主键列,则满足第三范式。

例2.3 第三范式优化表格示例。

没有经过第三范式优化的Room表如表2-7所示。

表2-7 没有经过第三范式优化的Room表

经过第三范式优化之后,拆成3张表,分别是Room表、RoomType表和RoomState表。

Room表如表2-8所示。

表2-8 Room表

RoomType表如表2-9所示。

表2-9 RoomType表

RoomState表如表2-10所示。

表2-10 RoomState表

如上所述,经过三大范式将一张存在问题的大表拆分成4张表,最终数据库设计结构如图2-1所示(PK表示主键,FK表示外键)。

图2-1 酒店管理系统数据库模型

2.2 连接数据库和基本信息查询

数据库设计好了,本节就来连接数据库并进行基本信息查询。

2.2.1 连接数据库

要连接到SQL服务器,需要在调用MySQL时提供用户名,并且很可能需要提供密码。如果SQL服务器在其他计算机上运行,还必须指定主机名。此时应联系管理员,了解该使用哪些连接参数来进行连接(即使用的主机、用户名和密码)。当知道正确的参数之后,可以执行如下命令进行连接:

    shell> mysql -h host -u user -p
    Enter password: ********

host和user分别代表运行的MySQL服务器的主机名和MySQL账户的用户名。********代表密码,当MySQL显示“Enter password:”提示时,输入账户对应的密码。如果输入密码正确,那么会看到如下信息:

    shell> mysql -h host -u user -p
    Enter password: ********
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 25338 to server version: 8.0.25-standard
    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
    mysql>

出现“mysql>”提示符就表示可以输入SQL语句了。

如果在运行MySQL的同一台计算机上登录,则可以省略主机名,只需执行以下命令:

    shell> mysql -u user -p

如果在尝试登录时收到错误提示信息,例如ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2),则表示MySQL服务器守护程序(在UNIX操作系统中)或服务(在Windows操作系统中)未运行,也就是需要启动MySQL服务。

2.2.2 基本信息查询

本小节将介绍信息查询的基本原则,通过几个查询示例来熟悉MySQL的工作原理。

例2.4 查询服务器的版本号和当前日期。在“mysql>”提示符后面输入如下命令,然后按Enter键:

这是一个简单的查询,说明了有关MySQL查询的几点信息:

(1)查询通常由以分号结尾的SQL语句组成(有一些例外可以省略分号,QUIT语句就是其中之一)。

(2)当我们输入查询语句后,MySQL将它发送到服务器执行并显示结果,然后显示出下一个“mysql>”提示符,表明它已准备好接收另一个查询。

(3)MySQL以表格形式(行和列)显示查询的结果。第一行是列的标签(或称为列名),其他行是查询的结果。通常列标签是从数据库表中提取的列名称。如果要检索表达式的值而不是表列的值,那么MySQL会使用表达式本身来标记该列。

图2-2 SQL关键字不区分字母大小写示例

(4)MySQL显示返回了多少行数据以及执行查询用了多长时间,由此我们大致可以了解服务器的性能。不过这些值是不精确的,因为它们代表的是时钟时间,并且受到服务器负载和网络延迟等因素的影响。

例2.5 使用不同字母大小写进行相同内容的查询。

    mysql> SELECT VERSION(), CURRENT_DATE;
    mysql> select version(), current_date;
    mysql> SeLeCt vErSiOn(), current_DATE;

查询结果如图2-2所示,在查询时,输入的SQL语句中的关键字可以不区分字母大小写,最后输出的答案是一致的,也不会抛出任何异常。

例2.6 把MySQL用作计算器。

执行结果如图2-3所示,MySQL给出了计算结果。

例2.7 用分号分隔多条SQL语句。

执行结果如图2-4所示,可以在一行中输入多条SQL语句(或命令),每条SQL语句之间只需用分号分隔即可。

图2-3 MySQL作为计算器

图2-4 一行执行多条SQL语句

例2.8 MySQL可以写成多行的形式,最后带上终止分号即可。

上述SQL语句的执行结果如图2-5所示。如果一条SQL查询语句冗长,在一行内写不下,那么可以写成多行的形式,最后带上终止分号即可,因为MySQL不是在每一行的末尾去找代表SQL语句结束的分号,而是在多个连续行去找分号来确定语句的结束位置。(MySQL接收自由格式的输入,在看到分号之后才会执行当前的SQL查询语句),当我们不输入分号时,之前输入的命令是不会被执行的。

例2.9 取消查询。

    mysql>  select
        -> users
        -> \c
    mysql>

执行结果如图2-6所示,当输入“\c”之后,当前输入的命令就被取消执行了。

图2-5 多行查询

图2-6 取消执行当前输入的SQL命令

需要注意的是,在输入取消命令“\c”之后,MySQL回到“mysql>”提示符状态,表示已准备好接收新的查询。表2-11总结了MySQL显示不同提示符时所处的状态。

表2-11 MySQL所处状态的含义

(1)当以单行输入查询语句时,如果忘记以分号结尾,那么MySQL会一直等待我们输入“;”:

    mysql> select user()
       ->

如果发生这种情况(我们认为已经输入完成一条查询语句,而唯一的响应是“->”提示符),那么很可能就是MySQL在等待分号。输入分号之后,MySQL才会开始执行输入的SQL查询语句:

(2)“'>”和“">”提示符表示当前正处于字符串的收集过程中(即表示MySQL正在等待用户输入表示字符串终止的配对符号)。在MySQL中,我们可以编写由一对“'”或一对“"”作为起止的字符串,而MySQL允许输入跨多行的字符串。当看到“'>”或“">”提示符时,表示输入了包含以“'”或“"”开头的字符串,但尚未输入终止字符串的配对引号。例如:

    mysql> select * from mytable where name = 'clay  and age <18;
       '>

如果输入此select语句,然后按Enter键并等待结果,则没有任何反应。此时我们需要注意“'>”提示符提供的线索。它其实是告诉我们:MySQL希望看到字符串的其余部分(语句中clay开始的字符串缺少了第二个单引号)。此时我们可以选择输入“\c”取消本次查询语句的执行:

    mysql> select * from mytable where name = clay and age < 18;
        '> '\c
    mysql>

提示符又变回“mysql>”,表明MySQL再次就绪,可以接收新的查询。

2.3 创建数据库和表

在学习如何创建数据库和表之前,可以使用如下步骤来查询当前服务器中存在的数据库:

使用show语句查询当前服务器上存在哪些数据库:

从以上信息可以了解到,当我们执行show databases语句后,服务器将查询当前存在的所有数据库。

mysql数据库存储了用户访问权限等信息。test数据库是系统提供的默认测试库,可以删除。上述语句显示的数据库列表可能和读者计算机上显示的数据库列表有所不同,因为不会显示当前用户没有访问权限的数据库。

如果mysql数据库存在,那么我们可以进入mysql数据库查询当前数据库中的表。比如,使用如下语句可以切换到mysql数据库:

使用如下语句可以查询当前数据库中的所有表:

执行结果如图2-7所示,首先切换到mysql数据库,然后查询出当前mysql数据库中的所有表。

图2-7 查询mysql数据库中的所有表

2.3.1 创建数据库

如果要创建一个新的数据库,那么可以执行如下语句:

    create database DEMO;

执行结果如图2-8所示,创建数据库成功。

图2-8 创建数据库

在UNIX操作系统中,数据库的名称是区分字母大小写的(这与SQL关键字不区分字母大小写不同),因此在进入数据库时,必须使用数据库的名称DEMO来指向正确的数据库,而不能使用Demo、demo。对于表名也是如此(注意,在Windows中此限制不适用)。如图2-9所示,切换数据库时,由于未正确使用大小写而导致切换数据库操作失败。

如图2-10所示,唯有数据库名称的大小写正确才能正常完成数据库的切换。

图2-9 数据库切换操作失败

图2-10 数据库切换操作成功

如果在创建数据库时出现诸如ERROR 1044 (42000): Access denied for user clay@'localhost'的错误,则说明用户没有创建数据库所需的权限。

2.3.2 创建表

如图2-11所示,进入DMEO数据库中,此时该数据库中并没有任何表。

图2-11 切换数据库并查询所有表

如果要在DEMO数据库中创建表,那么在创建之前需要了解如下信息:

· 表名:代表数据表的名称,如果我们想要存储用户信息,则可以取名为userinfo。

· 表字段名:表示表中有哪些属性,比如name、age、address等字段。

以下为创建MySQL数据表的通用语法:

    create table table_name (column_name column_type);

例2.10 在DEMO数据库中创建数据表userinfo,SQL语句如下:

    create table if not exists `userinfo`(
       `id` int unsigned auto_increment,
       `name` varchar(100) not null,
       `age` int not null,
       `date` date,
       primary key ( `id` ))engine=innodb default charset=utf8;

上述语句说明如下:

· 如果不希望字段的值为null,那么可以将字段的属性设置为not null,如果在操作数据库时将null输入到该字段,则会报错。

· auto_increment:把列定义为自增的属性,一般用于主键,数值会自动加1。

· primary key:用于把列定义为主键,可以使用多列来定义主键,列之间以逗号分隔。

· engine:设置存储引擎。

· charset:设置字符集的编码。

· varchar(100)与int:代表此字段使用的数据类型,后续章节会专门讲解每一种数据类型。

创建结果如图2-12所示。

图2-12 创建表

如果想查询此表的结构,可以执行如下语句:

    describe userinfo;

执行结果如图2-13所示,可以清晰地看到此表的结构及其说明。

图2-13 查询表的结构及其说明

此后若再次查询当前数据库中的表,则会显示已创建表的基本信息,如图2-14所示。

图2-14 查询数据库中表的基本信息

2.4 本章练习

1.查看当前系统中所有的数据库。

2.创建名为userinfo的数据库。

3.根据表2-5、表2-6、表2-8、表2-9、表2-10的信息,使用SQL语句在数据库中创建表。 BihfW5t/jfjOUjIgxWXRjHDDJT+nwpVoWE+s/A5NRMj+TvQb7p+Vx2M8o7RR7qRv

点击中间区域
呼出菜单
上一章
目录
下一章
×