>  기사  >  데이터 베이스  >  하나의 기사에서 mysql 뷰에 대한 자세한 설명

하나의 기사에서 mysql 뷰에 대한 자세한 설명

王林
王林앞으로
2020-01-22 19:56:582136검색

하나의 기사에서 mysql 뷰에 대한 자세한 설명

mysql 뷰 개념

뷰 자체는 가상 테이블이며 어떠한 데이터도 저장하지 않습니다. SQL 문을 사용하여 뷰에 액세스할 때 얻은 데이터는 MySQL에 의해 다른 테이블에서 생성되며 뷰와 테이블은 동일한 네임스페이스에 있습니다. 쿼리 데이터 보기는 일부 데이터와 구조를 숨기고 사용자가 자신의 권한 내에서만 데이터를 볼 수 있도록 허용하여 복잡한 쿼리를 쉽게 이해하고 사용할 수 있도록 해줍니다.

View Usage

다음은 사용자 및 주문관리 기반의 데모뷰 기본 사용법입니다. (온라인 학습 동영상 튜토리얼 공유: mysql 동영상 튜토리얼)

기본 테이블 구조

CREATE TABLE v01_user (    
id INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  user_name VARCHAR(20) DEFAULT NULL COMMENT '用户名',
    phone VARCHAR(20) DEFAULT NULL COMMENT '手机号',
    pass_word VARCHAR(64) DEFAULT NULL COMMENT '密码',
    card_id VARCHAR(18) DEFAULT NULL COMMENT '身份证ID',
    pay_card VARCHAR(25) DEFAULT NULL COMMENT '卡号',
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '用户表';
CREATE TABLE v02_order (    
id INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    user_id INT(11) NOT NULL COMMENT '用户ID',
    order_no VARCHAR(32) DEFAULT NULL COMMENT '订单编号',
    good_name VARCHAR(60) DEFAULT NULL COMMENT '商品名称',
    good_id INT(11) DEFAULT NULL COMMENT '商品ID',    
    num INT(11) DEFAULT NULL COMMENT '购买数量',
    total_price DECIMAL(10,2) DEFAULT NULL COMMENT '总价格',
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '订单表';

기본 구문

CREATE OR REPLACE VIEW view_name 
AS select_statement

참고: 테이블과 뷰는 데이터베이스에서 동일한 네임스페이스를 공유하므로 데이터베이스는 동일한 이름을 가진 테이블과 뷰가 포함되어 있습니다.

사용자 순서 보기

CREATE OR REPLACE VIEW user_order_view AS SELECT
    t1.id,t1.user_name,t2.order_no,t2.good_id,
    t2.good_name,t2.num,t2.total_price
FROM v01_user t1
LEFT JOIN v02_order t2 ON t2.user_id = t1.id;

통화 보기

이는 기본적으로 MySQL 테이블 쿼리와 동일하며 다양한 쿼리 조건을 사용할 수 있습니다.

SELECT * FROM user_order_view WHERE user_name='Cicada';
查看视图
SHOW CREATE VIEW user_order_view ;
修改视图
ALTER VIEW view_name AS select_statement ;
删除视图
DROP VIEW [IF EXISTS] view_name ;

View update

지정된 조건이 허용되면 뷰에서 작업하여 데이터를 업데이트, 삭제하거나 쓸 수도 있고, 그런 다음 뷰에 포함된 관련 테이블을 업데이트할 수도 있습니다.

UPDATE user_order_view SET user_name='smile' WHERE id='1';

여기서는 뷰에서 업데이트 작업을 수행하여 v01_user 테이블 데이터를 업데이트합니다. 집계 함수, 그룹화 등의 특수 작업을 사용하여 뷰를 정의한 경우 업데이트할 수 없습니다. MySQL은 뷰에 대한 트리거 생성을 지원하지 않습니다.

뷰 구현

1. 임시 테이블 알고리즘

서버는 뷰 쿼리 SQL 데이터를 임시 테이블에 저장합니다. 이는 뷰 필드 구조와 일치합니다. SQL 쿼리 최적화. 약간 더 많은 양의 데이터가 성능에 심각한 영향을 미칩니다. 뷰가 원본 테이블과 일대일 매핑 관계를 가질 수 없는 경우 임시 테이블이 생성됩니다. 이는 뷰가 매우 단순하지도, 심지어 매우 복잡한 기능도 아님을 보여줍니다.

2. 병합 알고리즘

서버는 뷰에 사용된 테이블을 기반으로 쿼리를 실행하고 최종적으로 쿼리 구조를 병합하여 클라이언트에 반환합니다.

3. 차이 방법

다음 쿼리문을 실행하여 실행 성능 매개변수를 분석합니다.

EXPLAIN SELECT * FROM user_order_view ;

쿼리 결과에서 select_type 필드를 확인하세요. DERIVED이면 임시 테이블이 사용된다는 의미입니다. 여기서 SQL 실행 분석의 구문은 나중에 최적화 부분에서 자세히 설명하도록 하겠습니다.

Notes

1. 성능 문제

MySQL은 뷰 사용시 쿼리 성능 문제가 많이 발생할 수 있으니 주의해서 사용하시고, 테스트해 보시길 권해드립니다. 여러 각도에서.

2. 특수 사용법

뷰 기반 쿼리는 테이블 구조의 일부를 수정할 수 있습니다. 필드가 뷰에서 사용되지 않는 한 뷰의 쿼리에는 영향을 미치지 않습니다.

추천 관련 기사 및 튜토리얼: mysql 튜토리얼

위 내용은 하나의 기사에서 mysql 뷰에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제