2010-12-17 12 views
5

Tengo una columna y me gustaría editar algunas de sus filas. El problema es que la tabla es una vista, así que no puedo editar las filas. ¿Cómo procedo a resolver este problema?Editar una vista de solo lectura

Respuesta

2

Si se trata de una vista, no es una tabla. Los datos para la vista se extraen de una o más tablas. Edite la tabla subyacente y cuando examine los datos en la vista, reflejará los cambios que realizó.

0

Una vista SQL es una tabla virtual, que se basa en la consulta SQL SELECT. Esencialmente, una vista está muy cerca de una tabla de base de datos real (tiene columnas y filas al igual que una tabla normal), excepto por el hecho de que las tablas reales almacenan datos, mientras que las vistas no. Los datos de la vista se generan dinámicamente cuando se hace referencia a la vista. Una vista hace referencia a una o más tablas de base de datos existentes u otras vistas. En efecto, cada vista es un filtro de los datos de tabla a los que se hace referencia y este filtro puede restringir tanto las columnas como las filas de las tablas a las que se hace referencia.

Si desea modificar los datos en su tabla, no puede hacerlo con una vista. Las vistas SQL son siempre de solo lectura. Si desea modificar su tabla fuera de la Vista, utilice algo como una declaración UPDATE o ALTER TABLE.

+3

Las vistas no son ciertamente * siempre * de sólo lectura en la mayoría de las bases de datos (aunque eso es cierto en SQLite) . La mayoría de las bases de datos admiten la edición de vistas no agregadas de una sola tabla. Algunas bases de datos también admiten la edición de vistas de varias tablas. –

+0

Gracias por señalar eso. Puede actualizar los datos en una vista siempre que tenga los privilegios adecuados para las tablas subyacentes. Sin embargo, las vistas en SQLite son siempre de solo lectura. –

3

SQLite no le permite actualizar las vistas. Pero hace permite triggers en las vistas. Entonces puede escribir un disparador INSTEAD OF UPDATE que realice las modificaciones apropiadas en la tabla subyacente.

3

Como señaló dan04, puede usar activadores para actualizar las vistas (como en la mayoría de las otras bases de datos). Para SQLite, consulte http://www.sqlite.org/lang_createtrigger.html#instead_of_trigger

Ejemplo con una vista llamada "myview", que contiene una tabla "my_t2"

CREATE TRIGGER myview_update INSTEAD OF UPDATE ON myview 
BEGIN 
    UPDATE my_t2 SET field1 = new.field1, field2 = new.field2 WHERE my_t2.key = old.key; 
END 
Cuestiones relacionadas