MySQL : 존재하지 않는 경우 열을 만드는 방법은 무엇입니까?


14

존재하지 않는 테이블에 대해서만 열을 작성하려고합니다. 나는 많은 연구를했지만 아직 해결책을 찾지 못했습니다.

조건부로 열을 만들 수 있습니까?


궁금합니다 ... 열이 이미 존재하는 경우 오류가 발생하면 변경이 실패하도록하는 것이 무엇이 잘못 되었습니까?
데릭 다우니

실제로 DB 구조 변경과 관련된 모든 쿼리가있는 .sql 파일을 클라이언트에 제공해야합니다. 전체 데이터베이스를 보낼 수 없습니다. DB 변경 사항을 보내려고합니다. 해당 SQL 파일에 더 많은 쿼리가 있습니다. 열 작성에 대한이 쿼리가 실패하면 모든 쿼리가 실패합니다. 그래서 if 조건을 사용하여 열을 만들고 싶습니다.
zzzzz

데이터베이스가 지원하는 경우 트리거를 사용할 수 있습니다. 삽입하기 전에.
cybernard

답변:


8

MySQL ALTER TABLE에는 IF EXISTS사양 이 없습니다 .

저장된 프로 시저 또는 프로그래밍 언어를 사용하여 정기적으로 수행해야하는 작업을 수행하면 다음을 수행 할 수 있습니다.

의사 코드 :

  • 아래 SQL을 사용하여 열이 존재하는지 찾으십시오.

    column_name FROM에서 선택하십시오 INFORMATION_SCHEMA. COLUMNS 어디서 TABLE_SCHEMA= [데이터베이스 이름] AND TABLE_NAME= [테이블 이름];

  • 위 쿼리가 결과를 반환하면 열이 존재한다는 의미입니다. 그렇지 않으면 열을 만들 수 있습니다.


MySQL / MariaDB에서 해당 쿼리를 사용할 때 column_name존재하지 않는다는 오류가 발생 합니다. 나는 그 질문을 다음과 같이 재구성했다.SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' and column_name='[Column_name]';
Jesus Alonso Abad

2
MySQL과 MariaDB에 대한 간단한 0 또는 1 답변 :SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' AND column_name='[Column_name]'
piojo

14

실제로 Maria DB 10.219에 대해 존재합니다.

ALTER TABLE test ADD COLUMN IF NOT EXISTS column_a VARCHAR(255);

보너스, 그것은 MODIFY에서도 작동합니다.

ALTER TABLE test MODIFY IF EXISTS column_a VARCHAR(255);

3
> "MYSQL 5.5.5"? 이것은 정확하지 않습니다. 이것은 Maria DB 기능 일뿐입니다.
엑스 칼리버

1
수정 주셔서 감사합니다
Paroofkey

6

다른 StackOverFlow 게시물에서 이미 언급 한이 솔루션을 사용할 수 있습니다 : (참조 : https://stackoverflow.com/a/31989541/ )

MySQL-ALTER TABLE이 없으면 열을 추가합니다.

SET @dbname = DATABASE();
SET @tablename = "tableName";
SET @columnname = "colName";
SET @preparedStatement = (SELECT IF(
  (
    SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
    WHERE
      (table_name = @tablename)
      AND (table_schema = @dbname)
      AND (column_name = @columnname)
  ) > 0,
  "SELECT 1",
  CONCAT("ALTER TABLE ", @tablename, " ADD ", @columnname, " INT(11);")
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;

2

아래는 나를 위해 일했습니다.

    SELECT count(*)
    INTO @exist
    FROM information_schema.columns
    WHERE table_schema = 'mydatabase'
    and COLUMN_NAME = 'mycolumn'
    AND table_name = 'mytable' LIMIT 1;

    set @query = IF(@exist <= 0, 'ALTER TABLE mydatabase.`mytable`  ADD COLUMN `mycolumn` MEDIUMTEXT NULL',
    'select \'Column Exists\' status');

    prepare stmt from @query;

    EXECUTE stmt;

고마워요.
Stuart McIntyre
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.