복붙노트

[SQL] 하지 존재하는 경우 열을 추가 MYSQL

SQL

하지 존재하는 경우 열을 추가 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;

나는 예 엄청난 양의에보고했다. 하지만이 쿼리, 나는의 오류가없는 일 가지고 않습니다

해결법

  1. ==============================

    1.당신은 쿼리에 대한 프로 시저를 만들 수 있습니다

    당신은 쿼리에 대한 프로 시저를 만들 수 있습니다

    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 ;
    
  2. ==============================

    2.호스트는 당신이 만들거나 절차를 실행할 수있는 권한을 부여하지 않는 경우, 나는 준비 / 사용해서 실행하고 스키마를 쿼리이 작업을 수행하는 다른 방법을 찾은 것 같아요 :

    호스트는 당신이 만들거나 절차를 실행할 수있는 권한을 부여하지 않는 경우, 나는 준비 / 사용해서 실행하고 스키마를 쿼리이 작업을 수행하는 다른 방법을 찾은 것 같아요 :

    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;
    
  3. ==============================

    3.하나의 MySQL의 문이를 달성하기 위해 상응하는 구문은 없습니다.

    하나의 MySQL의 문이를 달성하기 위해 상응하는 구문은 없습니다.

    비슷한하려면 다음 중 하나를 수행 할 수 있습니다

    1) ALTER TABLE과 열을 추가하려고, 그 이름의 열이 이미 테이블에 존재하는 경우 MySQL은 오류를 발생하게하거나,

    2) INFORMATION_SCHEMA.COLUMNS 그 이름의 열이 테이블에 존재하는지 확인하기 위해 볼 쿼리.

    당신이 정말로 테이블 _뿐만 아니라의 TABLE_SCHEMA을 위해 확인해야 할 것을 참고 :

    SELECT column_name
      FROM information_schema.columns 
     WHERE table_schema = 'foo'
       AND table_name   = 'email_subscription'
       AND column_name  = 'subscribe_all'
    

    그 바탕으로 ALTER 표를 실행할지 여부를 결정

  4. ==============================

    4.당신은 MySQL의에서 MS SQL 서버 구문을 사용하고 있습니다.

    당신은 MySQL의에서 MS SQL 서버 구문을 사용하고 있습니다.

  5. ==============================

    5.또한 열 존재를 확인하기 위해 데이터베이스 이름에 대한 조건을 추가 할 수 있습니다.

    또한 열 존재를 확인하기 위해 데이터베이스 이름에 대한 조건을 추가 할 수 있습니다.

    이 시도:

    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 ;
    
  6. ==============================

    6.

    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 - 새로운 열의 이름, oc_bitcoin_wallets_receive - 두 번째 위치 테이블 TEST3 - 2 위치 칼럼 TEST2 - 새로운 열 전에 열 이름입니다.

  7. from https://stackoverflow.com/questions/14381895/mysql-add-column-if-not-exist by cc-by-sa and MIT license