>  기사  >  데이터 베이스  >  mysql의 뷰 업데이트에 대한 자세한 설명

mysql의 뷰 업데이트에 대한 자세한 설명

黄舟
黄舟원래의
2017-03-01 13:57:161831검색

뷰의 업데이트 가능성은 뷰의 쿼리 정의와 관련이 있습니다.

1. MySQL에서 업데이트할 수 없게 만들려는 사람들이 있나요? 다음 유형의 뷰는 업데이트할 수 없습니다.

1. 다음 키워드가 포함된 SQL 문: 집계 함수( 합계, 최소, 최대, 개수), 고유, 그룹 by, have, Union 또는 의논모두

2. 끊임없는 시선

3.선택 하위 쿼리 포함

4.join

5.업데이트할 수 없는 시도에서

6.where 절의 하위 쿼리는 from 절 테이블을 참조합니다

2. 업데이트조건 제한 보기

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)를 참고해주세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.