테이블을 올바르게 자를 수 있는 방법은 무엇입니까?
루비가 있는 데이터매퍼를 사용하여 특정 테이블에 데이터를 저장하고 있습니다.
일부 표에는 매우 많은 양의 정보가 포함되어 있으며, 사용자가 '데이터베이스 재구성'을 수행할 때 삭제하고 싶습니다(기본적으로 모든 정보를 삭제하고 데이터를 다시 계산함).
나는 원래 Forum.all.destroy를 시도했고 다른 모든 테이블에 대해 그것을 했지만, 나는 그것들 중 일부가 phpmyadmin 내에서 삭제되지 않았다는 것을 알아차렸습니다.저는 외국 열쇠 때문이라는 것만 상상할 수 있습니다.비록 내 다른 테이블의 포어링 키가 성공적으로 삭제되었기 때문에 나는 정말 모릅니다.말할 것도 없이, 키가 비정상적으로 큰 숫자(예: 키 #500,000)에 도달하지 않도록 그냥 '제로'하고 싶습니다.
그런 다음 아래 코드로 실행하려고 했지만 '외부 키 제약' 때문에 테이블이 지워지지 않습니다.서로 의존하는 모든 테이블을 정리하고 있다는 것을 알고 있기 때문에 강제로 작업을 수행하고 싶습니다(두 테이블, 설정 테이블 및 임의 저장 테이블 중 어느 것도 외래 키를 사용하지 않음).
지금까지 전...
adapter = DataMapper.repository(:default).adapter
adapter.execute('TRUNCATE TABLE `forums`, `dates`, `remarks`');
MySQL 구문이 명백히 잘못된 것을 제외하고는 괜찮습니다.이것이 첫번째 일입니다.
나는 phpmyadmin에서 1개씩 했고 내가 그렇게 했을 때 그것은 나와요.
Cannot truncate a table referenced in a foreign key constraint
계획 A:
SET FOREIGN_KEY_CHECKS = 0; -- Disable foreign key checking.
TRUNCATE TABLE forums;
TRUNCATE TABLE dates;
TRUNCATE TABLE remarks;
SET FOREIGN_KEY_CHECKS = 1; -- Enable foreign key checking.
계획 B:
먼저 하위 테이블을 잘라낸 다음 상위 테이블을 잘라내야 합니다.
외부 키 검사를 사용하지 않도록 설정하면 정의되지 않은 동작을 유발할 수 있는 제약 조건을 준수하지 않는 행을 테이블에 입력할 위험이 있습니다.
외부 키 검사 사용 안 함을 사용하는 대신.
당신은 아래 코드를 사용할 수 있습니다.
DELETE FROM forums;
ALTER TABLE forums AUTO_INCREMENT = 1;
DELETE FROM dates;
ALTER TABLE dates AUTO_INCREMENT = 1;
DELETE FROM remarks;
ALTER TABLE remarks AUTO_INCREMENT = 1;
그러면 모든 행이 삭제되고 ID가 1부터 증가합니다.
언급URL : https://stackoverflow.com/questions/8641703/how-do-i-truncate-tables-properly
'programing' 카테고리의 다른 글
| 특정 파이썬 버전으로 콘다 환경을 만드는 방법은 무엇입니까? (0) | 2023.08.10 |
|---|---|
| 보기의 치수를 검색하는 방법은 무엇입니까? (0) | 2023.08.10 |
| Mac용 도커 데스크톱을 시작할 수 없습니다. (0) | 2023.08.10 |
| MariaDB 커넥터 J: autoReconnect가 기본 페일오버에 대해 작동하지 않음 (0) | 2023.08.10 |
| 도커 컨테이너 내에서 Curl 명령을 실행할 수 없음 (0) | 2023.08.10 |