mysql基础参考(仅供自己参考)
因为需要摘录一些mysql的文档,以做备忘。
所有资料来自 http://www.mysql.com
目录: 1 获得数据库和表的信息 2在批处理模式下使用mysql(为什么要使用一个脚本?)
3创建并选择数据库
4 表基本操作
5 访问服务器的客户程序(如何调用MySQL程序? 如何在命令行上使用选项?) 5.1 mysqldump:数据库备份程序
6 mysql的权限(授权的两种方式?从MySQL删除用户账户?) 6.1 所有权限的名称:
|
1 获得数据库和表的信息
如果你忘记数据库或表的名字,或给定的表的结构是什么(例如,它的列叫什么),怎么办?MySQL通过提供数据库及其支持的表的信息的几个语句解决这个问题。
mysql> SELECT DATABASE;
mysql> SHOW TABLES;
mysql> DESCRIBE ONETABLENAME;
2 在批处理模式下使用mysql
shell> mysql -h host -u user -p < batch-file
你还可以使用源代码或 /.命令从mysql提示符运行脚本:
mysql> source filename;
mysql> /. filename
为什么要使用一个脚本?有很多原因: · 如果你需要重复运行查询(比如说,每天或每周),可以把它编成一个脚本,则每次执行时不必重新键入。 · 可以通过拷贝并编辑脚本文件从类似的现有的查询生成一个新查询。 · 当你正在开发查询时,批模式也是很有用的,特别对多行命令或多语句命令序列。如果你犯了一个错误,你不必重新输入所有内容,只需要编辑脚本来改正错误,然后告诉mysql再次执行脚本。 · 如果你有一个产生多个输出的查询,你可以通过一个分页器而不是盯着它翻屏到屏幕的顶端来运行输出: · shell> mysql < batch-file | more
· 你可以捕捉文件中的输出以便进行进一步的处理: · shell> mysql < batch-file > mysql.out
· 你可以将脚本分发给另外的人,以便他们也能运行命令。 · 某些情况不允许交互地使用,例如, 当你从一个cron任务中运行查询时。在这种情况下,你必须使用批模式。 |
3 创建并选择数据库:
mysql> CREATE DATABASE menagerie;
mysql> USE menagerie
数据库只需要创建一次,但是必须在每次启动mysql会话时在使用前先选择它。你可以根据上面的例子执行一个USE语句来实现。还可以在调用mysql时,通过命令行选择数据库,只需要在提供连接参数之后指定数据库名称。例如:
shell> mysql -h host -u user -p menagerie
4 表基本操作:
mysql> SHOW TABLES;
mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
-> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
mysql> DESCRIBE pet;
mysql> insert into MYTABLE values ("hyq","M");
mysql> LOAD DATA LOCAL INFILE "D:/mysql.txt" INTO TABLE MYTABLE;
mysql> drop TABLE MYTABLE;
mysql> delete from MYTABLE;
mysql>update MYTABLE set sex="f" where name='hyq';
5 访问服务器的客户程序:
mysql是一个命令行客户程序,用于交互式或以批处理模式执行SQL语句。
mysqladmin是用于管理功能的客户程序。
mysqlcheck执行表维护操作。
mysqldump和mysqlhotcopy负责数据库备份。
mysqlimport导入数据文件。
mysqlshow显示信息数据库和表的相关信息。
如何调用MySQL程序? 要想从命令行调用MySQL程序(即从shell或命令提示),应输入程序名,并随后输入指导操作发的选项或其它参量。下面的命令显示了一些程序调用的例子。“shell>”表示命令解释符提示;并不是输入的部分。你所看见的具体提示取决于命令解释符。典型提示符:sh或bash为$,csh或tcsh为%,Windows command.com或cmd.exe为C:/>。 shell> mysql test shell> mysqladmin extended-status variables shell> mysqlshow --help shell> mysqldump --user=root personnel 以破折号开始的参数为选项参量。它们通常指定程序与服务器的连接类型或影响其操作模式。关于选项语法的描述参见4.3节,“指定程序选项”。 非选项参数(不以破折号开始的参量)可以为程序提供更详细的信息。例如,mysql程序将第一个非选项参量解释为数据库名,因此命令 mysql test表示你想要使用test数据库。 后面的章节描述了具体的程序,表示程序可以理解的选项,并描述了其它非选项参量的含义。 部分选项对部分程序是通用的。最常用的是指定连接参数的--host、--user和--password选项。它们指示MySQL服务器运行的主机和MySQL账户的用户名和 密码。所有MySQL客户程序可以理解这些选项;它们允许你指定连接哪个服务器,以及在该服务器上使用的 账户。 你也许会发现需要使用MySQL程序安装的bin目录的路径名来调用MySQL程序。如果你试图不在bin目录下运行MySQL程序,可能会遇到“程序未找到”错误。为了更方便地使用MySQL,可以将bin目录的路径名添加到PATH环境变量中。然后运行程序时只需要输入程序名,而不需要输入整个路径名。 关于设置PATH的指令的命令解释符请查阅相关文档。设置环境变量的语法与解释符有关 可以用几种方式提供MySQL程序的选项: · 在命令行中在程序名后面提供。这对于具体程序调用时使用的选项很普遍。 · 在程序启动时读取的选项文件中设置。这对于每次程序运行时使用的选项很普遍。 · 在环境变量中设置。这对每次程序运行时所使用的选项很有用,尽管实际上最常用选项文件。(5.12.2节,“在Unix中运行多个服务器”中讨论了环境变量会很有帮助的一种情况。描述了使用这些变量来指定服务器和客户程序的TCP/IP端口号和Unix套接字文件的各种技术)。 MySQL程序首先检查环境变量,然后检查选项文件,然后检查命令行来确定给出了哪些选项。如果多次指定一个选项,最后出现的选项占先。这说明环境变量具有最低的优先级,命令行选项具有最高优先级。 可以在选项文件中指定程序选项的默认值来让MySQL程序处理各选项。不需要在每次运行程序时输入选项,但可以根据需要通过命令行选项来覆盖默认值。 在命令行中指定的程序选项遵从下述规则: · 在命令名后面紧跟选项。 · 选项参量以一个和两个破折号开始,取决于它具有短名还是长名。许多选项有两种形式。例如,-?和--help是指导MySQL程序显示帮助消息的选项的短名和长名。 · 选项名对大小写敏感。-v和-V均有效,但具有不同的含义。(它们是--verbose和--version选项的短名)。 · 部分选项在选项名后面紧随选项值。例如,-h localhost或--host=localhost表示客户程序的MySQL服务器主机。选项值可以告诉程序MySQL服务器运行的主机名。 · 对于带选项值的长选项,通过一个‘=’将选项名和值隔离开来。对于带选项值的短选项,选项值可以紧随选项字母后面,或者二者之间可以用一个空格隔开。(-hlocalhost和-h localhost是等效的)。该规则的例外情况是指定MySQL密码的选项。该选项的形式可以为--password=pass_val或--password。在后一种情况(未给出 密码值),程序将提示输入密码。也可以给出密码选项,短形式为-ppass_val或-p。然而,对于短形式,如果给出了 密码值,必须紧跟在选项后面,中间不能插入空格。这样要求的原因是如果选项后面有空格,程序没有办法来告知后面的参量是 密码值还是其它某种参量。因此,下面两个命令的含义完全不同: · shell> mysql -ptest · shell> mysql -p test 第一个命令让mysql使用密码test,但没有指定默认数据库。第二个命令让mysql提示输入 密码并使用test作为默认数据库。 部分选项控制可以开关的行为。例如,mysql客户端支持--column-names选项,确定是否在查询结果开头显示一行栏目名。默认情况,该选项被启用。但是可能在某些情况下你想要禁用它,例如将mysql的输出发送到另一个只希望看到数据而不希望看到开始的标题行的程序中。 要想禁用列名,可以使用下面的形式来指定选项: --disable-column-names --skip-column-names --column-names=0 --disable和--skip前缀与=0后缀的效果相同:它们均关闭选项。 可以用下述方法“启用”选项: --column-names --enable-column-names --column-names=1 如果选项有前缀--loose,如果程序未识别出选项不会提示错误退出,但是会发出一条警告: shell> mysql --loose-no-such-option mysql: WARNING: unknown option '--no-such-option' 当你从安装了多个MySQL的同一台机器上运行程序时,--loose前缀会很有用。当你在一个选项文件中列出选项时,该前缀会特别有用。有可能不能被程序的所有版本识别的选项可以冠以--loose前缀(或在选项文件中用loose)。不能识别选项的程序版本将会发出一条警告并忽视该选项。 对mysql偶尔有用的另一个选项是-e或--execute选项,可用来将SQL语句传递给服务器。该语句必须用引号引起来(单引号或双引号)。(然而,如果想要在查询中将值引起来,则对于查询应使用双引号,查询中引用的值应使用单引号)。当使用该选项时,语句被执行,然后mysql立即退出命令外壳。 |
5.1 mysqldump:数据库备份程序
mysqldump客户端可用来转储数据库或搜集数据库进行备份或将数据转移到另一个SQL服务器(不一定是一个MySQL服务器)。转储包含创建表和/或装载表的SQL语句。
如果你在服务器上进行备份,并且表均为MyISAM表,应考虑使用mysqlhotcopy,因为可以更快地进行备份和恢复。参见8.9节,“mysqlhotcopy:数据库备份程序”。
有3种方式来调用mysqldump:
shell> mysqldump [options] db_name [tables]
shell> mysqldump [options] ---database DB1 [DB2 DB3...]
shell> mysqldump [options] --all--database
如果没有指定任何表或使用了---database或--all--database选项,则转储整个数据库。
要想获得你的版本的mysqldump支持的选项,执行mysqldump ---help。
如果运行mysqldump没有--quick或--opt选项,mysqldump在转储结果前将整个结果集装入内存。如果转储大数据库可能会出现问题。该选项默认启用,但可以用--skip-opt禁用。
如果使用最新版本的mysqldump程序生成一个转储重装到很旧版本的MySQL服务器中,不应使用--opt或-e选项。
mysqldump几个重要的参数? · ---database,-B 转储几个数据库。通常情况,mysqldump将命令行中的第1个名字参量看作数据库名,后面的名看作表名。使用该选项,它将所有名字参量看作数据库名。CREATE DATABASE IF NOT EXISTS db_name和USE db_name语句包含在每个新数据库前的输出中。 · --no-data,-d 不写表的任何行信息。如果你只想转储表的结构这很有用。 · --opt 该选项是速记;等同于指定 --add-drop-tables--add-locking --create-option --disable-keys--extended-insert --lock-tables --quick --set-charset。它可以给出很快的转储操作并产生一个可以很快装入MySQL服务器的转储文件。该选项默认开启,但可以用--skip-opt禁用。要想只禁用确信用-opt启用的选项,使用--skip形式;例如,--skip-add-drop-tables或--skip-quick。 · --quick,-q 该选项用于转储大的表。它强制mysqldump从服务器一次一行地检索表中的行而不是检索所有行并在输出前将它缓存到内存中。 · --verbose,-v 冗长模式。打印出程序操作的详细信息。
mysqldump最常用于备份一个整个的数据库: shell> mysqldump --opt db_name > backup-file.sql 你可以这样将转储文件读回到服务器: shell> mysql db_name < backup-file.sql 或者为: shell> mysql -e "source /path-to--backup/backup-file.sql" db_name mysqldump也可用于从一个MySQL服务器向另一个服务器复制数据时装载数据库: shell> mysqldump --opt db_name | mysql --host=remote_host -C db_name 可以用一个命令转储几个数据库: shell> mysqldump ---database db_name1 [db_name2 ...] > my_databases.sql 如果你想要转储所有数据库,使用--all--database选项: shell> mysqldump --all-databases > all_databases.sql
|
6 mysql权限:
MySQL权限系统的主要功能是证实连接到一台给定主机的用户,并且赋予该用户在数据库上的SELECT、INSERT、UPDATE和DELETE权限。
附加的功能包括有匿名的用户并对于MySQL特定的功能例如LOAD DATA INFILE进行授权及管理操作的能力。
授权的两种方式? 如果你为root账户指定了密码,还需要为该MySQL命令和本节中的其它命令提供--password或-p选项。 以root连接到服务器上后,可以添加新账户。下面的语句使用GRANT来设置四个新账户: mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' -> IDENTIFIED BY 'some_pass' WITH GRANT OPTION; mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' -> IDENTIFIED BY 'some_pass' WITH GRANT OPTION; mysql> GRANT RELOAD, PROCESS ON *.* TO 'admin'@'localhost'; mysql> GRANT USAGE ON *.* TO 'dummy'@'localhost'; 用GRANT语句创建的账户有下面的属性: · 其中两个账户有相同的用户名monty和密码some_pass。两个账户均为超级用户账户,具有完全的权限可以做任何事情。一个账户 ('monty'@'localhost')只用于从本机连接时。另一个账户('monty'@'%')可用于从其它主机连接。请注意monty的两个账户必须能从任何主机以monty连接。没有localhost账户,当monty从本机连接时,mysql_install_db创建的localhost的匿名用户账户将占先。结果是,monty将被视为匿名用户。原因是匿名用户账户的Host列值比'monty'@'%'账户更具体,这样在user表排序顺序中排在前面。(user表排序的讨论参见5.7.5节,“访问控制, 阶段1:连接核实”)。 · 一个账户有用户名admin,没有密码。该账户只用于从本机连接。授予了RELOAD和PROCESS管理权限。这些权限允许admin用户执行mysqladmin reload、mysqladmin refresh和mysqladmin flush-xxx命令,以及mysqladmin processlist。未授予访问数据库的权限。你可以通过GRANT语句添加此类权限。 · 一个账户有用户名dummy,没有密码。该账户只用于从本机连接。未授予权限。通过GRANT语句中的USAGE权限,你可以创建账户而不授予任何权限。它可以将所有全局权限设为'N'。假定你将在以后将具体权限授予该账户。
除了GRANT,你可以直接用INSERT语句创建相同的账户,然后使用FLUSH PRIVILEGES告诉服务器重载授权表: shell> mysql --user=root mysql mysql> INSERT INTO user -> VALUES('localhost','monty',PASSWORD('some_pass'), -> 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); mysql> INSERT INTO user -> VALUES('%','monty',PASSWORD('some_pass'), -> 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); mysql> INSERT INTO user SET Host='localhost',User='admin', -> Reload_priv='Y', Process_priv='Y'; mysql> INSERT INTO user (Host,User,Password) -> VALUES('localhost','dummy',''); mysql> FLUSH PRIVILEGES; 当你用INSERT创建账户时使用FLUSH PRIVILEGES的原因是告诉服务器重读授权表。否则,只有重启服务器后更改方会被注意到。使用 GRANT,则不需要使用FLUSH PRIVILEGES。 用INSERT使用PASSWORD()函数是为了加密密码。GRANT语句为你加密密码,因此不需要PASSWORD()。 'Y'值启用账户权限。对于admin账户,还可以使用更加可读的INSERT扩充的语法(使用SET)。
|
从MySQL删除用户账户? 要想移除账户,应使用DROP USER语句,请参见13.5.1.2节,“DROP USER语法”。
|
6.1 所有权限的名称:
GRANT和REVOKE语句所用的涉及权限的名称显示在下表,还有在授权表中每个权限的表列名称和每个权限有关的上下文。关于每个权限的含义相关的详细信息参见13.5.1.3节,“GRANT和REVOKE语法”。
权限 | 列 | 上下文 |
CREATE | Create_priv | 数据库、表或索引 |
DROP | Drop_priv | 数据库或表 |
GRANT OPTION | Grant_priv | 数据库、表或保存的程序 |
REFERENCES | References_priv | 数据库或表 |
ALTER | Alter_priv | 表 |
DELETE | Delete_priv | 表 |
INDEX | Index_priv | 表 |
INSERT | Insert_priv | 表 |
SELECT | Select_priv | 表 |
UPDATE | Update_priv | 表 |
CREATE VIEW | Create_view_priv | 视图 |
SHOW VIEW | Show_view_priv | 视图 |
ALTER ROUTINE | Alter_routine_priv | 保存的程序 |
CREATE ROUTINE | Create_routine_priv | 保存的程序 |
EXECUTE | Execute_priv | 保存的程序 |
FILE | File_priv | 服务器主机上的文件访问 |
CREATE TEMPORARY TABLES | Create_tmp_table_priv | 服务器管理 |
LOCK TABLES | Lock_tables_priv | 服务器管理 |
CREATE USER | Create_user_priv | 服务器管理 |
PROCESS | Process_priv | 服务器管理 |
RELOAD | Reload_priv | 服务器管理 |
REPLICATION CLIENT | Repl_client_priv | 服务器管理 |
REPLICATION SLAVE | Repl_slave_priv | 服务器管理 |
SHOW DATABASES | Show_db_priv | 服务器管理 |
SHUTDOWN | Shutdown_priv | 服务器管理 |
SUPER | Super_priv | 服务器管理 |