뷰의 업데이트 가능성은 뷰의 쿼리 정의와 관련이 있습니다.
1. 다음 키워드가 포함된 SQL 문: 집계 함수( 합계, 최소, 최대, 개수), 고유, 그룹 by, have, Union 또는 의논모두
2. 끊임없는 시선
3.선택 하위 쿼리 포함
4.join
5.업데이트할 수 없는 시도에서
6.where 절의 하위 쿼리는 from 절 테이블을 참조합니다
WITH [CASCADED | LOCAL] CHECK OPTION은 뷰 업데이트 조건을 결정합니다.
LOCAL은 이 보기의 조건이 충족되는 한 업데이트할 수 있음을 의미합니다.
계단식
그런 다음 이 보기에 대한 모든 보기 조건을 충족해야 업데이트할 수 있습니다.
로컬인지 캐스케이드인지 확실하지 않은 경우 기본값은 캐스케이드
이해를 돕기 위해 예를 들어 설명하겠습니다
t3 테이블의 데이터 구조는 다음과 같은 것으로 알려져 있다.
-- 创建视图 ldq_t1 CREATE VIEW ldq_t1 AS SELECT * FROM t3 WHERE id1 > 10 WITH CHECK OPTION ; -- 查询ldq_t1中的所有结果 SELECT * FROM ldq_t1; -- 创建视图 ldq_t2 CREATE VIEW ldq_t2 AS SELECT * FROM ldq_t1 WHERE id1 < 30 WITH LOCAL CHECK OPTION ; -- 创建视图 ldq_t3 CREATE VIEW ldq_t3 AS SELECT * FROM ldq_t1 WHERE id1 < 30 WITH CHECK OPTION ; -- 更新视图ldq_t2(只有ldq_t2中存在的数据都可以更新) SELECT * FROM ldq_t2; -- 查看ldq_t2当前记录 UPDATE ldq_t2 SET id1=5 WHERE id2=22; -- 可以执行成功 UPDATE ldq_t2 SET id1=35 WHERE id2=22; -- 将会报错CHECK OPTION failed(因为执行该语句之后,id2=22记录将从ldq_t2消失) UPDATE ldq_t2 SET id1=28 WHERE id2=22; -- 可以执行成功 -- 更新ldq_t3 SELECT * FROM ldq_t3; UPDATE ldq_t3 SET id1=5 WHERE id2=22; -- 将会报错CHECK OPTION failed(因为数据更新之后,必须还要保证其仍然在ldq_t3和ldq_t1之中, 该语句执行后id2=22记录将从ldq_t1消失) UPDATE ldq_t3 SET id1=15 WHERE id2=22; -- 能够执行成功 UPDATE ldq_t3 SET id1=35 WHERE id2=22; -- 将会报错CHECK OPTION failed(因为执行该语句之后,id2=22记录将从ldq_t3消失) DELETE FROM ldq_t3 WHERE id2=22; -- 执行成功
요약: WITH
LOCAL CHECK OPTION으로 수정된 보기를 업데이트하는 경우 업데이트된 레코드가 보기에 여전히 존재하는지 확인하기만 하면 되며 오류가 보고되지 않습니다. WITH CASCADED CHECK OPTION이 보기를 수정하는 경우 업데이트된 레코드가 보기 및 보기와 관련된 보기에 여전히 존재하는지 확인해야 합니다.
위 내용은 mysql의 뷰 업데이트 상세 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!