MySQL使用教程(二)
来源:互联网 发布:iphone软件无法验证 编辑:程序博客网 时间:2024/05/16 11:16
3.3. 创建并使用数据库
3.3.1.创建并选择数据库
3.3.2.创建表
3.3.3.将数据装入表中
3.3.4.从表检索信息
知道怎样输入命令,便可以访问数据库了。
假定在你的家(你的“动物园”)中有很多宠物,并且你想跟踪关于它们各种类型的信息。你可以通过创建表来保存你的数据并根据所需要的信息装载他们,然后你可以从表中检索数据来回答关于动物不同种类的问题。本节显示如何做到所有这些事情:
· 创建数据库
· 创建数据库表
· 装载数据到数据库表
· 以各种方法从表中检索数据
· 使用多个表
动物园数据库很简单(特意的),但是不难把它想象成可能用到类似数据库的真实世界情况。例如,农夫可以使用这样的一个数据库来追踪家畜,或者兽医可以用它跟踪病畜记录。从MySQL网址上可以获得后面章节中将用到的含有部分查询和样例数据的动物园分发。有tar压缩格式 (http://downloads.mysql.com/docs/menagerie-db.tar.gz)和Zip压缩格式 (http://downloads.mysql.com/docs/menagerie-db.zip)。
使用SHOW语句找出服务器上当前存在什么数据库:
mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql |
| test |
| tmp |
+----------+
可能你的机器上的数据库列表是不同的,但是很可能有mysql和test数据库。mysql是必需的,因为它描述用户访问权限,test数据库经常作为用户试身手的工作区。
请注意如果没有SHOWDATABASES权限,则不能看见所有数据库。参见13.5.1.3节,“GRANT和REVOKE语法”。
如果test数据库存在,尝试访问它:
mysql> USE test
Database changed
注意,USE,类似QUIT,不需要一个分号。(如果你喜欢,你可以用一个分号终止这样的语句;这无碍)USE语句在使用上也有另外一个特殊的地方:它必须在一个单行上给出。
你可列在后面的例子中使用test数据库(如果你能访问它),但是你在该数据库创建的任何东西可以被访问它的其它人删除,因此,你应该询问MySQL管理员许可你使用自己的一个数据库。假定你想要调用你的menagerie,管理员需要执行这样一条命令:
mysql> GRANT ALL ON menagerie.* TO'your_mysql_name'@'your_client_host';
这里your_mysql_name是分配给你的MySQL用户名,your_client_host是所连接的服务器所在的主机。
3.3.1. 创建并选择数据库
如果管理员在设置权限时为你创建了数据库,你可以开始使用它。否则,你需要自己创建数据库:
mysql> CREATE DATABASE menagerie;
在Unix下,数据库名称是区分大小写的(不像SQL关键字),因此你必须总是以menagerie访问数据库,而不能用Menagerie、MENAGERIE或其它一些变量。对表名也是这样的。(在Windows下,该限制不适用,尽管你必须在一个给定的查询中使用同样的大小写来引用数据库和表。但是,由于多种原因,作为最好的惯例,一定要使用与数据库创建时的同样的大小写。)
创建数据库并不表示选定并使用它,你必须明确地操作。为了使menagerie成为当前的数据库,使用这个命令:
mysql> USE menagerie
Database changed
数据库只需要创建一次,但是必须在每次启动mysql会话时在使用前先选择它。你可以根据上面的例子执行一个USE语句来实现。还可以在调用mysql时,通过命令行选择数据库,只需要在提供连接参数之后指定数据库名称。例如:
shell> mysql -h host -u user-p menagerie
Enter password:********
注意,刚才显示的命令行中的menagerie不是你的密码。如果你想要在命令行上在-p选项后提供密码,则不能插入空格(例如,如-pmypassword,不是-p mypassword)。但是,不建议在命令行输入密码,因为这样会暴露密码,能被在机器上登录的其它用户窥探到。
3.3.2. 创建表
创建数据库是很容易的部分,但是在这时它是空的,正如SHOWTABLES将告诉你的:
mysql> SHOW TABLES;
Empty set (0.00 sec)
较难的部分是决定你的数据库结构应该是什么:你需要什么数据库表,各数据库表中有什么样的列。
你将需要一个包含你每个宠物的记录的表。它可称为pet表,并且它应该包含,最少,每个动物的名字。因为名字本身不是很有趣,表应该包含另外的信息。例如,如果在你豢养宠物的家庭有超过一个人,你可能想要列出每个动物的主人。你可能也想要记录例如种类和性别的一些基本的描述信息。
年龄呢?那可能有趣,但是存储到一个数据库中不是一件好事情。年龄随着时间流逝而变化,这意味着你将要不断地更新你的记录。相反, 存储一个固定值例如生日比较好,那么,无论何时你需要年龄,可以以当前日期和出生日期之间的差来计算它。MySQL提供了日期运算函数,因此这并不困难。存储出生日期而非年龄还有其它优点:
· 你可以使用数据库完成这样的任务,例如生成即将到来的宠物生日的提示。(如果你认为这类查询有点蠢,注意,这与从商务数据库来识别出不久要发给生日祝贺的客户是同一个问题,因为计算机帮助私人联络。)
· 你可以相对于日期而不止是当前日期来计算年龄。例如,如果你在数据库存储死亡日期,你能很容易地计算出一只宠物死时有多大。
你可能想到pet表中其它有用的其它类型信息,但是到目前为止这些已经足够了:名字、主人、种类,性别、出生和死亡日期。
使用一个CREATE TABLE语句指定你的数据库表的布局:
mysql> CREATE TABLE pet (nameVARCHAR(20), owner VARCHAR(20),
-> speciesVARCHAR(20), sex CHAR(1), birth DATE, death DATE);
VARCHAR适合于name、owner和species列,因为列值是变长的。这些列的长度不必都相同,而且不必是20。你可以挑选从1到65535的任何长度,从中选择一个最合理的值。(如果选择得不合适,后来证明你需要一个更长的字段,MySQL提供一个ALTERTABLE语句。)
可以用多种类型的值来表示动物记录中的性别,例如,"m"和"f",或"male"和"female"。使用单字符"m"和"f"是最简单的方法。
很显然,birth和death列应选用DATE数据类。
创建了数据库表后,SHOW TABLES应该产生一些输出:
mysql> SHOW TABLES;
+---------------------+
| Tables in menagerie |
+---------------------+
|pet |
+---------------------+
为了验证你的表是按你期望的方式创建,使用一个DESCRIBE语句:
mysql> DESCRIBE pet;
+---------+-------------+------+-----+---------+-------+
| Field |Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name | varchar(20) |YES | | NULL | |
| owner | varchar(20) | YES | | NULL | |
| species | varchar(20) | YES | | NULL | |
| sex |char(1) | YES | |NULL | |
| birth |date | YES | | NULL | |
| death |date | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
你可以随时使用DESCRIBE,例如,如果你忘记表中的列的名称或类型时。
3.3.3. 将数据装入表中
创建表后,需要填入内容。通过LOAD DATA和INSERT语句可以完成该任务。
假定你的宠物纪录描述如下。(假定在MySQL中期望的日期格式是YYYY-MM-DD;这可能与你习惯的不同。)
name
owner
species
sex
birth
death
Fluffy
Harold
cat
f
1993-02-04
Claws
Gwen
cat
m
1994-03-17
Buffy
Harold
dog
f
1989-05-13
Fang
Benny
dog
m
1990-08-27
Bowser
Diane
dog
m
1979-08-31
1995-07-29
Chirpy
Gwen
bird
f
1998-09-11
Whistler
Gwen
bird
1997-12-09
Slim
Benny
snake
m
1996-04-29
因为你是从一个空表开始的,填充它的一个简易方法是创建一个文本文件,每个动物各一行,然后用一个语句将文件的内容装载到表中。
你可以创建一个文本文件“pet.txt”,每行包含一个记录,用定位符(tab)把值分开,并且以CREATETABLE语句中列出的列次序给出。对于丢失的值(例如未知的性别,或仍然活着的动物的死亡日期),你可以使用NULL值。为了在你的文本文件中表示这些内容,使用\N(反斜线,字母N)。例如,Whistler鸟的记录应为(这里值之间的空白是一个定位符):
name
owner
species
sex
birth
death
Whistler
Gwen
bird
\N
1997-12-09
\N
要想将文本文件“pet.txt”装载到pet表中,使用这个命令:
mysql> LOAD DATA LOCAL INFILE'/path/pet.txt' INTO TABLE pet;
请注意如果用Windows中的编辑器(使用\r\n做为行的结束符)创建文件,应使用:
mysql> LOAD DATA LOCAL INFILE'/path/pet.txt' INTO TABLE pet
-> LINES TERMINATEDBY '\r\n';
(在运行OS X的Apple机上,应使用行结束符'\r'。)
如果你愿意,你能明确地在LOAD DATA语句中指出列值的分隔符和行尾标记,但是默认标记是定位符和换行符。这对读入文件“pet.txt”的语句已经足够。
如果该语句失败,可能是你安装的MySQL不与使用默认值的本地文件兼容。关于如何更改请参见5.6.4节,“LOADDATA LOCAL安全问题”。
如果想要一次增加一个新记录,可以使用INSERT语句。最简单的形式是,提供每一列的值,其顺序与CREATETABLE语句中列的顺序相同。假定Diane把一只新仓鼠命名为Puffball,你可以使用下面的INSERT语句添加一条新记录:
mysql> INSERT INTO pet
-> VALUES('Puffball','Diane','hamster','f','1999-03-30',NULL);
注意,这里字符串和日期值均为引号扩起来的字符串。另外,可以直接用INSERT语句插入NULL代表不存在的值。不能使用LOAD DATA中所示的的\N。
从这个例子,你应该能看到涉及很多的键入用多个INSERT语句而非单个LOAD DATA语句装载你的初始记录。
- MySQL使用教程(二)
- CentOS--MySQL使用教程(二)
- MySQL系列教程(二)
- Junit使用教程(二)
- Junit使用教程(二)
- Junit使用教程(二)
- Sketch使用教程(二)
- Junit使用教程(二)
- SUMO使用教程(二)
- Junit使用教程(二)
- Junit使用教程(二)
- GDB 使用教程(二)
- Junit使用教程(二)
- Junit使用教程(二)
- Junit使用教程(二)
- RenderScript使用教程(二)
- jMetal使用教程(二)
- github使用教程(二)
- Linux内核目录结构
- 2016/9/6 每日总结
- zzuli 1922 (暴力)
- 我的Java笔记
- 快速配置Linux下SSH无密码登录
- MySQL使用教程(二)
- linux之tail 命令
- Hust oj 1632 最大的最小公倍数(简单数学)
- 从boot跳转到app运行的方法
- 关于JAVA中URL传递中文参数,取值是乱码的解决办法
- 分类目录的实现--popupwindow
- M文件编程小技巧
- 12 外部存储和内部存储
- linux之head命令