복붙노트

[SQL] 그것은 MySQL의 뷰에 데이터를 삽입 할 수 있습니까?

SQL

그것은 MySQL의 뷰에 데이터를 삽입 할 수 있습니까?

나는 4 개 테이블 MySQL의보기를했다. 그것은보기에 데이터를 삽입하고 MySQL은 자동으로 올바른 테이블에 데이터를 전달해야 할 수 있습니까?

해결법

  1. ==============================

    1.당신이 내부 사용하는 것은 조인하고보기는 기본 테이블의 모든 열이 포함 된 경우, 다음 뷰는 업데이트 할 수 있습니다. 그것은 하나의 테이블에 삽입하는 경우에는 여러 개의 테이블을 업데이트 할 수있는 뷰를 들어, INSERT는 작업 할 수 있습니다. 여러 INSERT 문으로 삽입 작업을 분할 할 수있다.

    당신이 내부 사용하는 것은 조인하고보기는 기본 테이블의 모든 열이 포함 된 경우, 다음 뷰는 업데이트 할 수 있습니다. 그것은 하나의 테이블에 삽입하는 경우에는 여러 개의 테이블을 업데이트 할 수있는 뷰를 들어, INSERT는 작업 할 수 있습니다. 여러 INSERT 문으로 삽입 작업을 분할 할 수있다.

    당신은 주제에 대한 자세한 내용은 다음 문서를 체크 아웃 할 수 있습니다 :

    다음 예를 살펴 보겠습니다 :

    CREATE TABLE table_a (id int, value int);
    CREATE TABLE table_b (id int, ta_id int, value int);
    
    INSERT INTO table_a VALUES (1, 10);
    INSERT INTO table_a VALUES (2, 20);
    INSERT INTO table_a VALUES (3, 30);
    
    INSERT INTO table_b VALUES (1, 1, 100);
    INSERT INTO table_b VALUES (2, 1, 200);
    INSERT INTO table_b VALUES (3, 2, 300);
    INSERT INTO table_b VALUES (4, 2, 400);
    

    이제 뷰를 만들 수 있습니다 :

    CREATE VIEW v AS 
        SELECT      a.id a_id, b.id b_id, b.ta_id, a.value v1, b.value v2
        FROM        table_a a
        INNER JOIN  table_b b ON (b.ta_id = a.id);
    
    SELECT * FROM v;
    +------+------+-------+------+------+
    | a_id | b_id | ta_id | v1   | v2   |
    +------+------+-------+------+------+
    |    1 |    1 |     1 |   10 |  100 |
    |    1 |    2 |     1 |   10 |  200 |
    |    2 |    3 |     2 |   20 |  300 |
    |    2 |    4 |     2 |   20 |  400 |
    +------+------+-------+------+------+
    4 rows in set (0.00 sec)
    

    다음 INSERT가 실패합니다 :

    INSERT INTO v (a_id, b_id, ta_id, v1, v2) VALUES (3, 5, 3, 30, 500);
    -- ERROR 1393 (HY000): Can not modify more than one base table through a join view 
    

    그러나 우리는 두 가지 작업으로 분할 할 수 있습니다 :

    INSERT INTO v (a_id, v1) VALUES (3, 30);
    -- Query OK, 1 row affected (0.00 sec)
    INSERT INTO v (b_id, ta_id, v2) VALUES (5, 3, 500);
    -- Query OK, 1 row affected (0.00 sec)
    

    결과:

    SELECT * FROM v;
    +------+------+-------+------+------+
    | a_id | b_id | ta_id | v1   | v2   |
    +------+------+-------+------+------+
    |    1 |    1 |     1 |   10 |  100 |
    |    1 |    2 |     1 |   10 |  200 |
    |    2 |    3 |     2 |   20 |  300 |
    |    2 |    4 |     2 |   20 |  400 |
    |    3 |    5 |     3 |   30 |  500 |
    +------+------+-------+------+------+
    6 rows in set (0.00 sec)
    
  2. from https://stackoverflow.com/questions/3825941/is-it-possible-to-insert-data-into-a-mysql-view by cc-by-sa and MIT license