客户端操作1

为了连接服务器,当调用mysql时,通常需要提供一个MySQL用户名并且很可能需要一个 密码。
如果服务器运行在登录服务器之外的其它机器上,还需要指定主机名。
shell> mysql -h host -u user -p
Enter password: ********

成功地连接后,可以在mysql>提示下输入QUIT (或\q)随时退出:
mysql> QUIT

这是一个简单的命令,要求服务器告诉它的版本号和当前日期。
mysql> SELECT VERSION(), CURRENT_DATE;

这询问说明mysql的几个方面:
· 一个命令通常由SQL语句组成,随后跟着一个分号。(有一些例外不需要分号。早先提到的QUIT是一个例子。后面我们将看到其它的例子。)
· 当发出一个命令时,mysql将它发送给服务器并显示执行结果,然后显示另一个mysql>显示它准备好接受其它命令。
· mysql用表格(行和列)方式显示查询输出。第一行包含列的标签,随后的行是查询结果。通常,列标签是你取自数据库表的列的名字。如果你正在检索一个表达式而非表列的值(如刚才的例子),mysql用表达式本身标记列。
· mysql显示返回了多少行,以及查询花了多长时间,它给你提供服务器性能的一个大致概念。因为他们表示时钟时间(不是 CPU 或机器时间),并且因为他们受到诸如服务器负载和网络延时的影响,因此这些值是不精确的。

能够以大小写输入关键词。下列查询是等价的:

mysql> SELECT VERSION(), CURRENT_DATE;
mysql> select version(), current_date;
mysql> SeLeCt vErSiOn(), current_DATE;

至此显示的命令是相当短的单行语句。你可以在一行上输入多条语句,只需要以一个分号间隔开各语句
mysql> SELECT VERSION(); SELECT NOW();

不必全在一个行内给出一个命令,较长命令可以输入到多个行中。
mysql通过寻找终止分号而不是输入行的结束来决定语句在哪儿结束
(换句话说,mysql接受自由格式的输入:它收集输入行但直到看见分号才执行。)

这里是一个简单的多行语句的例子:

mysql> SELECT
-> USER()
-> ,
-> CURRENT_DATE;

如果你决定不想执行正在输入过程中的一个命令,输入\c取消它:
mysql> SELECT
-> USER()
-> \c
mysql>


提示符 含义
mysql> 准备好接受新命令。
-> 等待多行命令的下一行。
'> 等待下一行,等待以单引号(“'”)开始的字符串的结束。
"> 等待下一行,等待以双引号(“"”)开始的字符串的结束。
`> 等待下一行,等待以反斜点(‘`’)开始的识别符的结束。
/*> 等待下一行,等待以/*开始的注释的结束。

mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
'>
在这种情况下,你不能只是输入\c,因为mysql作为它正在收集的字符串的一部分来解释它!
相反,应输入关闭的引号字符(这样mysql知道你完成了字符串),然后输入\c:

mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
'> '\c
mysql>


使用SHOW语句找出服务器上当前存在什么数据库:
mysql> SHOW DATABASES;

可能你的机器上的数据库列表是不同的,但是很可能有mysql和test数据库。
mysql是必需的,因为它描述用户访问权限,test数据库经常作为用户试身手的工作区。

请注意如果没有SHOW DATABASES权限,则不能看见所有数据库。

如果test数据库存在,尝试访问它:
mysql> USE test

注意,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是所连接的服务器所在的主机。

创建数据库
mysql> CREATE DATABASE menagerie;

在Unix下,数据库名称是区分大小写的(不像SQL关键字),因此你必须总是以menagerie访问数据库,而不能用Menagerie、MENAGERIE或其它一些变量。对表名也是这样的。(在Windows下,该限制不适用,尽管你必须在一个给定的查询中使用同样的大小写来引用数据库和表。但是,由于多种原因,作为最好的惯例,一定要使用与数据库创建时的同样的大小写。)

创建数据库并不表示选定并使用它,你必须明确地操作。为了使menagerie成为当前的数据库,使用这个命令:
mysql> USE menagerie

数据库只需要创建一次,但是必须在每次启动mysql会话时在使用前先选择它
你可以根据上面的例子执行一个USE语句来实现。
还可以在调用mysql时,通过命令行选择数据库,只需要在提供连接参数之后指定数据库名称。

shell> mysql -h host -u user -p menagerie

注意,刚才显示的命令行中的menagerie不是你的 密码
如果你想要在命令行上在-p选项后提供 密码,则不能插入空格(例如,如-pmypassword,不是-p mypassword)。
但是,不建议在命令行输入密码,因为这样会暴露 密码,能被在机器上登录的其它用户窥探到。

创建数据库是很容易的部分,但是在这时它是空的,正如SHOW TABLES将告诉你的:
mysql> SHOW TABLES;

年龄呢?那可能有趣,但是存储到一个数据库中不是一件好事情。年龄随着时间流逝而变化,这意味着你将要不断地更新你的记录。相反, 存储一个固定值例如生日比较好,那么,无论何时你需要年龄,可以以当前日期和出生日期之间的差来计算它。MySQL提供了日期运算函数,因此这并不困难。存储出生日期而非年龄还有其它优点:

· 你可以使用数据库完成这样的任务,例如生成即将到来的宠物生日的提示。(如果你认为这类查询有点蠢,注意,这与从商务数据库来识别出不久要发给生日祝贺的客户是同一个问题,因为计算机帮助私人联络。)
· 你可以相对于日期而不止是当前日期来计算年龄。例如,如果你在数据库存储死亡日期,你能很容易地计算出一只宠物死时有多大。

你可能想到pet表中其它有用的其它类型信息,但是到目前为止这些已经足够了:名字、主人、种类,性别、出生和死亡日期。

使用一个CREATE TABLE语句指定你的数据库表的布局:

mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
-> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);

VARCHAR适合于name、owner和species列,因为列值是变长的。这些列的长度不必都相同,而且不必是20。你可以挑选从1到65535的任何长度,从中选择一个最合理的值。(如果选择得不合适,后来证明你需要一个更长的字段,MySQL提供一个ALTER TABLE语句。)

为了验证你的表是按你期望的方式创建,使用一个DESCRIBE语句:
mysql> DESCRIBE pet;

创建表后,需要填入内容。通过LOAD DATA和INSERT语句可以完成该任务。

你可以创建一个文本文件“pet.txt”,每行包含一个记录,用定位符(tab)把值分开,并且以CREATE TABLE语句中列出的列次序给出。对于丢失的值(例如未知的性别,或仍然活着的动物的死亡日期),你可以使用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;

如果想要一次增加一个新记录,可以使用INSERT语句。
mysql> INSERT INTO pet
-> VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);

注意,这里字符串和日期值均为引号扩起来的字符串。另外,可以直接用INSERT语句插入NULL代表不存在的值。不能使用LOAD DATA中所示的的\N。

从这个例子,你应该能看到涉及很多的键入用多个INSERT语句而非单个LOAD DATA语句装载你的初始记录。

posted @ 2013-05-17 20:20  1406425891  阅读(126)  评论(0编辑  收藏  举报