vistas vista varias una tablas sintaxis parametros create crear con sql mysql updatable-views

varias - ¿Es posible insertar datos en una vista de MySQL?



vistas en mysql pdf (1)

Hice una vista de MySQL con 4 tablas. ¿Es posible insertar datos en la vista y hacer que MySQL pase automáticamente los datos a la tabla correcta?


Si está utilizando combinaciones internas, y su vista contiene todas las columnas en las tablas base, entonces su vista podría ser actualizable. Sin embargo, para una vista actualizable de múltiples tablas, INSERT puede funcionar si se inserta en una sola tabla. Puede dividir su operación de inserción en múltiples INSERT .

Es posible que desee consultar el siguiente artículo para obtener más información sobre el tema:

Considere el siguiente ejemplo:

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);

Ahora, creemos una vista:

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)

El siguiente INSERT falla:

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

Pero podemos dividirlo en dos operaciones:

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)

Resultado:

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)