ALTER TABLE `payment_methods` ADD COLUMN IF NOT EXISTS `is_default` TINYINT(1) NOT NULL DEFAULT 0 AFTER `is_system`; ALTER TABLE `payment_methods` ADD COLUMN IF NOT EXISTS `system_key` VARCHAR(64) NULL AFTER `is_default`; SET @index_exists := ( SELECT COUNT(1) FROM information_schema.statistics WHERE table_schema = DATABASE() AND table_name = 'payment_methods' AND index_name = 'uq_payment_methods_company_system_key' ); SET @create_index_sql := IF( @index_exists = 0, 'CREATE UNIQUE INDEX `uq_payment_methods_company_system_key` ON `payment_methods` (`company_id`, `system_key`)', 'SELECT 1' ); PREPARE stmt FROM @create_index_sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; UPDATE `payment_methods` SET `is_default` = 0 WHERE `is_default` IS NULL; UPDATE `payment_methods` SET `system_key` = NULL WHERE `is_system` = 0;