0

所以我试图重新访问我的服务器数据库并让它运行命令将几个表全部导出到单个 csv 文件。所以我有一个命令行命令参数,如下所示:

mysql -h 198.xxx.xxx.xxx -u user-p < file.txt

file.txt 的内容如下所示:

SELECT * FROM log
INTO OUTFILE 'C:\USERS\username\Desktop\log.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'


SELECT * FROM permission_types
INTO OUTFILE 'C:\USERS\username\Desktop\permission_types.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'


SELECT * FROM personal_info_options
INTO OUTFILE 'C:\USERS\username\Desktop\personal_info_options.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'

我不确定我是否有这个权利的语法,或者如果这可能的话,我一直在做一堆研究试图获得例子。人们通常会告诉你概念,但似乎从来没有给你测试它们所需的代码,它总是像这样:

mysql -h localhost -u user-p < somefile and they don't show you contents 
of a file for example

我正在运行 Windows 7,我安装了 WAMPServer,它具有 MYSQL 版本 5.5.24,我可以通过命令行访问它。我不确定 FILEDS TERMINATED BY 或 ENCLOSED BY 或 LINES TERMINATED BY ... 我需要这些吗?这实际上会保存到我的本地机器吗?我对运行这个脚本很紧张,我不想犯错误并弄乱数据库。.txt 也可以用于脚本文件吗?

你能提供的任何帮助都会很棒。

4

1 回答 1

0
  1. 我不确定我是否有这个权利的语法,或者如果这可能的话,我一直在做一堆研究试图获得例子。

    您的语法是正确的,只是每个SELECT语句都应以分号结尾。请注意,您还需要指定您的表所在的数据库——最简单的做法是将其作为 的参数mysql

    mysql -h 198.xxx.xxx.xxx -u 用户-p mydb < file.txt

  2. 我不确定 FILEDS TERMINATED BY 或 ENCLOSED BY 或 LINES TERMINATED BY ... 我需要这些吗?

    SELECT ... INTO语法中所述:

    这是一个生成许多程序使用的逗号分隔值 (CSV) 格式的文件的示例:

    选择 a、b、a+b 到 OUTFILE '/tmp/result.txt'
      以 ',' 结尾的字段可选地由 '"' 包围
      以“\n”结尾的行
      从测试表;

    LOAD DATA语法下所述:

    如果您指定 no FIELDSorLINES子句,则默认值与您编写以下内容相同:

    由 '\t' 终止的字段由 '' 封闭由 '\\' 转义
    由 '\n' 终止的行由 '' 开始

    它继续解释:

    相反,SELECT ... INTO OUTFILE在写入输出时,默认值会导致如下操作:

    • 在字段之间写入标签。

    • 不要将字段括在任何引用字符中。

    • 使用“<code>\”转义出现在字段值中的制表符、换行符或“<code>\”实例。

    • 在行尾写下换行符。

    请注意,因为LINES TERMINATED BY '\n'是默认值,您可以省略该子句;但这些FIELDS子句对于 CSV 输出是必需的。

  3. 这实际上会保存到我的本地机器吗?

    不。如SELECT ... INTO语法中所述:

    的形式将选定的行写入文件。该文件是在服务器主机上创建的,因此您必须有权使用此语法。不能是现有文件,除其他外,这可以防止诸如和数据库表之类的文件被破坏。系统变量控制文件名的解释。SELECT ... INTO OUTFILE 'file_name'SELECTFILEfile_name/etc/passwdcharacter_set_filesystem

    SELECT ... INTO OUTFILE语句的主要目的是让您非常快速地将表转储到服务器计算机上的文本文件中。如果要在服务器主机以外的其他主机上创建生成的文件,通常不能使用SELECT ... INTO OUTFILE,因为无法写入相对于服务器主机文件系统的文件路径。

    但是,如果 MySQL 客户端软件安装在远程机器上,您可以改为使用客户端命令,例如在客户端主机上生成文件。mysql -e "SELECT ..." > file_name

    如果可以使用服务器文件系统上的网络映射路径访问远程主机上的文件位置,则也可以在服务器主机以外的不同主机上创建结果文件。mysql在这种情况下,目标主机上不需要存在(或某些其他 MySQL 客户端程序)。

  4. 我对运行这个脚本很紧张,我不想犯错误并弄乱数据库。

    SELECT语句只从数据库中读取数据,不会对其内容进行任何更改:因此它们不能“搞乱数据库”。

  5. .txt 也可以用于脚本文件吗?

    任何扩展都可以工作:MySQL 客户端和服务器软件都看不到它(您的操作系统读取文件并将其内容发送到客户端程序,客户端程序又将该内容发送到服务器;操作系统与此处的文件扩展名矛盾)。

    在 Windows 上,.txt扩展程序会将文件与文本编辑器(例如记事本)相关联,以便可以轻松打开它进行编辑。我个人更喜欢.sql它更准确地描述文件的内容,然后我会将该扩展名与合适的编辑器相关联——但这些都不是必需的。

于 2012-09-02T09:50:34.287 回答