[mysql] MySQL 테이블에서 제약 조건을 제거하는 방법은 무엇입니까?

내 테이블에서 제약 조건을 제거하고 싶습니다. 내 질문은 :

ALTER TABLE `tbl_magazine_issue` 
DROP CONSTRAINT `FK_tbl_magazine_issue_mst_users`

그러나 오류가 발생했습니다.

#1064-SQL 구문에 오류가 있습니다. FK_tbl_magazine_issue_mst_users라인 1에서 ‘제한 ‘ 근처에서 사용할 올바른 구문은 MySQL 서버 버전에 해당하는 매뉴얼을 확인하십시오.



답변

MySQL에는 외래 키 제약 조건을 삭제하는 특수 구문이 있습니다.

ALTER TABLE tbl_magazine_issue
  DROP FOREIGN KEY FK_tbl_magazine_issue_mst_users


답변

나는 같은 문제가 있었고이 코드로 해결해야했다.

ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`;
ALTER TABLE `table_name` DROP INDEX  `id_name_fk`;


답변

DROP CONSTRAINTMySQL 과 같은 것은 없습니다 . 귀하의 경우 DROP FOREIGN KEY대신 사용할 수 있습니다 .


답변

제약 조건이 외래 키가 아닌 경우 (예 : 하나는 ‘UNIQUE CONSTRAINT (colA, colB)’를 사용하여 추가 한 다음을 사용하여 삭제할 수있는 색인입니다ALTER TABLE ... DROP INDEX ...


답변

또한 mysql 데이터베이스에서 모든 외래 키 검사를 일시적으로 비활성화 할 수 있습니다

SET FOREIGN_KEY_CHECKS=0;

.

SET FOREIGN_KEY_CHECKS=1;


답변

Robert Knight의 답변에 약간을 추가하려면 게시물 자체의 제목에 외래 키가 언급되어 있지 않으므로 (완료된 코드 샘플이 없으며 SO의 주석 코드 블록이 답변 코드와 함께 표시되지 않기 때문에) 블록), 고유 제약 조건을 위해 이것을 추가합니다 . 이러한 작업 중 하나를 수행하여 제약 조건을 제거하십시오.

ALTER TABLE `table_name` DROP KEY `uc_name`;

또는

ALTER TABLE `table_name` DROP INDEX `uc_name`;


답변

일부 ORM 또는 프레임 워크 FK_[parent table]_[referenced table]_[referencing field]는 변경 될 수 있기 때문에 외래 키에 대해 외래 키에 대해 다른 명명 규칙을 사용합니다 .

예를 들어 라 라벨은 [parent table]_[referencing field]_foreign명명 규칙으로 사용합니다 . 와 같이이 쿼리를 사용하여 외부 키의 이름을 표시 할 수 있습니다 여기에 :

SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE REFERENCED_TABLE_SCHEMA = '<database>' AND REFERENCED_TABLE_NAME = '<table>';

그런 다음 앞에서 언급 한 DROP FOREIGN KEY 쿼리와 해당 이름을 실행하여 외래 키를 제거하십시오.