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評価を許可すると、クエリの実行計画が潜在的にはるかに複雑になります。