MySQL/MySQL 实用指南
由于 MySQL 本身不足以运行真正的数据库服务器,所以安装它的更实用方法是部署一个一体化包,其中包含所有必要的额外元素:Apache 和 PHP。
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 包
确保安装安全:
如果以下所有答案都是“是”,那么这将清理您的安装,强制您设置 root 密码,要求您测试匿名用户并使您的数据库内部化。
请务必小心。确保您正在按照您的规格配置 MySQL。
以下是代码
mysql_secure_installation
现在 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),您的用户密码为stuffedpoodle(IDENTIFIED 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 条件。
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 命令
- 在 shell 中启动 MySQL
- Linux:
mysql
-h localhost -u root MyDB - Windows:
"C:\Program Files (x86)\EasyPHP\binaries\mysql\bin\mysql.exe"
-h localhost -u root MyDB
- Linux:
- 或者在 PhpMyAdmin 中打开一个 SQL 窗口(例如:https://127.0.0.1/modules/phpmyadmin/#PMAURL-1:server_sql.php?server=1)。
select "hello world";
+-------------+
| hello world |
+-------------+
| hello world |
+-------------+
1 row in set (0.00 sec)