MySQL使用简单教程(参考MySQL官方文档)
本文通过演示如何使用MySQL客户机程序创建和使用一个简单的数据库,允许连接到MySQL服务器、运行查询和查看结果。
mysql也可以在批处理模式下使用:预先将查询放在文件中,然后告诉mysql执行文件的内容。
要查看mysql提供的选项列表,请使用--help选项调用它:
1 shell> mysql --help
本文假设mysql已安装在您的计算机上,并且可以连接到mysql服务器
本文描述了建立和使用数据库的整个过程。如果您只对访问现有数据库感兴趣,可以跳过本文。
因为本文本质上是教程,所以许多细节都必须省略。有关此处所述主题的更多信息,请参阅MySQL官方手册的相关章节。
一、连接和断开与服务器的连接
要连接到服务器,通常需要在调用MySQL时提供MySQL用户名,很可能还有密码。如果服务器在您登录的计算机以外的计算机上运行,则还需要指定主机名。
1 shell> mysql -h host -u user -p 2 Enter password: ********
host和user表示运行MySQL服务器的主机名和MySQL帐户的用户名。如果可以,您应该看到一些介绍性信息,然后是mysql>提示:
1 shell> mysql -h host -u user -p 2 Enter password: ******** 3 Welcome to the MySQL monitor. Commands end with ; or \g. 4 Your MySQL connection id is 25338 to server version: 5.7.30-standard 5 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. 6 mysql>
如果在运行MySQL的同一台计算机上登录,则可以省略主机,只需使用以下命令:
1 shell> mysql -u user -p
I如果尝试登录时收到错误消息,如错误2002(HY000):无法通过套接字'/tmp/MySQL.sock'连接到本地MySQL服务器(2),这意味着MySQL服务器守护进程(Unix)或服务(Windows)没有运行。
有些MySQL安装允许用户作为匿名(未命名)用户连接到本地主机上运行的服务器。如果您的计算机上是这种情况,则应该可以通过调用mysql连接到该服务器,而无需任何选项:
1 shell> mysql
成功连接后,您可以随时在mysql>提示:
1 mysql> QUIT 2 Bye
在Unix上,也可以通过按Control+D断开连接。
二、输入查询
如之前所述,确保已连接到服务器。这样做本身不会选择任何要使用的数据库
本节介绍输入查询的基本原则,可以尝试使用几个查询来熟悉mysql的工作原理。
这里有一个简单的查询,要求服务器告诉您它的版本号和当前日期。在mysql>提示下,按如下所示键入并按Enter键:
1 mysql> SELECT VERSION(), CURRENT_DATE; 2 +--------------+--------------+ 3 | VERSION() | CURRENT_DATE | 4 +--------------+--------------+ 5 | 5.7.1-m4-log | 2012-12-25 | 6 +--------------+--------------+ 7 1 row in set (0.01 sec)
这个查询说明了mysql的几个方面:
•查询通常由SQL语句和分号组成。(在某些情况下,分号可以省略。前面提到的退出就是其中之一。我们稍后再讨论其他问题。
•当您发出一个查询时,mysql将其发送到服务器执行并显示结果,然后打印另一个mysql>提示符,以指示它已准备好进行另一个查询。
•mysql以表格形式(行和列)显示查询输出。第一行包含列的标签。下面的行是查询结果。通常,列标签是从数据库表中获取的列的名称。
如果要检索表达式的值而不是表列(如刚刚显示的示例所示),mysql将使用表达式本身标记列。
•mysql显示了返回的行数和执行查询所需的时间,这让您大致了解了服务器性能。这些值不精确,因为它们不是CPU或机器时间,并且它们受服务器负载和网络延迟等因素的影响。
关键字可以输入任何字母大小写。以下查询是等效的:
1 mysql> SELECT VERSION(), CURRENT_DATE; 2 mysql> select version(), current_date; 3 mysql> SeLeCt vErSiOn(), current_DATE;
一个查询不需要全部放在一行上,因此需要几行的冗长查询不是问题。mysql通过查找结束分号而不是输入行的结尾来确定语句的结束位置。
(换句话说,mysql接受自由格式输入:它收集输入行,但在看到分号之前不会执行它们。)
下面是一个简单的多行语句:
1 mysql> SELECT 2 -> USER() 3 -> , 4 -> CURRENT_DATE; 5 +---------------+--------------+ 6 | USER() | CURRENT_DATE | 7 +---------------+--------------+ 8 | jon@localhost | 2010-08-06 | 9 +---------------+--------------+
请注意在您输入多行查询的第一行后,提示如何从mysql>更改为->。这就是mysql表示它还没有看到完整的语句并在等待其他语句的方式。
提示是有必要的,因为它提供了有价值的反馈,你可以随时知道mysql在等待什么。
如果决定不执行正在输入的查询,请键入
1 \c: 2 mysql> SELECT 3 -> USER() 4 -> \c 5 mysql>
这里,也注意提示。在您键入\c之后,它会切换回mysql>,提供反馈以指示mysql已准备好进行新的查询。
提示 意义
mysql> 准备好进行新查询
-> 等待下一行多行查询
'> 等待下一行,等待以单引号(')开头的字符串完成
"> 等待下一行,等待以双引号(“)开头的字符串完成
`> 等待下一行,等待以倒勾(`)开头的标识符完成
/*> 等待下一行,等待以/*
三、创建和使用数据库
一旦知道如何输入SQL语句,就可以访问数据库了。
假设(你的动物园)有几只宠物,你想跟踪它们的各种信息。您可以通过创建表来保存数据并加载
他们有想要的信息。然后你可以通过从表格中检索数据来回答关于你的动物的各种问题。本节介绍如何执行以下操作:
• Create a database
• Create a table
• Load data into the table
• 以各种方式从表中检索数据
• 使用多个表
动物园数据库很简单(故意),但不难想象在现实世界中可能会使用类似类型的数据库。例如,这样的数据库可以被农民用来跟踪牲畜,也可以被兽医用来跟踪病人记录。
使用Stand语句查找服务器上当前存在的数据库:
1 mysql> SHOW DATABASES; 2 +----------+ 3 | Database | 4 +----------+ 5 | mysql | 6 | test | 7 | tmp | 8 +----------+
mysql数据库描述了用户访问权限。测试数据库通常可以作为用户尝试的工作区。
语句显示的数据库列表在您的计算机上可能不同;如果您没有“显示数据库”权限,则“显示数据库”不会显示您没有权限的数据库。
如果存在测试数据库,请尝试访问它:
1 mysql> USE test 2 Database changed
像QUIT一样,USE不需要分号。(如果您愿意,可以用分号来终止这些语句;使用说明在另一方面也很特别:必须在一行上给出。
您可以在下面的示例中使用测试数据库(如果您有权访问它),但是您在该数据库中创建的任何内容都可以被其他有权访问它的人删除。
1> 创建和选择数据库
如果管理员在设置权限时为您创建数据库,您可以开始使用它。否则,您需要自己创建它:
1 mysql> CREATE DATABASE menagerie;
在Unix下,数据库名称是区分大小写的(与SQL关键字不同),因此必须始终将数据库引用menagerie, not as Menagerie, MENAGERIE或其他变量。对于表名也是如此。
注意
如果出现错误,例如错误1044(42000):用户“micah”@“localhost”的访问被拒绝在尝试创建数据库时指向数据库“menagerie”,这意味着您的用户帐户没有创建数据库所需的权限。
创建数据库并没有选择要使用的数据库;你必须明确地做到这一点。要使menagerie成为当前数据库,请使用以下语句:
1 mysql> USE menagerie 2 Database changed
数据库只需要创建一次,但每次启动mysql会话时都必须选择使用它。您可以通过发出USE语句来完成此操作,
可以随时使用SELECT database()查看当前选择的数据库。
2> 创建表
创建数据库很简单,但此时它是空的,如SHOW TABLES所示:
1 mysql> SHOW TABLES; 2 Empty set (0.00 sec)
更难的是决定数据库的结构应该是什么:您需要什么表,每个表中应该有哪些列。
使用CREATE TABLE语句指定表的布局:
1 mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), 2 species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
VARCHAR对于name、owner和species列是一个不错的选择,因为列的值在长度上有所不同。这些列定义中的长度不必全部相同,也不必是20。你通常可以选择任何长度从1到65535,只要你觉得最合理的。
如果您做了一个错误的选择,后来发现您需要一个更长的字段,MySQL会提供一个ALTER TABLE语句。
要验证表是否按预期方式创建,请使用DESCRIBE语句:
1 mysql> DESCRIBE pet; 2 +---------+-------------+------+-----+---------+-------+ 3 | Field | Type | Null | Key | Default | Extra | 4 +---------+-------------+------+-----+---------+-------+ 5 | name | varchar(20) | YES | | NULL | | 6 | owner | varchar(20) | YES | | NULL | | 7 | species | varchar(20) | YES | | NULL | | 8 | sex | char(1) | YES | | NULL | | 9 | birth | date | YES | | NULL | | 10 | death | date | YES | | NULL | | 11 +---------+-------------+------+-----+---------+-------+
3> 将数据加载到表中
创建表后,需要填充它。LOAD DATA和INSERT语句对此很有用。
假设您的宠物记录可以如图所示进行描述。
1 name owner species sex birth death 2 Fluffy Harold cat f 1993-02-04 3 Claws Gwen cat m 1994-03-17 4 Buffy Harold dog f 1989-05-13 5 Fang Benny dog m 1990-08-27 6 Bowser Diane dog m 1979-08-31 1995-07-29 7 Chirpy Gwen bird f 1998-09-11 8 Whistler Gwen bird 1997-12-09 9 Slim Benny snake m 1996-04-29
因为您是从一个空表开始的,填充它的一个简单方法是为每个动物创建一个包含一行的文本文件,然后用一个语句将文件的内容加载到表中。
您可以创建一个文本文件pet.txt,其中每行包含一条记录,值由制表符分隔,并按照create TABLE语句中列的顺序给定。对于丢失的值(例如未知性别或仍在生存的动物的死亡日期),可以使用空值。
要在文本文件中表示这些内容,请使用\N(反斜杠,大写N)。例如,Whistler the bird的记录如下所示(其中值之间的空白是单个制表符):
Whistler Gwen bird \N 1997-12-09 \N
要将文本文件pet.txt加载到pet表中,请使用以下语句:
1 mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;
当您想一次添加一条新记录时,INSERT语句非常有用。在最简单的形式中,按照列在CREATE表中列出的顺序为每一列提供值
1 mysql> INSERT INTO pet 2 VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);
4> 从表中检索信息
SELECT语句用于从表中提取信息。声明的一般形式是:
1 SELECT what_to_select 2 FROM which_table 3 WHERE conditions_to_satisfy;
SELECT的最简单形式是从表中检索所有内容:
1 mysql> SELECT * FROM pet; 2 +----------+--------+---------+------+------------+------------+ 3 | name | owner | species | sex | birth | death | 4 +----------+--------+---------+------+------------+------------+ 5 | Fluffy | Harold | cat | f | 1993-02-04 | NULL | 6 | Claws | Gwen | cat | m | 1994-03-17 | NULL | 7 | Buffy | Harold | dog | f | 1989-05-13 | NULL | 8 | Fang | Benny | dog | m | 1990-08-27 | NULL | 9 | Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 | 10 | Chirpy | Gwen | bird | f | 1998-09-11 | NULL | 11 | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL | 12 | Slim | Benny | snake | m | 1996-04-29 | NULL | 13 | Puffball | Diane | hamster| f | 1999-03-30 | NULL | 14 +----------+--------+---------+------+------------+------------+
•选择特定行
•选择特定列
•排序行
•日期计算
•使用空值
•模式匹配
•计算行数
以上不做详细介绍,请参考MySQL官方文档