2012-02-28 2 views
1

지정한 테이블을 참조하는 테이블에서 외래 키를 삭제하려고합니다. 나는 외래 키의 이름을 모른다. 나는 그것이있는 테이블과 그것이 참조하는 테이블만을 알고있다. 이것은 내가 지금까지 무엇을 가지고 있습니다 :MySQL 테이블에서 외래 키를 동적으로 삭제하는 방법은 무엇입니까?

alter table tblTableWhereFKIs drop foreign key (select constraint_name 
from information_schema.key_column_usage 
where referenced_table_name = 'tblReferencedByFK' and table_name = 'tblTableWhereFKIs' limit 1); 

하지만 오류 얻을 :

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(select constraint_name 
from information_schema.key_column_usage 
where referen' at line 1 

셀렉트 혼자 작품 :

mysql> select constraint_name 
    -> from information_schema.key_column_usage 
    -> where referenced_table_name = 'tblReferencedByFK' and table_name = 'tblTableWhereFKIs' limit 1; 
+-----------------------------------------+ 
| constraint_name       | 
+-----------------------------------------+ 
| fk_tblTableWhereFKIs_tblReferencedByFK1 | 
+-----------------------------------------+ 
1 row in set (0.08 sec) 

답변

2

난 당신이 그렇게 할 수 있다고 생각하지 않습니다를. alter 문은 select에서 결과를 외래 키 삭제의 여러 실행으로 추정하는 방법을 알지 못합니다.

나는 보통 같은 것을 할 :

SELECT CONCAT('alter table ', table_name, ' drop foreign key ', constraint_name, ';') 
FROM information_schema.key_column_usage 
WHERE referenced_table_name = 'tblReferencedByFK' and table_name = 'tblTableWhereFKIs'; 

나는 나를 위해 모든 ALTER 문을 구축 할 것입니다 위의 쿼리를 실행합니다. 그런 다음 alter 문 목록을 가져 와서 수동으로 실행합니다.

1

나는 MySQL은이를 테스트 할 수 있도록 손 필요가 없습니다,하지만 난 다음의 라인을 따라 뭔가가 작동합니다 생각 :

는 MySQL의 내 경험이 제한됩니다
DECLARE @SQL VARCHAR(100) 

SELECT @SQL = 'alter table tblTableWhereFKIs drop foreign key ' + constraint_name 
FROM information_schema.key_column_usage 
WHERE referenced_table_name = 'tblReferencedByFK' 
AND  table_name = 'tblTableWhereFKIs' 

PREPARE stmt FROM @SQL 
EXECUTE stmt 

그래서이 혼합물이다 님의 답변 및 정보 중 MySQL Website

관련 문제