MySQL: Làm thế nào để tạo Cột nếu không tồn tại?


13

Tôi đang cố gắng tạo Cột cho bảng của mình chỉ khi nó không tồn tại. Tôi đã nghiên cứu rất nhiều nhưng tôi chưa thể tìm ra giải pháp nào.

Điều này thực sự có thể tạo cột có điều kiện?


Tôi tò mò ... Có gì sai khi chỉ để thay đổi không thành công nếu cột đã tồn tại?
Derek Downey

Trên thực tế tôi cần cung cấp tệp .sql cho khách hàng của mình để có tất cả các truy vấn liên quan đến Thay đổi cấu trúc DB. Tôi không thể gửi toàn bộ cơ sở dữ liệu cho họ. Tôi chỉ muốn gửi cho họ những thay đổi db. có nhiều truy vấn hơn trong tập tin sql đó. Nếu truy vấn này về việc tạo cột thất bại thì nó sẽ thất bại tất cả các truy vấn. Vì vậy, đó là lý do tại sao tôi muốn sử dụng if condition để tạo cột.
zzzzz

Nếu cơ sở dữ liệu của bạn hỗ trợ nó, bạn có thể sử dụng một kích hoạt. TRƯỚC KHI CHỨNG MINH.
gian mạng

Câu trả lời:


7

MySQL ALTER TABLEkhông có IF EXISTSđặc điểm kỹ thuật.

Bạn có thể thực hiện những điều sau thông qua việc sử dụng một Proc được lưu trữ hoặc ngôn ngữ lập trình nếu đây là việc bạn cần làm thường xuyên:

Mã giả:

  • Tìm nếu cột tồn tại bằng cách sử dụng SQL dưới đây:

    CHỌN column_name TỪ INFORMATION_SCHEMA. COLUMNS WHERE TABLE_SCHEMA= [Tên cơ sở dữ liệu] AND TABLE_NAME= [Tên bảng];

  • Nếu truy vấn trên trả về một kết quả thì có nghĩa là cột tồn tại, nếu không bạn có thể tiếp tục và tạo cột.


Trong MySQL / MariaDB tôi gặp lỗi khi sử dụng truy vấn đó, cho biết điều column_nameđó không tồn tại. Tôi đã điều chỉnh lại truy vấn thành:SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' and column_name='[Column_name]';
Jesus Alonso Abad

2
Đối với câu trả lời 0 hoặc 1 đơn giản trên cả MySQL và (tôi nghĩ) MariaDB:SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' AND column_name='[Column_name]'
piojo

13

Hiện tại thực sự tồn tại cho Maria DB 10.219

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

Tiền thưởng, nó cũng hoạt động cho MODIFY

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

3
> "MYSQL 5.5.5"? Điều này không chính xác, đây chỉ là một tính năng của Maria DB.
Excalibur

1
cảm ơn vì sự điều chỉnh
Paraggerkey 15/07/19

6

Bạn có thể sử dụng giải pháp này, đã được đề cập trên một bài đăng khác của StackOverFlow: (Tham khảo: https://stackoverflow.com/a/31989541/ )

MySQL - ALTER TABLE để thêm một cột nếu nó không tồn tại:

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;

1

Điều này dưới đây làm việc cho tôi:

    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;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.