1.0 使用SHOW语句找出服务器上当前存在什么数据库:
mysql> SHOW DATABASES;
每台机器上的数据库列表是不同的,但是很可能有mysql和test数据库。mysql是必需的,因为它描述用户访问权限,test数据库经常作为用户试身手的工作区。
可见我的数据库里面没有test。
2.0 没有就自己创建:
现在假设一个场景,假定在一个小动物园中有很多宠物,现在想跟踪关于它们各种类型的信息。我们通过创建表来保存数据并根据所需要的信息装载他们,然后可以从表中检索数据来回答关于动物不同种类的问题。
在Unix下,数据库名称是区分大小写的(不像SQL关键字),因此你必须总是以menagerie访问数据库,而不能用Menagerie、MENAGERIE或其它一些变量。
对表名也是这样的。(在Windows下,该限制不适用,尽管你必须在一个给定的查询中使用同样的大小写来引用数据库和表。但是,由于多种原因,作为最好的惯例,一定要使用与数据库创建时的同样的大小写。)
mysql> CREATE DATABASE menagerie;
3.0 menagerie(小动物园)数据库我们可以访问它:
mysql>USE menagerie
USE,类似QUIT,不需要一个分号。(如果你喜欢,你可以用一个分号终止这样的语句;这无碍)USE语句在使用上也有另外一个特殊的地方:它必须在一个单行上给出。
数据库只需要创建一次,但是必须在每次启动mysql会话时在使用前先选择它。你可以根据上面的例子执行一个USE语句来实现。还可以在调用mysql时,通过命令行选择数据库,只需要在提供连接参数之后指定数据库名称。例如:
shell> mysql -h host -u user -p menagerie
Enter password: ********
注意,刚才显示的命令行中的menagerie不是你的 密码。如果你想要在命令行上在-p选项后提供 密码,则不能插入空格(例如,如-pmypassword,不是-p mypassword)。但是,不建议在命令行输入密码,因为这样会暴露 密码,能被在机器上登录的其它用户窥探到。
4.0 在该数据库创建的任何东西可以被访问它的其它人删除,因此,你应该询问MySQL管理员许可你使用自己的一个数据库。假定你想要调用你的menagerie,管理员需要执行这样一条命令:
mysql> GRANT ALL ON menagerie.* TO 'your_mysql_name'@'your_client_host';
这里your_mysql_name是分配给你的MySQL用户名,your_client_host是所连接的服务器所在的主机。
5.0 创建数据库是很容易的部分,但是在这时它是空的,正如SHOW TABLES将告诉你的:
mysql> SHOW TABLES;
6.0 较难的部分是决定你的数据库结构应该是什么:你需要什么数据库表,各数据库表中有什么样的列。
根据假设,我现在包含每个宠物记录的表,命名为pet表。它可能存在某些信息:
名字 动物的主人 种类 性别 年龄
其中,年龄比较特殊,年龄随着时间流逝而变化,这意味着你将要不断地更新你的记录。单独存储一个年龄某个数据很显然不是很好的解决方案,相反, 存储一个固定值例如生日比较好,那么,无论何时你需要年龄,可以以当前日期和出生日期之间的差来计算它。MySQL提供了日期运算函数,因此这并不困难。存储出生日期而非年龄还有其它优点:
- 你可以使用数据库完成这样的任务,例如生成即将到来的宠物生日的提示。
- 你可以相对于日期而不止是当前日期来计算年龄。例如,如果你在数据库存储死亡日期,你能很容易地计算出一只宠物死时有多大。
那么我们的数据库pet表内元素优化为:
名字 动物的主人 种类 性别 出生和死亡日期
7.0 使用一个CREATE TABLE语句指定你的数据库表的布局:
mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
-> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
可以随时使用DESCRIBE,例如,如果忘记表中的列的名称或类型时。
8.0 创建表后,需要填入内容。通过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 |
9.0 填充这么多数据一行行输入时很笨的方法。因为是从一个空表开始的,填充它的一个简易方法是创建一个文本文件,每个动物各一行,然后用一个语句将文件的内容装载到表中。
创建一个文本文件“pet.txt”,每行包含一个记录,用定位符(tab)把值分开,并且以CREATE TABLE语句中列出的列次序给出。对于丢失的值(例如未知的性别,或仍然活着的动物的死亡日期),你可以使用NULL值。为了在你的文本文件中表示这些内容,使用N(反斜线,字母N)。例如,Whistler鸟的记录应为(这里值之间的空白是一个定位符):
要想将文本文件“pet.txt”装载到pet表中,使用这个命令:
mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;
请注意如果用Windows中的编辑器(使用 做为行的结束符)创建文件,应使用:(在运行OS X的Apple机上,应使用行结束符' '。)
mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet
-> LINES TERMINATED BY ' ';
(在运行OS X的Apple机上,应使用行结束符' '。)
pet.txt文件,放在G盘下面)(里面的空格都是按Tab键,不是一个或很多空格键造成的)。
第一次执行命令时,报出这样的错误:
原因是txt文件保存时默认ANSI格式,我们需要改成和mysql要求的格式utf-8一样的:
显示成功导入,并罗列出列表,在pet.txt文档中"null"也可以改成“ ”,从代码中可知,在mysql语句中,地址路径的写法同linux,windows系统的是"G:pet.txt",而linux/mysql用的是“G:/pet.txt”,不能用错。
10.0 如果想要一次增加一个新记录,可以使用INSERT语句。假定张发财把一只新仓鼠命名为Puffball,你可以使用下面的INSERT语句添加一条新记录:
mysql> INSERT INTO pet
-> VALUES ('Puffball','张发财','hamster','f','1999-03-30',NULL);
可见,可以直接用INSERT语句插入“NULL”代表不存在的值。不能使用LOAD DATA中所示的的”N”。
END