[Ir al menú de PHP]
Añadir registros a una tabla

Manejando índices

Es muy frecuente la utilización de índices en las bases de datos. Pero... ¿qué son los índices?.. ¿para qué sirven?.

Si nos planteamos la utilidad del índice (o los índices) de un libro seguramente la respuesta sería: La funcionalidad de los índices en la bases de datos es exactamente la misma.

Tipos de índices

Si seguimos con el ejemplo del libro no nos resultará difícil observar que caben las posibilidad de que tenga: Algunos libros solo contienen un indice de contenidos. Sin embargo no es infrecuente encontrar libros en los que ese índice de contenidos se complementa con otros: analíticos, onomásticos, etc. etc.

Cuando existe un solo índice es obvio que puede decirse de él que es único y cuando existen varios podemos decir que el índice de contenidos es el índice principal y los demás son índices sin más o índices auxiliares.

Coincidirás conmigo en que el indice de contenidos de un libro de texto solo existe una referencia al Tema XIII en la que puede decir: Tema XIII... página 314.

También coincidirás conmigo en que si además de lo anterior dijera: Tema XIII... página 714 nos encontraríamos en una situación confusa que nos obligaría a preguntarnos: ¿donde está el Tema XIII? ¿En la página 314? ¿En la 714? ¿En ambas?.

Es por eso que las tablas de las bases de datos no admiten nunca valores duplicados ni en los índices únicos ni tampoco en los índices principales.

Los índices auxiliares se comportan de una forma distinta. El índice onomástico de un libro puede hacer referencia a varias páginas, puede tener duplicados.

P. ejemplo: en un manual de Word puede existir un índice onomástico en el que se asocie la palabra macros con las páginas 37, 234 y 832 siempre que esas páginas existan contenidos que aludan a la palabra macro.

Es por eso que las tablas de las bases de datos también admiten duplicados cuando se trata de índices auxiliares.

Sintaxis de la definición de índices MySQL

Al crear una tabla o al modificarla igual que se pueden insertar campos también se pueden añadir índices.

La sintaxis (dentro de la sentencia MySQL que crea o modifica una tabla) es la siguiente:

PRIMARY KEY(campo)

donde campo es el nombre del campo que se establece como índice principal de la tabla

El nombre del campo no se pone entrecomillado y PRIMARY KEY(campo) se añade dentro de la sentencia CREATE como si se tratara de un campo más, delimitado por comas salvo que estuviera al final de la sentencia CREATE (inmediatamente antes de cerrar paréntesis) en cuyo caso se omitiría la coma final.

En el código fuente de la creación de la tabla que tienes a la derecha, puedes ver un ejemplo práctico de la sintaxis.

UNIQUE(campo)

Exactamente igual a la anterior salvo una diferencia: UNIQUE no permite la creación de más índices mientras que PRIMARY KEY si lo permite.

INDEX nombre (campo)

Con esta sintaxis se crea un indice secundario al que debemos asignarle un nombre (la posibilidad de que existan varios obliga a identificarlos por ese nombre) y -como en los casos anteriores- el campo que va a ser utilizado como índice.

INDEX nombre (campo(n))

Es un caso particular del anterior utilizable solo en el caso de que el campo índice sea tipo CHAR y VARCHAR que permite indexar por los n primeros caracteres de esas cadenas.

El valor de n ha de ser:
            n <= 256
dado que el el tamaño máximo de un índice esta limitado en MySQL a 256 bytes.

Otra limitación de MySQL es el número máximo de índices de una tabla que no puede exceder los dieciseis.

Los errores MySQL

PHP dispone de dos funciones que nos permiten detectar si una sentencia MySQL se ha ejecutado correctamente o si se ha producido algún error.

Son estas:

mysql_errno($enl)

Indica el número de error que se ha producido en las transacciones MySQL realizadas a través del identificador de enlace $enl.

Cuando el número de error es CERO significa que no se ha producido error. Otros valores son menos agradables. A modo de ejemplo:
mysql_error($enl)

Nos devuelve la descripción del error (escrita en raro.., pero... menos da una piedra...). Cuando el número de error es CERO devuelve una cadena vacía.

Te puedo jurar que es tremendamente útil para depurar y correjir scripts.



 
 


Añadir registros a una tabla

Las sentencias MySQL que permiten añadir registros a una tabla son estas:

INSERT tabla (campo1,campo2,..) VALUES (valor1,valor2,..)
Vamos a desarrollar un ejemplo completo de creación de una tabla e inserción de registros utilizando diversos métodos.

Para ello seguiremos el siguiente proceso:

1.- Creación de la tabla

Empezaremos creando una tabla a la que llamaremos demo4 y que contendrá los siguientes campos: El código fuente del fichero que genera esta tabla puedes verlo aquí debajo


Ver código fuente

2.1.- Añadir un registro

Cuando se añade un registro en una tabla los valores pueden añadirse en la propia sentencia MySQL o recogerlos de los valores de variables PHP previamente definidas.

En este ejemplo, tienes el código fuente del primero de los casos en el que se añade -a la tabla anterior- un registro cuyos valores son:

DNI Nombre Apellido1 Apellido2 Nacimiento Sexo Hora Fumador Idiomas
1234 Lupicinio Servidor Servido 1954-11-23 M 16:24:52 NULL 3

Ver código fuente

Presta atención a los siguientes aspectos: Aunque me estés llamando pelmazo.. pesado.. y otras lindezas, no quiero dejar de hacerte algunas precisiones más al respecto de esta inserción. Por ejemplo que:

2.2- Añadir un registro a partir de datos contenidos en variables

También es posible añadir registros a partir de valores contenidos en variables PHP. Esta opción es sin ninguna duda la más utilizada ya que lo habitual será escribir el contenido a añadir en un form y después -a través del method (POST o GET)- pasar al script de inserción esos valores como variables PHP.

Aquí tienes el código fuente de un ejemplo con la tabla anterior.


Ver código fuente

Quizá te resulten de alguna utilidad estos comentarios

3.- Variantes de la sentencia INSERT

La sentencia INSERT cuya sintaxis se indica más arriba como:
INSERT tabla (campo1,campo2,..) VALUES (valor1,valor2,..)
permite algunos modificadores opciones tales como:
INSERT [LOW_PRIORITY | DELAYED] [IGNORE] tabla (campo1,..) VALUES (valor1,..)
de ellos LOW_PRIORITY y DELAYED son incompatibles por lo que solo cabe uno u otro pero ambos a la vez.

Veamos su utilidad. La inserción de registros y la lectura de una tabla son procesos incompatibles, pero cabe la posibilidad de que se intenten ejecutar simultaneamente. No olvides que estamos en Internet y es perfectamente posible que desde dos ordenadores distintos, dos personas distintas estén accediendo a la misma tabla simultáneamente y que uno de los accesos sea de escritura, es decir: añadir, modificar o borrar campos en la tabla

¿Quién tiene preferencia de paso? ¿Quien tiene que esperar?. Si la opción LOW_PRIORITY está activada, el proceso de escritura esperará a que terminen los procesos de lectura activos pero se si está activa la opción DELAYED el proceso de lectura se interrumpirá automaticamente para ceder el paso al de escritura.

Respecto a la opción IGNORE tiene utilidad cuando se trata de realizar una secuencia de inserciones. Si no está activa en el momento en el que aparezca una clave duplicada se interrumpirá el proceso de inserción por el contrario, si estuviera activa el proceso de inserción continuará con los siguientes registros de la secuencia, aunque -como es lógico- seguirán sin insertarse los registros con clave duplicada.

4.- Una frivolidad a modo de recapitulación

Aquí tienes -comentado- un script que permite agregar -aleatoriamente y de forma automática- registros a la tabla demo4.

Su utilidad ha sido doble para mí. Me ha servido para recordar el uso de las funciones de PHP y sobre todo para conseguir una tabla de pruebas con un montón de registros... sin necesidad de irlos escribiendo uno a uno...
Mi tradicional pereza... me obligó a ello... :-). Aquí tienes el código fuente.


Ver código fuente

Sugerir a un/a amig@ Envíame tus comentarios
Anterior
Indice
Siguiente