跳转到内容

MySQL/MySQL 实用指南

来自维基教科书,开放世界中的开放书籍

安装 MySQL

[编辑 | 编辑源代码]

一体化解决方案

[编辑 | 编辑源代码]

由于 MySQL 本身不足以运行真正的数据库服务器,所以安装它的更实用方法是部署一个一体化包,其中包含所有必要的额外元素:ApachePHP

  1. 在 Linux 上:XAMP 或 LAMP
  2. 在 Windows 上:XAMPWAMPEasyPHP

Windows 10 注意

  • 服务器 IIS 默认启动,这会导致 Apache 更改其端口(888 而不是 80)。要解决这个问题,只需在“程序和功能”中取消选中“Internet Information Services”,然后“启用或停用 Windows 功能”。同样,MySQL 端口可能会从 3306 更改为 3388。
  • 此外,EasyPHP 开发服务器(别名 Devserver,红色版本)无法正常工作(缺少 MSVCR110.dll),但EasyPHP 托管服务器(别名 Webserver,蓝色版本)可以。但是,它在每次启动时都会自动启动,这会显著降低系统速度。为了避免这种情况,请执行services.msc,并将以下三个服务切换到手动启动。然后,要按需(以管理员身份)启动它们,请创建一个名为MySQL.cmd的脚本,其中包含以下几行
net start ews-dbserver
net start ews-httpserver
net start ews-dashboard
pause
net stop ews-dashboard
net stop ews-httpserver
net stop ews-dbserver

单一安装

[编辑 | 编辑源代码]

本指南从使用 Ubuntu 和 apt-get 的 Linux Shell 的角度撰写[1]

如果您只想使用终端:

确保您已安装 MySQL 客户端和服务器。要在 apt-get 发行版(例如 Debian 和 Ubuntu)下安装客户端和服务器,请执行

apt-get install mysql-client mysql-client-5.0 mysql-server mysql-server-5.0


关于 MySQL 包

[2]


确保安装安全:

如果以下所有答案都是“是”,那么这将清理您的安装,强制您设置 root 密码,要求您测试匿名用户并使您的数据库内部化。

请务必小心。确保您正在按照您的规格配置 MySQL。

以下是代码

mysql_secure_installation

创建您自己的 MySQL 账户和数据库

[编辑 | 编辑源代码]

现在 MySQL 已安装,您不一定拥有自己的账户,因此您必须以 root 身份登录。

要执行此操作,请键入

sudo mysql -u root -p

(这意味着您正在以“root”用户身份登录(-u root),并且您正在请求“root”的密码(-p))


成功登录后,您的命令行应如下所示:mysql>


顺便说一句,如果您的命令行最终看起来像这样:-> 则有一个解释。

在 MySQL 中,您执行的每个命令都必须以;结尾。这样它就知道;后面的所有内容都是一个命令。

因此,要退出,只需键入;。稍后将对此进行更多介绍。


现在您可以检查哪些数据库(如果有)可供您的用户使用(在本例中为“root”)

show databases;

让我们直奔主题,创建自己的数据库。让我们把它命名为people。在创建数据库的同时,我们也可以创建自己的用户账户。一举两得。

因此,首先创建数据库

create database people; 

(注意:在本例中,您必须是“root”才能创建新数据库。)


现在我们想授予(GRANT)来自(ON)整个(*people 数据库的所有用户权限(ALL)给(TO)您的账户(yourusername@localhost),您的用户密码为stuffedpoodleIDENTIFIED BY "stuffedpoodle")。


所以我们会输入以下内容

GRANT ALL ON people.* TO yourusername@localhost IDENTIFIED BY "stuffedpoodle";

太棒了!您现在有了自己的用户账户。假设您选择ted作为您的用户名。您已配置 MySQL 以表明ted可以根据自己的意愿使用people 数据库。


现在通过键入以下内容退出 MySQL

exit

要开始使用people 数据库,您现在可以以ted身份登录

mysql -u ted -p

在数据库中创建带有信息的表格

[编辑 | 编辑源代码]

在 MySQL 中,信息存储在表格中。表格包含列和行。

Ted现在创建了一个people 数据库。因此,我们现在想将一些信息输入表格中。

ted身份登录。

首先,我们需要确保我们正在使用people 数据库。所以键入

 select database(); 

将显示您当前正在使用的数据库。您应该看到一个NULL,这意味着您目前没有使用任何数据库。


因此,要开始使用 people 数据库,请键入

\u people

(注意:键入:USE people 或以mysql people -u ted -p身份登录也是可以接受的。)


那么如何创建表格呢?

请记住,我们需要设置所有列值(如姓氏、年龄等)。


现在,还记得那个烦人的->符号吗?MySQL 将您的命令视为一个命令,而不是一系列命令。因此,-> 使您能够以比在一行上写下所有内容更友好的方式输入内容。(注意:此方法的问题在于,如果您在一行上犯了错误并按 ENTER 转到下一行,则无法返回并更正错误。这就是为什么使用SciTE 文本编辑器(将语言设置为SQL)编写代码并将代码复制粘贴到 shell 中是一个很好的方法。)

还有一点是,您必须在除最后两行外的每行的末尾用,分隔行。在倒数第二行,不要添加,,最后一行始终以;结尾。


首先,我需要解释几件事,这样您就不会被一堆陌生的代码吓到。

如果您不知道,我们使用括号()封装代码。(通常称为圆括号)。

CREATE TABLE tableName 和第一个括号之后,我们将要写的第一个内容是每个人的数据库 ID 编号(我们使用整数[3]),主要称为主键。它有点像护照 ID 号码。每个号码对它的所有者都是唯一的,并且它必须是唯一的,以防止重复和冒充。

现在,SQL 中的任何变量都是这样创建的

 variableNAME variableTYPE otherVariableAttributes

. 因此,为了定义主键变量,我们需要键入例如

peopleID(变量名称) int(变量类型 - “integer”的缩写) unsigned(表示我们希望我们的整数值始终为正数) not null(我们希望每行都具有一个值,因此显然该值不能为空 (NULL)) auto_increment(这将确保创建的每个新行都是唯一的) primary key(我们正在说这个特定的变量将是该表格的主键。), (提醒您,, 符号表示该行的结束,因此 MySQL 知道要转到下一行)

您已经了解了int 变量。还有一个类似于String 的变量(例如:如果您以前使用过 Java 编程)。它被称为varchar,代表可变字符。您为有人可以输入varchar 变量的字符数设置一个值。像这样:nameOfFattestMooseAlive varchar(30) 所以nameOfFattestMooseAlive 最多可以包含 30 个字符。


好的,那么让我们来看一个关于如何创建与people 数据库相关的表格的例子

CREATE TABLE peopleInfo

(

peopleID int unsigned not null auto_increment primary key,

firstName varchar(30),

lastName varchar(30),

age int,

gender varchar(13)

);

请注意,我将gender 的最大值设置为 13,因为“hermaphrodite” 有 13 个字符。:)


现在您可以键入:CREATE TABLE peopleInfo 并按 ENTER 键,如果您想开始-> 并编写其余的代码,或者您可以使用 SCITE 并将其复制粘贴到您的 shell 中。


太棒了。我们现在完成了第一个表格。

现在到了我们要将一些真实的人员输入到我们的peopleInfo 表格中的部分。


由于您已使用people 数据库,因此您可以键入

show tables;

查看当前数据库中的表格。要查看表格的属性,请键入

describe peopleInfo;


那么,如何将人员填充到我们的peopleInfo 表格中呢?

这是通过告诉 MySQL 您要填充的以及您要填充的实际信息/数据来完成的。

因此,我们想插入到我们的表格中(指定行)并输入我们想要的值(实际数据)。(注意:我们没有填写主键。)


要创建第一个人,您会键入以下内容

INSERT INTO peopleInfo

(firstName, lastName, age, gender)

values

("Bill", "Harper", 17, "male");


太棒了。现在,如果您想将表格的所有信息打印到屏幕上,请键入

select * from peopleInfo;

就是这样。您的表格现在存储了第一个人。

将大量信息插入到您的表格中

一个将在稍后讨论的要点是,MySQL 将其自身备份到 .sql 文件中。这样做很聪明,因为它会将文本文件中的实际代码备份。


考虑到这一点,假设我们要在你的 peopleInfo 表中添加 10 个人。如果手动输入每一个人,那将是一件非常繁琐的事情。如果要添加 1000 个人怎么办?


因此,我已经很贴心地写出了将 10 个人填充到数据库中的代码。:) 创建一个空白的 .txt 文件,并将以下信息复制粘贴到其中,保存为 tenPeople.sql

INSERT INTO peopleInfo (firstName, lastName, age, gender) values ("Mary", "Jones", 21, "female");
INSERT INTO peopleInfo (firstName, lastName, age, gender) values ("Jill", "Harrington", 19, "female");
INSERT INTO peopleInfo (firstName, lastName, age, gender) values ("Bob", "Mill", 26, "male");
INSERT INTO peopleInfo (firstName, lastName, age, gender) values ("Alfred", "Jinks", 23, "male");
INSERT INTO peopleInfo (firstName, lastName, age, gender) values ("Sandra", "Tussel", 31, "female");
INSERT INTO peopleInfo (firstName, lastName, age, gender) values ("Mike", "Habraha", 45, "male");
INSERT INTO peopleInfo (firstName, lastName, age, gender) values ("John", "Murry", 22, "male");
INSERT INTO peopleInfo (firstName, lastName, age, gender) values ("Jake", "Mechowsky", 34, "male");
INSERT INTO peopleInfo (firstName, lastName, age, gender) values ("Hobrah", "Hinbrah", 24, "hermaphrodite");
INSERT INTO peopleInfo (firstName, lastName, age, gender) values ("Laura", "Smith", 17, "female");

很好。现在我们要将所有这些人添加到我们的表格中。退出 MySQL,并转到保存 tenPeople.sql 文件的目录。

到达那里后,要将所有数据添加到你的数据库,输入:

mysql -u ted -p people <tenPeople.sql

然后输入你的密码。

现在登录到 MySQL,并记住选择你正在使用的数据库。\u people

现在再次检查你拥有的信息。好了。

操作你的数据库

[edit | edit source]

现在我们有一个充满了人的数据库。我们可以以我们想要的方式显示这些信息。

一个简单的例子是

select firstName, lastName, gender from peopleInfo;

这只会将人们的姓名、姓氏和性别显示在屏幕上。你没有指定要显示人们的数据库 ID、数字或年龄。而且最棒的是,你可以选择要显示的数据库中的任何内容。现在,如果你想删除你的表格,只需输入

drop table peopleInfo;


附加条件

你也可以在显示数据时使用额外的条件(过滤器)。

select * from peopleInfo where gender = 'female';

将显示所有女性。

(注意:字母用 ' 括起来,而数字则直接使用。)

你也可以比较数字。例如

select * from peopleInfo where age > 17;

将显示表格中所有年龄大于 17 的人。

一个小索引

>   greater than
<   less than
>=  greater or equal to
<=  less than or equal to
<>  not equal to


假设我们要显示所有姓氏以字母 “j” 开头的人。我们将使用 LIKE 条件。(说得通,你的名字像字母 “j” 吗?如果它以 j 开头,那么答案是肯定的。:))

关于 LIKE 条件。

[4]

select * from peopleInfo where firstName LIKE "j%";

(注意:LIKE 的邪恶的相反的表兄弟是 NOT LIKE)

备份和恢复你的 MySQL 数据库

[edit | edit source]

有一个名为 mysqldump 的函数。这是一种备份数据库的方法。

还记得你如何从 tenPeople.sql 中将信息导入数据库吗?这就是你将信息恢复到数据库的方式。

(在这种特殊情况下,你必须确保你的数据库中有一个名为“peopleInfo”的表格)


现在...

要备份你的数据库(在本例中备份 people 数据库)

我们首先要创建我们要备份到的 .txt 文件。打开一个空白的 .txt 文件,并将其保存为 backupfile.sql

现在我们可以输入

mysqldump -u ted -p people > backupfile.sql

恭喜你。你现在已经备份了你的 people 数据库。


警告! mysqldump 是备份生产数据库的最糟糕方法之一,原因如下

  • 它需要相当长的时间来转储数据
  • 恢复需要更长的时间。取决于数据量,可能需要几天时间!
  • MyISAM 表或混合环境的锁定问题

更好的解决方案基于二进制复制。它允许你执行非锁定、一致的备份。

对于 MyISAM 或混合环境

  • LVM 快照

对于 InnoDB

  • LVM 快照
  • ZFS 快照(适用于 Solaris 系统)
  • InnoDB 热备份
  • XtraBackup(类似于 InnoDB 热备份,但免费)

phpMyAdmin

[edit | edit source]

这个图形界面允许通过用鼠标选择一些选项来生成 SQL 代码。该软件在 http://wiki.cihar.com/pma/Welcome_to_phpMyAdmin_Wiki 上有自己的维基页面。

Hello world

[edit | edit source]

要输入 SQL 命令

select "hello world";
+-------------+
| hello world |
+-------------+
| hello world |
+-------------+
1 row in set (0.00 sec)
华夏公益教科书