MySQL 행을 읽기 전용으로 설정하는 방법은 무엇입니까?
테이블에 변경하고 싶지 않은 행이 있습니다.
MySQL 행을 READ-ONLY로 설정하여 어떤 방법으로도 업데이트할 수 없습니까?만약 그렇다면, 어떻게?
그렇지 않다면 해당 행의 열 중 하나에 영구적인 값을 설정하여 변경할 수 없습니까?만약 그렇다면, 어떻게?
감사해요.
이는 비즈니스 논리일 가능성이 높으며, 데이터 스토리지 계층에 속하지 않을 수도 있습니다.그러나 그럼에도 불구하고 트리거를 사용하여 수행할 수 있습니다.
를 생성할 수 있습니다.BEFORE UPDATE
"잠겨진" 레코드가 업데이트되려고 할 경우 오류를 발생시키는 트리거입니다. 작업이 수행되기 전에 오류가 발생하므로 MySQL은 해당 레코드를 더 이상 진행하지 않습니다.레코드가 삭제되지 않도록 하려면 유사한 트리거를 만들어야 합니다.BEFORE DELETE
.
레코드가 "잠겼는지" 확인하려면 부울을 생성할 수 있습니다.locked
열:
ALTER TABLE my_table ADD COLUMN locked BOOLEAN NOT NULL DEFAULT FALSE;
DELIMITER ;;
CREATE TRIGGER foo_upd BEFORE UPDATE ON my_table FOR EACH ROW
IF OLD.locked THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Cannot update locked record';
END IF;;
CREATE TRIGGER foo_del BEFORE DELETE ON my_table FOR EACH ROW
IF OLD.locked THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Cannot delete locked record';
END IF;;
DELIMITER ;
UPDATE my_table SET locked = TRUE WHERE ...;
MySQL 5.5에 소개된 참고 사항입니다.이전 버전에서는 MySQL에서 오류가 발생하는 몇 가지 잘못된 작업을 수행해야 합니다.나는 종종 존재하지 않는 절차를 호출합니다. 예를 들어,CALL raise_error;
이 테이블에 추가 열을 만들 수는 없지만 열 중 하나에 행에 고유 ID가 있는데 이 시나리오에 대해 어떻게 수행해야 합니까?
다시 말하지만, 반드시 이 논리를 스토리지 계층에 배치해야 하고 PK 이외의 다른 수단을 통해 잠긴 레코드를 식별할 수 없는 경우에는 테스트를 트리거에 하드 코드화할 수 있습니다. 예를 들어 레코드를 다음과 같이 "잠금"할 수 있습니다.id_column = 1234
:
DELIMITER ;;
CREATE TRIGGER foo_upd BEFORE UPDATE ON my_table FOR EACH ROW
IF OLD.id_column <=> 1234 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Cannot update locked record';
END IF;;
CREATE TRIGGER foo_del BEFORE DELETE ON my_table FOR EACH ROW
IF OLD.id_column <=> 1234 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Cannot delete locked record';
END IF;;
DELIMITER ;
하지만 이것은 절대적으로 끔찍하고 저는 가능할 때마다 그것을 피하기 위해 거의 모든 것을 할 것입니다.
언급URL : https://stackoverflow.com/questions/10502298/how-to-set-a-mysql-row-to-read-only
'programing' 카테고리의 다른 글
점 확대(척도 및 변환 사용) (0) | 2023.09.28 |
---|---|
mySQL - 하나의 필드에서 큰 키워드 목록의 컨텍스트 찾기 (0) | 2023.09.28 |
plsql 프로시저에서 sql 스크립트를 실행하는 방법 (0) | 2023.09.23 |
Galera 클러스터에서 테스트할 비주성분을 생성하는 방법 (0) | 2023.09.23 |
WP Rest API를 사용하여 WordPress를 백엔드로 React 배치 (0) | 2023.09.23 |