我如何防止像ALTER TABLE ....一样反复执行查询?

时间:2013-12-16 12:42:39

标签: mysql

我已经开始使用MySQL数据库,每月有10Gb的新数据。 计费有生产和开发版本。

程序员创建补丁,并且在更新每个补丁的过程中逐个应用。 这不是数据库补丁的最佳方式,但此时我们无法做任何事情。

我们有像

这样的查询
ALTER TABLE  `Customer` ADD FOREIGN KEY (  `contract_id` ) REFERENCES  `Document` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION ;

我发现每次使用此查询的补丁都会在表之间创建引用。 如果有mo,那么表中有100 000 000条记录,这是非常缓慢和错误的。

我可以做一些事情,这会阻止第二次执行此查询吗?可能会给出一些名称来引用&

1 个答案:

答案 0 :(得分: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
相关问题