一網友問在MySQL中如何只用SQL語句導出帶日期格式的文件。覺得有點意思,於是嘗試了一下。導出文件使用SELECT INTO OUTFILE 但是OUTFILE後面的值不能使用變量,所以只能使用動態SQL語句來實現。其中表user為測試表。具體語句如下所示
mysql> SET @SqlScript= CONCAT("SELECT * INTO OUTFILE '/tmp/sql_out_", DATE_FORMAT(NOW(), '%Y%m%d%H%i%s'), ".txt' FROM `user`;");
Query OK, 0 rows affected (0.01 sec)
mysql> PREPARE Sql_Text FROM @SqlScript;
Query OK, 0 rows affected (0.00 sec)
Statement prepared
mysql> EXECUTE Sql_Text;
Query OK, 33 rows affected (0.00 sec)
mysql>
關於SELECT INTO OUTFILE時有幾個需要注意的,必須確保當前賬號具有對應目錄的寫權限。否則就會出現權限問題" Can't create/write to file 'xxxxx' (Errcode: 13 - Permission denied)"
另外關於MySQL prepare語句的SQL語法和知識點:
PREPARE statement_name FROM preparable_sql_statement; /*定義*/
EXECUTE statement_name [USING @var_name [, @var_name] ...]; /*執行預處理語句*/
{DEALLOCATE | DROP} PREPARE statement_name /*刪除定義*/ ;
PREPARE語句用於預備一個語句,並指定名稱statement_name,以後引用該語句。語句名稱對大小寫不敏感。preparable_sql_statement可以是一個文字字符串,也可以是一個包含了語句文本的用戶變量。該文本必須表現為一個單一的SQL語句,而不是多個語句。在這語句裡,‘?’字符可以被用於標識參數,當執行時,以指示數據值綁定到查詢後。‘?’字符不應加引號,即使你想要把它們與字符串值結合在一起。參數標記只能用於數據值應該出現的地方,而不是SQL關鍵字,標識符,等等
如果可以借助shell腳本之類的工具,當然還有很多方法可以導出帶日期格式的數據文件。在此不做過多展開。