MySQL INTO OUTFILE覆盖现有文件?

Der*_*gan 51 php mysql sql into-outfile

我写了一个大的sql脚本来创建一个CSV文件.我想每晚打电话给cronjob来创建一个新的CSV文件,并在网站上提供.

比如说我将我的文件存储在'/home/sites/example.com/www/files/backup.csv'中

我的SQL是

SELECT * INTO OUTFILE '/home/sites/example.com/www/files/backup.csv'
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
  LINES TERMINATED BY '\n'
  FROM ( ....
Run Code Online (Sandbox Code Playgroud)

当文件已经存在时,MySQL给我一个错误

档案'/home/sites/example.com/www/files/backup.csv'已经存在

有没有办法让MySQL覆盖文件?

我可以让PHP检测文件是否存在并在再次创建之前将其删除但如果我可以直接在MySQL中执行它会更简洁.

bri*_*zil 55

不,没有办法覆盖它.来自文档:

file_name不能是现有文件,除其他外,它会阻止/ etc/passwd和数据库表等文件被销毁.

每晚使用不同的文件名可能是个更好的主意,因为拥有多个备份意味着您可以从已存在超过一天的问题中恢复.然后,您可以维护一个始终指向最新完整csv的符号链接.


Fla*_*tef 8

为什么不在rm -f /home/sites/example.com/www/files/backup.csv脚本中运行cron?

你可以从mysql里面运行它.只是逃避shell,\! 例如:

Mysql> \! rm -f /home/sites/example.com/www/files/backup.csv