반응형
MYSQL 데이터베이스의 모든 외부 키 삭제
외부 키로 인해 데이터베이스 구조를 새로운 요구 사항에 맞게 수정하는 데 너무 많은 문제가 발생했습니다. 기본 키를 수정하고 싶지만 외부 키가 해당 테이블을 참조할 때는 수정할 수 없는 것 같습니다(MySQL이 테이블을 삭제하고 다시 만들기 때문인 것 같습니다.
그래서 DB 작업을 하는 동안 외부 키를 모두 제거하고 나중에 다시 만들고 싶습니다.그렇게 하는 깔끔한 방법이 있습니까?
달려.
SELECT concat('ALTER TABLE `', TABLE_NAME, '` DROP FOREIGN KEY `', CONSTRAINT_NAME, '`;')
FROM information_schema.key_column_usage
WHERE CONSTRAINT_SCHEMA = 'db_name'
AND referenced_table_name IS NOT NULL;
출력을 실행합니다.
Alter Table 명령문을 작성하기 전에 다음 명령을 간단히 실행할 수 있습니다.
SET foreign_key_checks = 0;
이렇게 하면 데이터베이스 연결에 대한 외부 키 제약 조건 검사가 해제됩니다.그런 다음 제약에 대해 걱정할 필요 없이 변경할 수 있습니다.
작업을 완료한 후에는 다음 사항을 잊지 마십시오.
SET foreign_key_checks = 1;
그들을 다시 켜는 것.
이렇게 해도 열 데이터 유형이 일치하지 않기 때문에 실패하는 새 외부 키 제약 조건을 만들 수 없습니다.
Zoozy 코드의 다른 버전에서는 테이블만 선택할 수 있습니다.
SELECT concat('ALTER TABLE ', TABLE_NAME, ' DROP FOREIGN KEY ', CONSTRAINT_NAME, ';')
FROM information_schema.key_column_usage
WHERE CONSTRAINT_SCHEMA = 'YOUR DB HERE'
AND TABLE_NAME='YOUR TABLE HERE'
AND REFERENCED_TABLE_NAME IS NOT NULL;
절차와 함께:
DROP PROCEDURE IF EXISTS dropForeignKeysFromTable;
delimiter ///
create procedure dropForeignKeysFromTable(IN param_table_schema varchar(255), IN param_table_name varchar(255))
begin
declare done int default FALSE;
declare dropCommand varchar(255);
declare dropCur cursor for
select concat('alter table ',table_schema,'.',table_name,' DROP FOREIGN KEY ',constraint_name, ';')
from information_schema.table_constraints
where constraint_type='FOREIGN KEY'
and table_name = param_table_name
and table_schema = param_table_schema;
declare continue handler for not found set done = true;
open dropCur;
read_loop: loop
fetch dropCur into dropCommand;
if done then
leave read_loop;
end if;
set @sdropCommand = dropCommand;
prepare dropClientUpdateKeyStmt from @sdropCommand;
execute dropClientUpdateKeyStmt;
deallocate prepare dropClientUpdateKeyStmt;
end loop;
close dropCur;
end///
여러 데이터베이스에 걸쳐 동일한 테이블을 수행하려면 다음을 저장하는 것을 잊지 마십시오.CONSTRAINT_SCHEMA
출력:
SELECT concat('ALTER TABLE ', CONSTRAINT_SCHEMA,'.',TABLE_NAME, ' DROP FOREIGN KEY ', CONSTRAINT_NAME, ';')
FROM information_schema.key_column_usage
WHERE CONSTRAINT_SCHEMA like 'your_db_prefix_%'
AND TABLE_NAME='your_table'
AND REFERENCED_TABLE_NAME IS NOT NULL;
언급URL : https://stackoverflow.com/questions/13733281/drop-all-foreign-keys-in-mysql-database
반응형
'source' 카테고리의 다른 글
Quartz Core, Core Graphics 및 Quartz 2D의 차이점은 무엇입니까? (0) | 2023.08.29 |
---|---|
window.print() 마감을 탐지하는 방법 (0) | 2023.08.29 |
SQL null 값이 결과에 표시되지 않습니다. (0) | 2023.08.29 |
MySQL: FULL OUTER JOIN - 열 하나를 병합하려면 어떻게 해야 합니까? (0) | 2023.08.29 |
iOS 자동 레이아웃: 두 개의 동일한 너비의 버튼이 나란히 있습니다. (0) | 2023.08.29 |