Сначала необходимо удалить файл вне MySQL, в MySQL нет функции , которая может удалить или перезаписать файл.
Это мера безопасности, и вы должны быть благодарны за этот факт.
Обратите внимание, что может быть сложно выяснить, где именно MySQL хранит свои файлы.
Я обычно использую
LOAD DATA INFILE 'nonexistingfile' INTO validtable
Сгенерированная ошибка дает вам полный путь к текущей базе данных, в которую SELECT ... INTO OUTFILE
запишет.
Вы можете использовать различные способы удаления (или лучше переместить) файла, на ум приходит cron-job
.
Вы могли бы даже написать пользовательский UDF, который сделает удаление за вас, хотя это и есть риск для безопасности мэра, и программисты, которые делают это, заслуживают судьбы хуже, чем что-то ужасное.
Другой вариант - сделать
START TRANSACTION;
SELECT @today:= CURDATE();
INSERT INTO saved_mail_log (filename, whensaved, user_id)
VALUES (CONCAT(@today,'mailsave.csv'), @today, '1234');
SELECT mail FROM users WHERE user_id = '1234' INTO OUTFILE CONCAT(@today,'mailsave.csv');
COMMIT;
Я не уверен на 100%, что вы можете использовать функцию для создания параметра OUTFILE
, в противном случае вам придется выбрать это значение и вставить его в запрос с использованием динамического SQL.
Вы можете получить последний файл, используя:
SELECT * FROM saved_mail_log WHERE user_id = '1234' ORDER BY whensaved DESC LIMIT 1