知道为什么这在 MySQL 5.1 中失败:
SET @LOAD_TIME = UNIX_TIMESTAMP();
SET @OUTFILE = CONCAT(CONCAT('/tmp/outfile_', @LOAD_TIME), '.sql');
SELECT *
FROM `tableA`
INTO OUTFILE @OUTFILE;
这是 MySQL SELECT 的限制还是我在这里遗漏了什么?
知道为什么这在 MySQL 5.1 中失败:
SET @LOAD_TIME = UNIX_TIMESTAMP();
SET @OUTFILE = CONCAT(CONCAT('/tmp/outfile_', @LOAD_TIME), '.sql');
SELECT *
FROM `tableA`
INTO OUTFILE @OUTFILE;
这是 MySQL SELECT 的限制还是我在这里遗漏了什么?
您不能使用变量作为文件名。与 LIMIT 一样,它必须是文字值,而不是公式或变量。
例如,这里要写入的文件是什么文件名?
SET @LOAD_TIME = UNIX_TIMESTAMP();
SET @OUTFILE = CONCAT(CONCAT('/tmp/outfile_', @LOAD_TIME), '.sql');
SELECT @OUTFILE = columnA
, columnB
FROM `tableA`
INTO OUTFILE @OUTFILE;
这与 LIMIT 上的限制类似。如果在 LIMIT 子句中允许使用表达式,您可能会提出具有不可预测行为的查询。例如,假设您有一个包含 10 行的表,a 列的值从 1 到 10。这个查询的输出是什么?
SELECT *
FROM myTable
ORDER
BY a
LIMIT 10 - a
此限制的基础是:如果您可以计算限制,那么您应该显式计算限制,然后使用文字值构建查询。允许对表达式10 - a
进行评估会使查询执行计划可能更加复杂。