Я намагаюся створити стовпчик для моєї таблиці, лише якщо він не існує. Я багато досліджував, але не зміг знайти рішення.
Чи справді можливо умовно створити стовпчик?
Я намагаюся створити стовпчик для моєї таблиці, лише якщо він не існує. Я багато досліджував, але не зміг знайти рішення.
Чи справді можливо умовно створити стовпчик?
Відповіді:
У MySQL ALTER TABLE
немає IF EXISTS
специфікацій.
Ви можете зробити наступне, використовуючи збережену програму чи мову програмування, якщо це те, що вам потрібно робити регулярно:
Псевдокод:
Визначте, чи існує стовпець за допомогою SQL нижче:
ВИБРАТИ column_name
З INFORMATION_SCHEMA
. COLUMNS
WHERE TABLE_SCHEMA
= [Назва бази даних] AND TABLE_NAME
= [Назва таблиці];
Якщо вищезазначений запит повертає результат, то це означає, що стовпець існує, інакше можна продовжити і створити стовпець.
column_name
його не існує. Я переформулював запит на: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]'
Ви можете використовувати це рішення, вже згадуване в іншій публікації 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;
Це нижче працює для мене:
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;