MySQL数据库
完成条件
除了使用 mysqldump
(参见 MySQL/管理部分),您还可以导出/导入原始数据。
导出数据
数据可以通过 INTO OUTFILE
关键字导出:
SELECT * FROM destinataire INTO OUTFILE '/tmp/test' WHERE id IN (41, 141, 260, 317, 735, 888, 1207, 2211);
需要注意以下几点:
- 文件将由 MySQL 守护进程写入,而不是运行 MySQL 客户端的用户。
- 文件将存储在服务器上,而不是您的本地主机上。
- 服务器需要对指定路径有写入权限(通常,服务器无法写入您的主目录,例如
/home
目录)。因此在示例中,我们(不太安全地)将路径设置为/tmp
。
您也可以通过命令行导出数据:
mysql < query.txt > output.txt
其中 query.txt
包含一条 SQL 查询,输出将存储在 output.txt
中。
导入数据
在另一台数据库/计算机等中可以导入数据:
LOAD DATA INFILE '/tmp/test' INTO TABLE destinataire;
可选参数包括:
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
这些参数用于指定文档格式以及是否有表头。 如果数据文件中的列与数据库表的列不对应,可以映射列,甚至可以通过使用虚拟变量省略某些列:
LOAD DATA LOCAL INFILE
'/tmp/test'
INTO TABLE destinataire
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(
@dummy,
name,
phone_number,
@dummy,
@dummy,
@dummy,
@dummy,
@dummy,
@dummy,
@dummy
);
在这个例子中,我们只需要数据文件中的第二列和第三列,并将这些值存储在数据库表的 name
和 phone_number
列中。
内容细节
如果要导入一个 .sql
文件,该文件会创建用户及其数据库,需要注意以下问题:
- 确保该用户在服务器上尚未存在,因为 MySQL 没有
DROP USER IF EXISTS
语句。 - 数据库可以使用
DROP DATABASE IF EXISTS
语句。
例如:
DROP DATABASE IF EXISTS `base1`;
CREATE DATABASE `base1` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `base1`;
--DROP USER `user1`@'localhost';
CREATE USER 'user1'@'localhost' IDENTIFIED BY 'p@ssword1';
GRANT USAGE ON *.* TO 'user1'@'localhost' IDENTIFIED BY 'p@ssword1';
GRANT ALL PRIVILEGES ON `base1`.* TO 'user1'@'localhost';
注意: 如果该命令返回错误“DROP DATABASE 语句被 PhpMyAdmin 禁用”,需要通过修改 config.default.php
文件启用它:
$cfg['AllowUserDropDatabase'] = true;
之后清空浏览器缓存即可。
最后修改: 2025年01月17日 星期五 19:26