없는 경우 MySQL 추가 열
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'email_subscription' AND COLUMN_NAME = 'subscribe_all')
THEN
ALTER TABLE email_subscription
ADD COLUMN subscribe_all TINYINT(1) DEFAULT 1,
ADD COLUMN subscribe_category varchar(512) DEFAULT NULL;
엄청난 양의 예제를 살펴봤지만 이 쿼리가 작동하지 않아 오류가 발생했습니다.
오류 1064 (42000):SQL 구문에 오류가 있습니다. MySQL 서버 버전에 해당하는 매뉴얼에서 'IF NOT EXISTRESS(IF NOT EXISTRESS)' 근처에서 사용할 수 있는 올바른 구문을 확인하십시오.1행에서 TABLE_NAME = '열
호스트에서 프로시저를 만들거나 실행할 수 있는 권한을 부여하지 않으면 PREADE/EXECUTE를 사용하고 스키마를 쿼리하여 다른 방법을 찾은 것 같습니다.
SET @s = (SELECT IF(
(SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'table_name'
AND table_schema = DATABASE()
AND column_name = 'col_name'
) > 0,
"SELECT 1",
"ALTER TABLE table_name ADD col_name VARCHAR(100)"
));
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
질의에 대한 절차를 만들 수 있습니다.
DELIMITER $$
CREATE PROCEDURE Alter_Table()
BEGIN
DECLARE _count INT;
SET _count = ( SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'email_subscription' AND
COLUMN_NAME = 'subscribe_all');
IF _count = 0 THEN
ALTER TABLE email_subscription
ADD COLUMN subscribe_all TINYINT(1) DEFAULT 1,
ADD COLUMN subscribe_category varchar(512) DEFAULT NULL;
END IF;
END $$
DELIMITER ;
단일 MySQL 문에서 이를 달성할 수 있는 동등한 구문은 없습니다.
유사한 것을 얻기 위해서는, 당신은 다음 중 하나를 선택할 수 있습니다.
1) ALTER TABLE로 열을 추가하려고 시도하고 테이블에 해당 이름의 열이 이미 있는 경우 MySQL에서 오류가 발생하도록 합니다.
2) information_schema.columns 보기를 쿼리하여 해당 이름의 열이 테이블에 있는지 확인합니다.
table_schema와 table_name을(를) 반드시 확인해야 합니다.
SELECT column_name
FROM information_schema.columns
WHERE table_schema = 'foo'
AND table_name = 'email_subscription'
AND column_name = 'subscribe_all'
이를 바탕으로 ALTER TABLE을 실행할지 여부를 결정합니다.
MySQL에서 MS SQL Server 구문을 사용하고 있습니다.
또한 데이터베이스 이름에 대한 조건을 추가하여 열 존재 여부를 확인합니다.
시도해 보기:
DELIMITER $$
CREATE PROCEDURE sp_AlterTable()
BEGIN
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'dbName' AND
TABLE_NAME = 'email_subscription' AND
COLUMN_NAME = 'subscribe_all') THEN
ALTER TABLE email_subscription
ADD COLUMN subscribe_all TINYINT(1) DEFAULT 1,
ADD COLUMN subscribe_category VARCHAR(512) DEFAULT NULL;
END IF;
END $$
DELIMITER ;
SET @s = (SELECT IF(
(SELECT COUNT(column_name)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'oc_bitcoin_wallets_receive'
AND table_schema = 'k_opencart2'
AND column_name = 'test3'
) > 0,
"SELECT 1",
"ALTER TABLE `oc_bitcoin_wallets_receive` ADD COLUMN `test3` INT NOT NULL AFTER `test2`;"
));
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
편집을 위한 값 : oc_bitcoin_wallets_receive - 테이블명, k_opencart2 - 데이터베이스명, test3 - new column의 이름, oc_bitcoin_wallets_receive - second location test3 - second location column, test2 - new column 앞 컬럼의 이름
언급URL : https://stackoverflow.com/questions/14381895/mysql-add-column-if-not-exist
'programing' 카테고리의 다른 글
PHP를 이용하여 .gz 파일을 만드는 방법은 무엇입니까? (0) | 2023.10.01 |
---|---|
JSDoc에서 객체 배열을 매개변수 또는 반환 값으로 지정하는 방법은 무엇입니까? (0) | 2023.10.01 |
카드뷰에 색 테두리를 추가하는 방법? (0) | 2023.10.01 |
JPA Null 또는 0 기본 키가 워크 클론 단위에 있습니다. (0) | 2023.10.01 |
MYSQL: 다음 업데이트 트리거가 작동하지 않는 이유는 무엇입니까? (0) | 2023.10.01 |