네이티브 MySQL의에서이 작업을 수행하려면 실제 쿼리를 실행하면
가
table_exists_query = Select count(*) from INFORMATION_SCHEMA.tables where table_name='xxxx';
, 당신이 사용할 수 저장 프로 시저.
이것은 일회성 관리 유형 기능에 적합하며 응용 프로그램의 일부로이 기능을 사용하지 않을 것입니다. (이것이 다시 응용 프로그램의 일부인 경우, UPDATE가 수행되는지 여부를 제어하거나 테이블이 없으면 예외를 catch하고 처리하기위한 조건부 논리를 갖게됩니다.)
다음은 예제입니다. CONTINUE HANDLER
을 사용하여 오류 1146 (표가 존재하지 않음)을 catch하고이를 삼킨 다음 호출자에게 오류가 반환되지 않는 저장 프로 시저
DELIMITER //
DROP PROCEDURE IF EXISTS `table_doesnt_exist_handler`//
CREATE DEFINER=`root`@`%` PROCEDURE `table_doesnt_exist_handler`()
BEGIN
DECLARE table_doesnt_exist BOOLEAN;
DECLARE CONTINUE HANDLER FOR 1146 SET table_doesnt_exist = TRUE;
UPDATE table_doesnt_exist SET foo = 1 WHERE foo = 1;
END//
CALL `table_doesnt_exist_handler`()//
DROP PROCEDURE IF EXISTS `table_doesnt_exist_handler`//
DELIMITER ;
또 다른 옵션은 테이블의 존재 여부를 테스트하고, 조건부 문을 실행하는 것입니다. 네이티브 MySQL에서는, 다시 말하면, 스토어드 프로 시저 내에서이 작업을 수행해야합니다.
DELIMITER //
DROP PROCEDURE IF EXISTS `table_doesnt_exist_approach_2`//
CREATE DEFINER=`root`@`%` PROCEDURE `table_doesnt_exist_approach_2`()
BEGIN
SELECT @table_exists := COUNT(1) AS table_exists
FROM information_schema.tables
WHERE table_schema = DATABASE()
AND table_name = 'table_doesnt_exist';
IF @table_exists > 0 THEN
UPDATE table_doesnt_exist SET foo = 2 WHERE foo = 1;
END IF;
END//
CALL `table_doesnt_exist_approach_2`()//
DROP PROCEDURE IF EXISTS `table_doesnt_exist_approach_2`//
DELIMITER ;
내 취향은 CONTINUE HANDLER
로 이동하는 것입니다.
당신은 지금까지 어떤 시도를했고 어떤 오류가 있었습니까? 이 허용 된 대답은 테이블이 존재하지 않는 경우 업데이트 진술에서 오류가 발생하지 않도록 제안하는 것 같습니다. http://stackoverflow.com/questions/1833687/sql-to-update-a-table-only-if-that- table-exists-the-database – anotherdave
테이블이 있는지 여부를 확인할 수 있습니다.하지만 그럴 수는 없습니다. "IF MyResult = 1 THEN Update myTable" – PeteGO
게시하기 전에 내가 지적한 링크를 보았습니다. 그러나 "손상이 없습니다"는 내가 후한 것이 아닙니다. 여전히 오류가 발생합니다. – PeteGO