3.4. 获得数据库和表的信息
如果你忘记数据库或表的名字,或给定的表的结构是什么(例如,它的列叫什么),怎么办?MySQL通过提供数据库及其支持的表的信息的几个语句解决这个问题。
你已经见到了SHOW DATABASES,它列出由服务器管理的数据库。为了找出当前选择了哪个数据库,使用DATABASE()函数:
mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| menagerie |
+------------+
如果你还没选择任何数据库,结果是NULL。
为了找出当前的数据库包含什么表(例如,当你不能确定一个表的名字),使用这个命令:
mysql> SHOW TABLES;
+---------------------+
| Tables in menagerie |
+---------------------+
|event |
|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 | |
+---------+-------------+------+-----+---------+-------+
Field显示列名字,Type是列的数据类型,Null表示列是否能包含NULL值,Key显示列是否被索引而Default指定列的默认值。
如果表有索引,SHOW INDEX FROM tbl_name生成有关索引的信息。
3.5. 在批处理模式下使用mysql
在前面的章节中,你交互式地使用mysql输入查询并且查看结果。你也可以以批模式运行mysql。为了做到这些,把你想要运行的命令放在一个文件中,然后告诉mysql从文件读取它的输入:
shell> mysql < batch-file
如果在Windows下运行mysql,并且文件中有一些可以造成问题的特殊字符,可以这样操作:
C:\> mysql -e "source batch-file"
如果你需要在命令行上指定连接参数,命令应为:
shell> mysql -h host -u user-p < batch-file
Enter password: ********
当这样操作mysql时,则创建一个脚本文件,然后执行脚本。
如果你想在语句出现错误的时候仍想继续执行脚本,则应使用--force命令行选项。
为什么要使用一个脚本?有很多原因:
· 如果你需要重复运行查询(比如说,每天或每周),可以把它编成一个脚本,则每次执行时不必重新键入。
· 可以通过拷贝并编辑脚本文件从类似的现有的查询生成一个新查询。
· 当你正在开发查询时,批模式也是很有用的,特别对多行命令或多语句命令序列。如果你犯了一个错误,你不必重新输入所有内容,只需要编辑脚本来改正错误,然后告诉mysql再次执行脚本。
· 如果你有一个产生多个输出的查询,你可以通过一个分页器而不是盯着它翻屏到屏幕的顶端来运行输出:
·
shell> mysql < batch-file | more
· 你可以捕捉文件中的输出以便进行进一步的处理:
·
shell> mysql < batch-file > mysql.out
· 你可以将脚本分发给另外的人,以便他们也能运行命令。
· 某些情况不允许交互地使用,例如, 当你从一个cron任务中运行查询时。在这种情况下,你必须使用批模式。
当你以批模式运行mysql时,比起你交互地使用它时,其默认输出格式是不同的(更简明些)。例如,当交互式运行SELECTDISTINCT species FROM pet时,输出应为:
+---------+
| species |
+---------+
| bird |
| cat |
| dog |
| hamster |
| snake |
+---------+
但是当以批模式运行时,输出应为:
species
bird
cat
dog
hamster
snake
如果你想要在批模式中得到交互输出格式,使用mysql -t。为了回显以输出被执行的命令,使用mysql -vvv。
你还可以使用源代码或 \.命令从mysql提示符运行脚本:
mysql> source filename;
mysql> \. filename