을 만듭니다. 문제는 내가 이것을 방아쇠에 쓰고 싶다는 것입니다!에서 내가 동적 ALTER TABLE 명령을 만들려고 해요하지만 명령 중 일부는 쿼리에서 생성됩니다 TRIGGER
시도 1 :
ALTER TABLE `redinfomanager` CHANGE `Unterkategorie` `Unterkategorie` ENUM(("SELECT GROUP_CONCAT(CONCAT('\'', REPLACE(`Unterkategorien`, '\r\n', '\',\''), '\'') SEPARATOR ',') FROM `kategorien` GROUP BY '1'")) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL;
시도 2 :
SELECT @tmp:=GROUP_CONCAT(CONCAT('\'', REPLACE(`Unterkategorien`, '\r\n', '\',\''), '\'') SEPARATOR ',') FROM `kategorien` GROUP BY '1';
SET @query=CONCAT('ALTER TABLE `redinfomanager` CHANGE `Unterkategorie` `Unterkategorie` ENUM(', @tmp, ') CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL');
PREPARE stmt FROM @query;
EXECUTE stmt;
시도 3 :
SET @kat = (SELECT GROUP_CONCAT(CONCAT('\'', REPLACE(`Unterkategorien`, '\r\n', '\',\''), '\'') SEPARATOR ',') FROM kategorien GROUP BY '1');
PREPARE stmt FROM 'ALTER TABLE redinfomanager CHANGE Unterkategorie Unterkategorie ENUM(?) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL';
EXECUTE stmt USING @kat;
그것은 나를 알려줍니다
1064 - Y를 o SQL 구문에 오류가 있습니다. MySQL 서버 버전에 해당하는 설명서를 확인하여 올바른 구문을 사용하십시오. '; 나는 그것을 할 수있는 방법
1 호선에서`Unterkategorie
Unte을 표 redinfomanager
변경을 ALTER 'FROM stmt를 준비?
그 오류는 무엇을 의미합니까?
정말 *이 될 가능성이 * 나쁜 생각 - 'ALTER TABLE' 테이블 잠금, 종종 매우 느린 될 수있는, 전체 테이블을 다시 작성하는 데 끝날 것 테이블이 큰 경우 작업. 가능한 값의 집합이 잘 정의되지 않은 컬럼이 있다면'ENUM()'을 사용하지 마십시오. 대신에'VARCHAR' 또는 이와 유사한 것을 사용하십시오. – duskwuff
음, 테이블이 너무 크지는 않습니다. 이 세트는 전혀 변경되지 않을 것이지만 지금은 테스트 단계에 있으므로 변경 사항을 손으로 직접 수정할 수 있으므로 설정을 변경하여 변경 사항을 확인할 수 있습니다. 하지만이 방법을 사용할 수 있습니까 ??? – BrainStone
'ENUM'을 사용하지 마십시오. 적절히 크기가 정해진 'VARCHAR' 컬럼은 거의 동일하게 동작 할 것이고, 테이블을 수정하지 않고서도 모든 문자열 값을 사용할 수 있습니다. – duskwuff