[SQL] 어떻게 읽기 전용으로 MySQL의 행을 설정하는 방법?
SQL어떻게 읽기 전용으로 MySQL의 행을 설정하는 방법?
나는 (지금까지) 변경할 수 싶지 않아 테이블의 행이있다.
그것은 읽기 전용 그래서 어떤 방법으로 갱신 할 수없는에 MySQL의 행을 설정할 수 있습니까? 그렇다면, 어떻게?
그렇지 않다면, 그것은 변경 될 수 없도록 그 행의 열 중 하나의 고정 값을 설정하는 것이 가능하다? 그렇다면, 어떻게?
감사.
해결법
-
==============================
1.이것은 아마도 데이터 저장 층에 속하지 않는 비즈니스 로직을, 될 가능성이 높습니다. 그러나, 그럼에도 불구하고 트리거를 사용하여 수행 할 수 있습니다.
이것은 아마도 데이터 저장 층에 속하지 않는 비즈니스 로직을, 될 가능성이 높습니다. 그러나, 그럼에도 불구하고 트리거를 사용하여 수행 할 수 있습니다.
당신은 "고정"레코드를 업데이트하는 것입니다 경우 오류를 발생시키는 BEFORE UPDATE 트리거를 만들 수 있습니다; 작업이 수행되기 전에 오류가 발생하기 때문에, MySQL은 그 진행을 중단. 당신은 또한 삭제되는 기록을 방지하려면 삭제하기 전에 비슷한 트리거를 작성해야합니다 것입니다.
레코드가 "고정"되어 있는지 여부를 확인하려면, 당신은 부울 잠겨 열을 만들 수 있습니다 :
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와;
당신이 절대적으로 저장이 논리를 배치해야합니다 계층과 이외의 다른 수단을 통해 고정 기록을 확인할 수없는 경우 다시, 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 ;
그러나 이것은 절대적으로 끔찍한이고 나는 가능한 한 그것을 피하기 위해 거의 모든 것을 할 것입니다.
from https://stackoverflow.com/questions/10502298/how-to-set-a-mysql-row-to-read-only by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 당신은 SQL의 경우 - 당시 다른 논리를 가질 수 있습니까? [복제] (0) | 2020.05.09 |
---|---|
[SQL] ORACLE에서 슬립 기능 (0) | 2020.05.09 |
[SQL] 속으로 쿼리 구문을 교체 (0) | 2020.05.09 |
[SQL] 항목을 스캐 폴딩 할 수없는 응용 프로그램 (0) | 2020.05.09 |
[SQL] MySQL은 NULL로 설정 값 (0) | 2020.05.09 |