我正在运行以下查询:
SET @src = 'Test';
SET @tgt = 'Test2';
SET @db = 'Test';
SET @pk = 'ID, MyPk, etc';
SELECT CONCAT( @pk, GROUP_CONCAT(CONCAT( ", ", COLUMN_NAME) SEPARATOR "") )
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = @db
AND TABLE_NAME = @src
INTO @cols;
Run Code Online (Sandbox Code Playgroud)
SET @sql = CONCAT( 'INSERT INTO `', @tgt, '` (SELECT ', @cols, ' FROM `', @src, '`);' );
PREPARE stm FROM @sql;
EXECUTE stm;
Run Code Online (Sandbox Code Playgroud)
它适用于......小桌子,我可以将这个@cols用于多种用途.但是,它停止使用大表(大量字段).我注意到它突破了1024个字符.它忽略了LIMIT.有没有超过1024个字符的变量或解决这个问题?
极限在于 的结果GROUP_CONCAT()
。您可以通过以下方式更改此设置:
SET group_concat_max_len = 10000
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)SET GLOBAL group_concat_max_len = (7*1024); SET GLOBAL max_allowed_packet = (50*1024*1024);
问题的根源是函数 GROUP_CONCAT。该文档说 GROUP_CONCAT 的group_concat_max_len
IS LIMITED BY max_allowed_packet
:
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
50% 给@echo_me,50% 给@barmar。一定要一起做,不然不行。
完整代码:
SET GLOBAL group_concat_max_len = (7*1024);
SET GLOBAL max_allowed_packet = (50*1024*1024);
SET @src = 'Test';
SET @tgt = 'Test2';
SET @db = 'Test';
SET @pk = 'ID, MyPk, etc';
SELECT CONCAT( @pk, GROUP_CONCAT(CONCAT( ", ", COLUMN_NAME) SEPARATOR "") )
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = @db
AND TABLE_NAME = @src
INTO @cols;
Run Code Online (Sandbox Code Playgroud)