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 đ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?
Câu trả lời:
MySQL ALTER TABLE
khô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.
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]';
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' AND column_name='[Column_name]'
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);
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;
Đ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;