레코드가 특정 테이블에 입력되면 삭제하지 않기를 바란다고 생각합니다. 레코드는 역사적 목적을 위해 사물을 추적 할 수 있습니다. 나는 MySQL을 사용하고있다. InnoDB. 해당 테이블을 응용 프로그램 계층에서 실수로 삭제하지 못하도록 보호 할 수있는 방법이 있습니까? 그렇다면 좋은 접근 방법입니까?MySQL : 삭제를 방지하는 방법?
답변
또 다른 옵션은 내역 표에 대한 ARCHIVE 엔진으로 전환하는 것입니다.
이렇게하면 테이블에 대한 DELETE 또는 UPDATE 작업을 방지하고 데이터를 압축합니다. 이 접근법의 한 가지 (주요) 단점은 테이블의 열을 인덱싱 할 수 없다는 것입니다.
사용자에 대한 권한을 설정할 수있는 경우 삭제 권한을 부여하지 마십시오. 이 사례가 통계 목적의 표와 같이 반드시 있어야하는 상황이 있습니다. 따라서 테이블을 사용하여이 목표 중 하나를 달성하면 좋은 접근 방법입니다.
특정 테이블에 대해이 작업을 수행 할 수 있습니까? 이 작업을 서버에서 구성해야합니까? 의미,이 응용 프로그램을 설치할 때마다 계속이 작업을 수행해야합니까? 잊어 버리면 어떡하지? – StackOverflowNewbie
@StackOverflowNewbie 내가 아는 한, 당신은 할 수 없습니다. 일반적으로 서버에 구성해야합니다. 또한 매번이 작업을 수행해야하며 사용자가 잊어 버린 경우 사용자가 행을 삭제할 수 있습니다. –
응용 프로그램 계층에이 논리를 구현하고 삭제하지 않을 플래그를 삽입하는 열을 삽입해야한다고 생각합니다.
또 다른 아이디어는 DB 사용자의 삭제 액세스를 제외하는 것입니다
응용 프로그램 계층에서 테이블을 보호하려고합니다. 나는이 표에서 삭제할 것이 아무것도 구현하지 않을 것이다. 그러나, 나는 (예를 들어, 다른 누군가가이 테이블에서 나중에 삭제할 논리를 구현하거나 누군가가 phpMyAdmin을 사용하고 해당 테이블에서 무언가를 삭제하려고 할 때) 테이블 자체를 방어 할 수 있는지 확인하고자합니다. – StackOverflowNewbie
그런 다음 레코드를 다시 삽입, 삭제를 감지하는 트리거를 작성 할 수 있습니다,하지만 몇 가지 문제가있을 수 있습니다, 당신은 할 수 있습니다 또한 삭제를 막을 외래 키 제약 조건을 추가하십시오.
이에 대한 일부 토론은 http://rpbouman.blogspot.com/2011/10/mysql-hacks-preventing-deletion-of.html에서 확인할 수 있습니다.
레코드를 다시 삽입하면 원래의 자동 증가 PK를 잃게됩니다. FK 제약 솔루션은 어떻게 작동합니까? – StackOverflowNewbie
내가 제공 한 링크를 읽었습니다. FK 구속력 해결 방안은 해커처럼 보입니다. 어떻게 생각해? – StackOverflowNewbie
이러한 접근 방식 중 일부는 조금 hackish 있습니다.사람들이 삭제할 수 없도록하는 것이 올바른 생각이지만 고유성을 위반하지 않는 한 자동 증가 열에 삽입 할 수 있습니다. –
삭제 작업을 감지하고 불법적 인 작업을 수행하여 전체 작업이 실패하는 트리거를 사용합니다. 예를 들면 다음과 같습니다.
CREATE TRIGGER protect_delete before delete ON protected_table
FOR EACH ROW UPDATE non_existing_table SET non_existing_column=1;
누군가 삭제 작업을 시도하면 전체 문장이 실패합니다. 또한 non_existing_column 및 non_existing_table에 더 나은 이름을 사용할 수도 있습니다.
가ERROR 1146 (42S02) : 표 'database.delete_restricted_on_tableX' 가
EDIT 존재하지 않는다 :
예는 이와 같은 오류 메시지를 얻을 수있다 또한입니다 더 나은 오류 메시지를 생성하려면 여기를 확인하십시오. http://www.brokenbuild.com/blog/2006/08/15/mysql-triggers-how-do-you-abort-an-insert-update-or-delete-with-a-trigger/
- 1. MySQL - 연결된 테이블을 통한 삭제를 방지하는 트리거
- 2. 트리거를 사용하여 삭제를 방지하는 방법은 무엇입니까?
- 3. 손상된 데이터베이스를 방지하는 방법 - MySQL
- 4. 결정된 디렉토리에서 파일 복사, 붙여 넣기 및 삭제를 방지하는 방법
- 5. Django 관리자의 경우 마지막 객체 유형 삭제를 방지하는 방법
- 6. NERDTree 버퍼 삭제를 방지하는 방법은 무엇입니까? (또는 다시로드하십시오)
- 7. 아포스트로피가 제거되는 것을 방지하는 방법 PHP MySQL
- 8. 계단식 삭제를 끄는 방법?
- 9. 소프트 삭제를 구현하는 방법
- 10. SQL에서 삭제를 취소하는 방법
- 11. 양방향 연결에 대한 계단식 삭제를 방지하는 방법은 무엇입니까?
- 12. HTML 1 MySQL 데이터베이스에서 삭제를 클릭하십시오
- 13. MySQL Workbench에서 계단식 삭제를 설정하는 방법은 무엇입니까?
- 14. MySql - SQL - 단일 쿼리에서 중복 업데이트를 방지하는 방법
- 15. Subversion에서 파일 삭제를 마스크하는 방법
- 16. 안드로이드에서 SMS 삭제를 감지하는 방법?
- 17. 관련 ForeignKey 인스턴스 삭제를 방지하려면 어떻게해야합니까?
- 18. MySQL - LOAD DATA INFILE을 사용하여 중복을 방지하는 방법
- 19. 기본 값이 MySQL 데이터베이스에 제출되는 행을 방지하는 방법
- 20. PHP/MySQL 사이트에서 동시 사용자 로그인을 방지하는 방법?
- 21. 파이썬에서 null을 방지하는 방법
- 22. 안드로이드에서 블로킹을 방지하는 방법 (
- 23. TFS에서 병합을 방지하는 방법
- 24. 무한 재귀를 방지하는 방법
- 25. IndexError를 방지하는 방법
- 26. 사이트에서 스크래핑을 방지하는 방법
- 27. Asp.NET에서 XSS를 방지하는 방법
- 28. VS2008의 점을 방지하는 방법
- 29. 이 오류를 방지하는 방법
- 30. 동시 UIGestureRecognizers를 방지하는 방법
열을 인덱싱 할 수 없다면 나에게 어떤 의미가 있습니까? InnoDB와 Archive를 섞어도 되나요? – StackOverflowNewbie
그건 그렇고, 참조 무결성을 강화할 수 있도록 InnoDB를 사용했습니다. 아카이브를 사용하면 어떻게됩니까? – StackOverflowNewbie
아카이브에 "행 캐시"가 없습니다. 이게 무슨 뜻입니까? 또한, "삽입하는 동안 SELECT 문을 많이 사용하면 대량 또는 지연된 삽입 만 사용하지 않는 한 압축을 악화시킬 수 있습니다"라는 메시지가 표시됩니다. – StackOverflowNewbie