欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

删除数据库的外键关联

程序员文章站 2022-06-04 13:23:46
...

最近接手的一个项目,需要接入第三方支付。但是第三方要求做一个电商去包装一下。开始觉得这包装一个电商就是轻松+愉快。然后噩梦才刚刚开始,在网上随便找了一个开源的电商项目。大刀阔斧的改了一下源码,然后顺利的跑了起来。然而,在这个时候发现数据库共有近百张表,N张那么多有主要外键关联。简单的举个例子。我想要删一个商品分类,你就会发现分类关联着品牌,品牌关联着商品,商品关联着其它属性...等等等等等。

所以,我就在想,怎么能批量的干掉这些外键关联呢?

于是乎就掀起了一场我与Mysql之间的腥风血雨。

  1. 首先,批量查询并且生成alert语句
select CONCAT('ALTER TABLE `', TABLE_NAME, '` DROP FOREIGN KEY `',  CONSTRAINT_NAME, '`;') as 'drop-fk'
from information_schema.KEY_COLUMN_USAGE 
where TABLE_SCHEMA = '表模式名'
and CONSTRAINT_NAME like '外键名模糊搜索'
and TABLE_NAME = '表名';
  1. 上面的SQL执行完成后,alert语句,全选,复制,执行这些alert语句
ALTER TABLE `test` DROP FOREIGN KEY `FK4F1D86B91CAD6AEC`;
ALTER TABLE `test` DROP FOREIGN KEY `FK4F1D86B92FE2B71B`;
ALTER TABLE `test` DROP FOREIGN KEY `FK4F1D86B9387D99AC`;
ALTER TABLE `test` DROP FOREIGN KEY `FK4F1D86B95485C889`;
ALTER TABLE `test` DROP FOREIGN KEY `FK4F1D86B9664C2B1A`;
ALTER TABLE `test` DROP FOREIGN KEY `FK4F1D86B9AA7FDCCE`;
ALTER TABLE `test` DROP FOREIGN KEY `FK4F1D86B9F24E3275`;

等待着他执行完成,这样,跟这张表相关联的外键就都干掉了。

由于本人从业没有多久,对数据库又并不是很精通,相对又懒。所以只能以这种方式来解除主外键关联了。如果有大神有更好的方法,可以告诉我,不喜勿喷,个人积累。