Ver índice
PDO – Modificaciones SQLite / MySQL

        Ocultar índice  

   Índice de contenidos
   Instalación en Windows
   Instalación en Ubuntu
   Servidores seguros
   Páginas dinámicas
   Sintaxis básica
   Operaciones
   Arrays
   Formatos de presentación
   Operadores
   Bucles
   Extraer y ord. información
   Funciones
   Ficheros externos
   Imágenes dinámicas
   Gestión de directorios
   Cookies y sesiones
   Clases y objetos
   Ficheros en formato PDF
   Bases de datos MySQL
   PHP y XML
   PDO - Bases SQLite / MySQL
   MySQL a traves de misqli
   Algo de JavaScript y AJAX


Sintaxis SQLite de modificación de registros

Las sentencias SQLite que permiten la modificación de registros en las tablas son prácticamente iguales a las comentadas para MySQL e igual que aquella existen cláusulas obligatorias y opcionales.

El orden en que deben estar indicadas ha de seguir la misma secuencia en la que están descritas aquí.

Modificar un campo en todos los registros de una tabla

La sentencia SQLite, que permite modificar uno o varios campos en todos los registros de una tabla, es la siguiente:

UPDATE tabla SET campo1=valor1, campo2=valor2

  ¡Cuidado!  

Hay que tener muy presente que con esta sentencia –en la que no aparece WHERE– se modificarán TODOS LOS REGISTROS DE LA TABLA y por lo tanto los campos modificados tendrán el mismo valor en todos los registros.

Algunas consideraciones sobre la sintaxis

Siempre que manejes PHP y SQLite debes tener muy presente todo lo ya comentado para el caso de MySQL que repetimos aquí para mayor comodidad de lectura.

En este primer ejemplo, hemos incluido una actualización de tablas que pondrá 24 puntos de calificación en la primera de las pruebas a todos los aspirantes a astronautas de nuestro ejemplo. Es un caso de actualización sin la condición WHERE y tiene el código comentado.

Ejecutar la modificación Ver código fuente

Tal como puedes ver, en el ejemplo utilizamos una preparación declarada (prepare statement) como procedimiento alternativo para modificar la calificación anterior y pasar a SIETE puntos la nota en todos los registros.

<?php
/* incluimos la funcion conecta y creamos objetos de ambas bases de datos */
include('conecta.inc.php');
$dbMySQL= conecta('ejemploSQLite','MySQL');
$dbSQLite= conecta('ejemploSQLite','SQLite');

/* escribimos la consulta que actualizará a 7 el campo Puntos de la tabla prueba1 */
$consulta = "UPDATE prueba1 SET Puntos=7";
/*preparamos la consulta de la tabla SQLite*/
$actualiza = $dbSQLite->prepare($consulta);
/* aplicamos el método execute al objeto creado por el método anterior */
$actualiza->execute(); 
/* leemos el numero de registros afectados por la ejecución de la sentencia */
$numero_resultados = $actualiza->rowCount();
/* visualizamos la información del resultado */
print("Se han actualizado $numero_resultados registros");

 /* repetimos exactamente el proceso anterior preparando un objeto MySQL*/
$actualiza = $dbMySQL->prepare($consulta);
$actualiza->execute();
$numero_resultados = $actualiza->rowCount();

print("Se han actualizado $numero_resultados registros");
?>
Ejecutar la modificación Ver código fuente

Selección y modificación de un solo registro

Es una de las opciones más habituales. Es el caso en el que –mediante un formulario– asignamos una condición a WHERE y simultáneamente asignamos los nuevos valor del campo o campos elegidos. Requiere la siguiente sintaxis:

UPDATE tabla SET campo1=valor1, campo2=valor2 WHERE condición

La condición es fundamental en esta opción y normalmente aludirá a un campo índice (clave principal o única), de modo que sea un solo registro el que cumpla la condición. Podría ser el caso, en nuestro ejemplo, del campo DNI que por su unicidad garantizaría que la modificación solamente va a afectar a uno solo de los registros.

El ejemplo siguiente nos permitirá hacer modificaciones de este tipo en la tabla prueba2. Observa el código fuente y verás hacemos una primera consulta utilizando prepare y execute y que la posterior inclusión de la modificación la efectuamos utilizando query.

Ejecutar la modificacción Ver código «formulario» Ver código «script»

Modificación simúltanea de un campo en cualquiera de los registros

Aquí tienes un ejemplo que permite visualizar el valor actual de todas las puntuaciones de la prueba 1 de los astronautas así como sus nombres y apellidos y DNI y en la cual se pueden modificar ninguno, uno, varios o todos los valores y posteriormente actualizarlos todos con los nuevos valores.

En este caso hemos separado los scripts buscando una mejor visualización de los resultados. Los scripts, tal como podrás ver si observas los código fuente, son practicamente idénticos. la única y lógica diferencia es que en el primer caso creamos objetos SQLite y en el segundo MySQL.

Ejecutar la modificacción en SQLite Ver código «formulario» Ver código «script»

Ejecutar la modificacción en MySQL Ver código «formulario» Ver código «script»

Sintaxis SQLite para borrado de registros

La sintaxis SQLite para las sentencia de borrado de registros de una tabla puede contener las siguientes cláusulas que, al igual que ocurría en casos anteriores, pueden tener categoría de obligatorias u opcionales. La secuencia en la que deben estar indicadas en la sentencia es idéntica al orden en que están descritas aquí.

Borrar todos los registros de una tabla

    La sentencia SQLite que permite borrar todos los registros de una tabla es la siguiente:
DELETE FROM tabla

Ten muy presente que con esta sentencia -en la que no aparece WHERE- se BORRARÁN TODOS LOS REGISTROS DE LA TABLA.

Respecto a otras posibles opciones, no difiere en nada de lo indicado en la página anterior. Simplemente habría que sustituir en aquellos script UPDATE por DELETE. Borrar un registro no es otra cosa que un caso particular de modificación.

Integridad referencial tras el borrado de una tabla

¿Recuerdas el ejemplo de las pruebas de selección de astronautas? ¿Recuerdas que las tres tablas de puntuaciones habían sido creadas a partir de la tabla de datos de los aspirantes? ¿Qué ocurriría si borrásemos uno o varios registros de una de ellas? ¿Qué ocurriría se después de crear esas tablas añadiésemos nuevos aspirantes a la lista de candidatos?

Es obvio que si no hacemos algo para evitarlo se perdería la integridad referencial –la relación uno a uno– entre los registros de esas tablas.

Ocurriría que no todos los individuos que están incluidos en una de esas tablas lo estarían en las demás y por tanto, al ejecutar consultas o modificaciones posteriores correríamos el riesgo de que se produjeran errores.

Esa situación es fácilmente evitable modificando ligeramente los scripts con los que se realizan los procesos de altas y bajas. Bastaría con añadirles algunas sentencias que cada vez que se efectúa un alta o baja en el fichero de datos personales efectúen el mismo proceso en todos los demás ficheros relacionados con aquel.

Aquí tienes comentado el código fuente de la modificación añadida al script que registra los nuevos aspirantes en el fichero de altas de la tabla demo4. Con esta modificación se actualizarían automáticamente los ficheros prueba1, prueba2 y prueba3 cada vez que se añadiera un nuevo aspirante.

El formulario no requiere ninguna modificación, Sólo es necesario realizar los cambios en el script que realiza la inserción.

Añadir nuevo aspirante Ver código «formulario» Ver código «script»

Hecho este inciso continuaremos con la referencia al borrado de registros.

En este ejemplo, tienes el código fuente de un script que realiza el borrado de un registo –mediante un formulario en el que se inserta el DNI– tanto en la tabla demo4 como demodat1, demodat2 y demodat3 manteniendo la integridad referencial entre los cuatro ficheros.

Eliminar un aspirante Ver código «formulario» Ver código «script»

Borrar registros seleccionándolos de una lista

En el ejemplo siguiente tienes el código para utilizar la cláusula WHERE en un proceso de borrado de registros que presenta un formulario que contiene una lista con todos los registros actuales y una casilla de verificación por cada uno.

Al marcar las casillas y enviar el formulario el script que recibe los datos procede al borrado de todos los registros marcados en todas la tablas afectadas.

Borrar aspirantes MySQL Ver código «formulario» Ver código «script»

Borrar aspirantes SQLite Ver código «formulario» Ver código «script»

Transacciones en tablas SQLite

Coméntabamos al tratar las tablas InnoDB en los temas relativos a MySQL que uno de los riesgos que se plantean en la gestión de bases de datos es que pueda producirse una interrupción del proceso mientras se está actualizando una o varias tablas.

Decíamos también que las transacciones evitan este tipo de situaciones ya que los datos se registran de manera provisional y no se consolidan hasta que una instrucción confirme que esas anotaciones tienen carácter definitivo.

Sintaxis de las transacciones

Existen tres sentencias muy similares a las de MySQL para gestionar las transacciones. Son las siguientes:

$objeto->query("BEGIN")

Indica a SQLite que en ese punto comienza una transacción. Todas las sentencias que se ejecuten a partir de ella tendrán carácter provisional y no se concretarán de forma efectiva hasta que encuentre una sentencia que las confirme.

$objeto->query("ROLLBACK")

Mediante esta sentencia advertimos a SQLite que finaliza la transacción pero que no debe hacerse efectiva ninguna de las modificaciones incluidas en ella.

$objeto->query("COMMIT")

Esta sentencia advierte a SQLite que ha finalizado la transacción y que SÍ debe hacer efectivos todos los cambios incluidos en ella.

Ejecutar ejemplo Ver código fuente

Modificación de estructuras de tablas SQLite

Las opciones de modificación de estructuras de tablas SQLite se limitan a los tres tipos de actuaciones siguientes.

Borrar una tabla

Las sentencias MySQL que permiten borrar una tabla son las siguientes:

DROP TABLE nombre de la tabla
DROP TABLE IF EXISTS nombre de la tabla

Las diferencia entre ambas radica en que usando la segunda no se generaría ningún error en el caso de que tratáramos de borrar una tabla inexistente.

Renombar una tabla

SQLite permite cambiar el nombre de una tabla haciendo uso de la sentencia siguiente:

ALTER TABLE nombre_actual RENAME TO nuevo_nombre

cambiaría el nombre_actual por el nuevo_nombre.

Agregar un nuevo campo

SQLite permite agregar un nuevo campo a una tabla ya existente mediante la sentencia:

ALTER TABLE tabla ADD COLUMN nuevo_campo

agrega el nuevo_campo a la tabla.

Borrar o modificar un campo

Cuando se pretende borrar un campo de una tabla o modificar su tipo SQLite no dispone de una sentencia específica que permita esas transformaciones. Para hacerlo deberíamos recurrir a un proceso un poco más complejo cuyos diferentes pasos son los siguientes: