我已经开始使用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条记录,这是非常缓慢和错误的。
我可以做一些事情,这会阻止第二次执行此查询吗?可能会给出一些名称来引用&
答案 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