2013-12-16 2 views
0

У меня есть биллинг с базой данных MySQL с 10 ГБ в месяц новых данных. Биллинг имеет версию для производства и разработки.Как я могу предотвратить повторное выполнение запроса, например, ALTER TABLE ....?

Программисты создают патчи и когда prod в обновлении каждого патча применяется один за другим. Это не лучший способ патча БД, но в этот момент мы ничего не можем с этим поделать.

мы имеем запрос как

ALTER TABLE `Customer` ADD FOREIGN KEY ( `contract_id`) REFERENCES `Document` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION ; 

и я обнаружил, что каждый раз, когда патч с этим запросом это создать применяет указанные ссылки между таблицами. Когда есть mo, тогда 100 000 000 записей в таблице очень медленные и неправильные.

Могу ли я сделать что-нибудь, что предотвратит повторное выполнение этого запроса? может дать некоторое имя для ссылки &

ответ

2

Вы можете использовать этот стиль:

IF NOT EXISTS (SELECT NULL FROM information_schema.TABLE_CONSTRAINTS WHERE 
       CONSTRAINT_SCHEMA = DATABASE() AND 
       CONSTRAINT_NAME = 'contract_document' AND 
       CONSTRAINT_TYPE = 'FOREIGN KEY') THEN 
    ALTER TABLE `Customer` ADD CONSTRAINT `contract_document` 
         FOREIGN KEY (`contract_id`) 
         REFERENCES `Document` (`id`); 
END IF 
Смежные вопросы