Sunteți pe pagina 1din 18

Capítulo

MySQL
ySQL es uno de los servidores de nombre único, para que podamos referirnos a
bases de datos de código abierto cada una de ellas sin riesgo de confundirla
(Open Source) más populares y con alguna de las otras.
conocidos del mundo, un sistema
de manejo de bases de datos sin igual en Al ser la tabla formada por columnas cada
rapidez, estabilidad y facilidad de desarrollo. columna debe tener un nombre único, para así
Dispone, además, de una arquitectura que la poder referimos a cada una de ellas
haceextremadamente rápida y fácil de perso- específicamente. En MySQL existen tres tipos
nalizar. distintos de columnas, dependiendo de los
datos que vayan a almacenar:

Servidores de bases • Tipo Numérico


de datos
• Tipo Fecha

Un servidor de bases de datos es un programa • Tipo Cadena


que almacena datos estructurados en forma de
tablas. El servidor acepta conexiones de clien- Tipo Numérico
tes a través de un puerto TCP /IP y admite
consultas realizadas en lenguaje SQL Los tipos de datos numéricos pueden dividir-
(Structured Query Language) para posteriormen- se en dos grandes grupos: aquellos que tienen
te devolver los datos resultantes del procesa- decimales (coma flotante) y aquellos que no
los tienen.
miento de aquellas al cliente a través de la red.

Organización de MySQL Nota: Expresar un número de la


forma 3.402823466E+38 es equi-
MySQL está conformada por distintas bases valente a expresarlo de la forma
de datos, cada una de las cuales consta de 3.402823466*1038.
una o varias tablas, que son las que contienen
la información y que constan de tres elemen-
tos principales:
Tipo Fecha
• Columnas Cuando almacenamos fechas en nuestras
tablas hay que tener en cuenta el hecho de que
• Datos
MySQL no comprueba de forma concreta si
una fecha es o no válida, sino si el mes indica-
• Índices
do está comprendido entre Oy 12 Yel día del
mes está comprendido entre Oy 31. Atendien-
Columnas
do a este factor, disponemos de varios tipos
Como las tablas están constituidas por colum- que podemos utilizar para manejar fechas.
nas, cada una de éstas últimas ha de tener un

MySQL 135
Tabla 4.1.

Tipos de datos numéricos disponibles para las tablas MySQL.

Tipo Numérico Descripción

Tinylnt Número entero con o sin signo. Con signo, el rango de valores válidos se
encuentra entre -128 y 127. Sin signo, el rango de valores válidos se encuentra
entre O a 255

Bit Número entero cuyo valor puede ser Oó 1

Bool Número entero cuyo valor puede ser Oó 1

Smalllnt Número entero con o sin signo. Con signo, el rango de valores se encuentra
entre -32768 y 32767. Sin signo, el rango de valores se encuentra entre Oy
65535

Mediumlnt Número entero con o sin signo. Con signo, el rango de valores válidos se
encuentra entre -8.388.608 y 8.388.607. Sin signo el rango de valores válidos
se encuentra entre Oy 6777215

Integer Número entero con o sin signo. Con signo, el rango de valores válidos se
encuentra entre -2147483648 y 2147483647. Sin signo, el rango de valores
válidos se encuentra entre Oy 429.4967.295

Int Número entero con o sin signo. Con signo, el rango de valores válidos se
encuentra entre -2147483648 y 2147483647. Sin signo, el rango de valores
válidos se encuentra entre Oy 429.4967.295

Biglnt Número entero con o sin signo. Con signo, el rango de valores válidos se
encuentra entre -9.223.372.036.854.775.808 y 9.223.372.036.854.775.807. Sin
signo, el rango de valores válidos se encuentra entre Oy
18.446.744.073.709.551.615

Flota Número pequeño en coma flotante de precisión simple. El rango de valores


válidos se encuentra entre -3.402823466E+38 y -1.175494351 E-38, OY entre
1.175494351 E-38 Y 3.402823466E+38

xReal Número en coma flotante de precisión doble. El rango de valores válidos se


encuentra entre -1 .7976931348623157E+308 a -2.22507385850720 14E-308, O
Y entre 2.2250738585072014E-308 y 1.7976931348623157E+308

136 Capítulo 4
Tipo Numérico Descripción

Double Número en coma flotante de precisión doble. El rango de valores válidos se


encuentra entre -1.7976931348623157E+308 a -2.2250738585072014E-308, O
Y entre 2.2250738585072014E-308 y 1.7976931348623157E+308

Decimal Número en coma flotante desempaquetado. En este caso el número se alma-


cena como una cadena

Dec Número en coma flotante desempaquetado. En este caso el número se alma-


cena como una cadena

Numeric Número en coma flotante desempaquetado. En este caso el número se alma-


cena como una cadena

Tabla 4.2.

Tipos de fecha disponibles para las tablas MySQL.

Tipo Fecha Descripción

Time Almacena una hora. El rango de valores válidos para la misma se encuentra
entre -838 horas, 59 minutos y 59 segundos y 838 horas, 59 minutos y 59
segundos. El formato de almacenamiento es 'HH:MM:SS'

Year Almacena un año. El rango de valores válidos para el mismo se encuentra


entre el año 1901 y el año 2155. El campo puede tener tamaño 2 ó tamaño 4,
dependiendo de si deseamos almacenar el año con dos o cuatro dígitos

Date Almacena una fecha. El rango de valores válidos de la misma se encuentra


entre el1 de enero de 1001 Y el 31 de diciembre de 9999. El formato de alma-
cenamiento es año-mes-día

Date Time Combinación de fecha y hora. El rango de valores válidos se encuentra entre
las O horas, O minutos y O segundos del1 de enero de 1001 Y las 23 horas, 59
minutos y 59 segundos del 31 de diciembre del 9999. El formato de almacena-
miento es de año-mes-día horas:minutos:segundos

TimeStamp Combinación de fecha y hora. El rango de valores válidos de la misma se


encuentra entre el1 de enero de 1970 y el 31 de Diciembre de 2037. El forma-
to de almacenamiento depende del tamaño del campo como puede observar
en la tabla 4.3

MySQL 137
Tabla 4.3. Tabla 4.4.

Formatos de almacenamiento del tipo Tipos de cadena disponibles para las tablas
de fecha TimeStamp. MySQL.

Tamaño Formato " Tipo Cadena Descripción

14 Año MesD íaHoraM inutoSe- Char(n) Almacena una cadena


gundo aaaammddhhmmss de longitud fija cuyo
número de caracteres
12 AñoMesDí aHoraMinutoSe- puede estar comprendi-
gundo aammddhhmmss do entre O y 255

8 AñoMesDía aaaammdd VarChar(n) Almacena una cadena


de longitud variable cuyo
6 AñoMesDía aammdd
número de caracteres

4 Año Mes aamm puede estar comprendido


entre O y 255
2 Año aa

Las columnas, además del tipo al que pertene-


cen, también pueden tener propiedades o
Tipos Cadena atributos:
La principal distinción que se hace entre los
tipos de cadena disponibles para las tablas • Longitud: Número de caracteres que
MySQL es la de que las cadenas puedan dis-
acepta la columna para los valores que se
introducen en ella.
poner de longitud fija o variable.

Pero, además de esta distinción, también • Default: Valor predeterminado, es decir, el


valor que se asigna a la columna cuando
pueden distinguirse otros dos subtipos dentro
de los tipos fecha, atendiendo al tratamiento no se le asigna un valor específico.
que reciben a la hora de realizar
• Null - Not Null: Aceptación o no de valores
ordenamientos y comparaciones. Estos dos
nulos en caso de que la columna pueda
subtipos son el tipo Text y el tipo BLOB (Binary recibir valores nulos.
Large Object) en los que, mientras que el prime-
ro se ordena sin tener en cuenta mayúsculas y • Auto_increment: Autoincremental, aumenta
minúsculas, el segundo se ordena teniéndolas en una unidad su valor por cada nuevo
en cuenta. Estos últimos, los tipos pertenecien- registro que se añada a la columna.
tes al subtipo BLOB, se utilizan para almace-
nar datos binarios, como puedan ser los de los
ficheros, por ejemplo.

138 Capítulo 4
Tabla 4.5.

Sub tipos de tipo BLOB disponibles para las tablas MySQL.

Tipo Cadena Descripción

TinyText Columna con una longitud máxima de 255 caracteres

TinyBlob Columna con una longitud máxima de 255 caracteres

Blob Texto con una longitud máxima de 65535 caracteres

Text Texto con una longitud máxima de 65535 caracteres

MediumBlob Texto con una longitud máxima de 16.777.215 caracteres

MediumText Texto con una longitud máxima de 16.777.215 caracteres

LongBlob Texto con una longitud máxima de 4.294.967.295 caracteres. Hay que tener
cuenta que debido a los protocolos de comunicación los paquetes que se
envían a través de la red pueden tener un máximo de 16 Mb

LongText Texto con una longitud máxima de 4.294.967.295 caracteres. Hay que tener
cuenta que, debido a los protocolos de comunicación, los paquetes que se
envían a través de la red pueden tener un máximo de 16 Mb

Enum Campo que puede obtener un único valor de una lista de posibles valores
donde se especifica. Este tipo acepta hasta 65535 valores distintos

Set Campo que puede contener ninguno, uno, o bien varios valores de una lista
que puede tener un máximo de 64 valores

Datos índices

Los datos son la información que se almacena Las tablas de MySQL pueden utilizar índices,
por filas dentro de las distintas tablas MySQL que sirven para mejorar el tiempo de respuesta
de las que disponemos, y cada uno de los de MySQL en las consultas cuando se realizan
registros es del tipo de datos de la columna a búsquedas en las distintas tablas. Puede
la que pertenece. establecer distintos tipos de índices para sus
tablas:

MySQL 139
Tabla 4.6. res de hospedaje de sitios Web no permiten
Tipos de índice para las tablas MySQL. acceder a la existente en el servidor, por lo
que suele ofrecerse a cambio el tener instala-
Tipos de índice Descripción
do un administrador o manipulador para la
base de datos. Para acceder al administrador
Primary Establece que el campo de bases de datos abra una nueva ventana de
en el que se define sea su navegador y teclee:
primario
http://localhost/phpMyAdmin
Index Crea un indexado del
campo para que la bús- tras lo que deberá ver en su navega dar el
queda sea más rápida administrador de bases de datos dispuesto
para ser utilizado tal y como se muestra en la
Unique Establece que los valores figura 4.1.
de ese campo sean
únicos para cada nuevos
datos de la tabla Nota: Recuerde que para acceder
a contenidos alojados en
1'ii1'.
~ http://localhost ha de haber
inicializado previamente el servi-
Nota: Es muy recomendable que dor Apache.
cada una de las tablas que cree
posea un campo con valores úni-
cos, lo que le ayudará a la identifi- Para irnos acostumbrando al funcionamiento
cación de ese registro. Por lo gene- de MySQL vamos a crear, primeramente, una
ral, este registro único es un base de datos, y posteriormente, y dentro de
número cuyo valor aumenta en una ésta, crearemos una tabla sobre la que hare-
unidad con cada registro nuevo que mos inserciones, modificaciones y selecciones
se añade a la tabla (un número de datos, de modo que las estructuras a crear
autoincremental) y se le suele dar en los siguientes apartados le servirán ade-
un nombre identificador de lo que más para ir realizando las distintas prácticas
representa, por ejemplo "id". y ejercicios necesarios para familiarizarse con
la manipulación de las bases de datos instala-
das en su servidor.

Manipulación y utilización Creación de una base de datos


de MySQL Para comenzar vamos a crear una nueva base
de datos llamada pruebas en su administra-
Para manipular MySQL puede usted utilizar
dor de bases de datos (phpMyAdmin) Para
la terminal o consola del ordenador (una
ello teclee:
ventana del sistema MS-DOS), pero por moti-
vos de seguridad la mayoría de los proveedo- pruebas

140 Capítulo 4
en el cuadro de introducción de texto que se Tabla 4.7.
encuentra debajo de "Crear nueva base de Estructura de la tabla directorio de la base
datos" y pulse el botón Crear. de datos pruebas.

Si desea utilizar la consola (para lo puede Nombre del campo Tipo de datos
presionar el enlace Ventana de consulta
del administrador) para crear la base de id Entero mediano,
datos, teclee en la misma: autoincremental

CREATE DATABAS E pruebas nombre Varchar de 20


caracteres

Creación de una tabla para la base


apellido Varchar de 20
de datos
caracteres

Una vez que hemos creado la base de datos email Varchar de 30


necesitaremos al menos una tabla en la que
caracteres
almacenar información que posteriormente
manipularemos. Para ello vamos a crear una url Varchar de 30
tabla de nombre directorio y cuya estructura caracteres
puede observar en la tabla 4.7.
nick Varchar de 20
caracteres

édit
~ewtJeIp
§:o
[I.
!!<Jokmarks
'l;]gJtj.
[Lists)
r- phpMyAdmin
~phpMyAdmi~";;ing
1
...J
n
,.- phpMyAdmin
looIs [CVSJ [Documentation] --~
,- Ollicial phpMyAdmin Homepage
Welcome to phpMyAdmin 2.3.0 Ivl @ Go
!1lI
documentationShow PHP ínformation
eI Language
on localhost ¡ English (en~o-8859·1)
- phpMyAdmi~ - ~fo¡
(: - I[Q.. L·:
}=:=-==_=::E
mentationl
atabas e r-
e [Documentation]
r· f'Show
variables
[Documentation]
Users
Reload [Documentation}
Databases [Documentation]
[ChangeLog]
MySQL
processes
MySOLstatistics
system MySQL
MySQL4.1.2-alpha-debug running on localhost as root@localhost
lntime I:L

Figura 4.1
Pantalla de bienvenida
al administrador de bases
de datos

MySQL 141
El administrador de la base de datos nos ofrece en el segundo, para posteriormente pulsar el
dos posibilidades para crear una nueva tabla. boton Continue.
La primera de ellas consiste en utilizar un
formulario escrito en HTML, paraTo cual hemos Veremos entonces en nuestro navegador una
de comenzar seleccionando en el menú de bases serie de campos desplegables y de introduc-
de datos que se encuentra a la izquierda de su ción de texto que deberemos rellenar de acuer-
administrador la base de datos en la que vamos do a la estructura que decidimos que había de
a crear la tabla, pruebas en nuestro caso. tener la tabla directorio y que podemos obser-
var en la tabla 4.7. Una vez completados los
Una vez seleccionada la base de datos prue- campos del formulario (como se puede ver en
bas accederá a una nueva pantalla en la que la figura 4.3) pulsamos el botón Grabar, con
podrá observar dos cuadros de introducción lo que se creará la tabla directorio en MySQL y
de texto debajo de "Crear nueva tabla en la veremos un mensaje que nos informa del éxito
base de datos pruebas", siendo el primero de de la operación.
ellos para el nombre de la nueva tabla y el
Esta forma de crear las distintas tablas de
segundo para el número de campos de que
constará ésta última, como puede ver en la nuestra base de datos es sencilla de utilizar,
figura 4.2. Tecleamos: pero tiene el inconveniente de que hemos de
crear las tablas una por una y además nos
directorio
obliga a rellenar tantos campos como le indi-
quemos al crear cada una de ellas, con lo que
en el primer cuadro de introducción de texto y:
si éstas son grandes o tenemos un elevado
6 número de tablas, su creación puede ser una
tarea bastante incómoda.

l$~~ing-;;n l1x:alhost - phpMyAdmin 2.3.0 - Mozilla Fkefox


El. ¡;dit l1iew §.O !lookmarks 100ls tlelp

$ . $. & Q E.IJ 1 u hltp:jftocalhosl/phpNyAdminjlndex.php .:::El © Go I~


Hame
Database pruebas running on localhost
pruebas (-)
T able usuarios has been dropped
pruebas
SQL-query: [Edrt] [Create PHP Code]
DRO? TABlE 'wusriO$"

No tables found in database.


I Slructure I I SQl I I Export I I Search I Drop

No tables found in database .

• Create new table on databas e pruebas:


Name: 'directorio . Figura 4.2.
Fields: 'L.J I¡GoU Creación
t::s
de la tabla
directorio
usando
Done
..." phpMyAdmin.

142 Capítulo 4
Database pruebas. table directorio running on localhost

.I'lull Default Extra

auto increment

null

Figura 4.3.
Table comments :
Estructura
de la tabla
directorio.

Por ello MySQL ofrece la posibilidad de Como ejemplo práctico de lo que acabamos
importar datos externos, es decir, leer un de leer, vamos a seleccionar la base de datos
archivo con la información y estructura (e pruebas en el menú de la izquierda del admi-
incluso con los datos) de una o varias tablas, nistrador y posteriormente vamos a pulsar en
de forma que podemos teclear los comandos la pestaña que lleva el texto SQL en la parte
que necesitemos en un documento de exten- derecha, lo que nos lleva a una pantalla con
sión .sql generado con un editor de texto y un área de texto y un campo de texto de tipo
posteriormente importarlo desde MySQL Archivo junto a un botón Browse (Examinar)
para que se ejecuten dichos comandos Pulsaremos sobre éste para buscar y seleccio-
y se creen las tablas con sus respectivas es- nar el documento material! cap4/ sql!
tructuras. directorio_estructura.sql del CD como puede
verse en la figura 4.4.

ipruebairu;;¡;¡r;gon loeaIMsi--phj)MyAdmin 2.3.0-· MóziUa Fir"fol<


Eae Edit Y.iew §o ~kmarks 10015 tielp

$. <o/ • § a @ lCi http://tocalmstfphpMyAdminfindex.php

Hom~ Database pruebas running on localhost


I pruebas (-)
i Structure I ~'._SQL I I Export I I Search I I Orop

'No tables found in


database.
1"", ~,"',","~""''''''''" ""'~, "''''"'00"''''""1

L
I

~
De
Show lhis query here again
Localion 01lhe lexliile ,
lbireclorio_estructura.sql![ I?rowse ...
Figura 4.4.
Carga de
documentos .sql
Done externos.

MySQL 143
Este documento .sql contiene, como puede Inserción de información
ver en la figura 4.5, los comandos necesarios
Antes de insertar datos en la tabla vamos a
para crear la tabla directorio en la base de
datos pruebas. importar un archivo con datos de ejemplo, con
el fin de que, a la hora de realizar selecciones
~~~~-;~~-~::::~~:~:-~---- 3---- +---- 4- ---f--- -5----+-1 de registros en ejercicios posteriores, las infor-
id mediumint (8) un.:liqned NOT t.IDLL aueo_increment,
nombre varchaI (20) NOT NtJT--Ldefault 1"
maciones sean las mismas. Al igual que hici-
apellido varchar (20) NOT NULL default ",
email varchar(30)NOTNULLdefault ••• mos con anterioridad para crear una tabla
url varchar(30) NOT NULL default •"
nick varchar (20) NOT NULL default •• utilizando un documento .sql externo, selec-
UNlQUE i{Ey id (id),
KEYeroail (email, nick) 1 cionaremos la base de datos pruebas en el
TYPE~HyISAl1;
menú de la parte izquierda del administrador
Figura 4.5. y luego la tabla directorio del menú de tablas
dentro de la base de datos pruebas. A conti-
Contenidos del documento
nuación pulsamos sobre la pestaña de nombre
directorio _ estructura. sql.
SQL de la parte derecha. Utilizando el botón
Browse (Examinar) buscamos y selecciona-
Seleccionado el documento, presionamos el mos el documento material! cap4/ sql!
botón Continúe y veremos una pantalla que directorio_datos.sql del CD y luego pulsamos
nos informa del éxito de la creación de la tabla
el botón Continúe para que se realicen la
(figura 4.6). acciones que hemos tecleado en nuestro
documento .sql externo.
Este último método es muy útil, no sólo para
ganar tiempo a la hora de crear varias tablas, Una vez almacenada en la tabla directorio la
sino también para exportar la estructura de información del archivo importado, procede-
las bases de datos cuando se instalan módu- remos a insertar información.
los pre-programados.

pruebas runningon localhost - phpMyAdmin.2.3.0-::MoziíllrFir1lfox


51•• dit I!).w !lo !J.ookmarks 1001, tjelp

$- <$ - fj) O @ 10 http:/¡1ocolhostJphpMyAdminfindex.php EJ @ Go 1[Q.


H01'1e
Database pruebas running on localhost
rpr~ebas (1)
Your SQl-query has been ex~cuted successfully
pruebas
ll: --dir&d:orio
SOl -query : [Edil] [Craate PHp..Code]
"'CREATE-y-ABLE di~oriof ~
id:'. ~~ ~l' t18) UNSIGNEO"NOT rfUll AUTO_INCREMENT,
l'lOfl'Ilxe" .:Á~,"::..;...q{20 }rmTNUlLDEFAULT--,
8$)ellido _ '~HA - 20} ItOnmll OEFAU\.;.T"',
email fj!o.i<C~'!:""':{30 1UOl NUlL DEFAUL T~;..
_ tB"lil4?,-CrlÁ;f:fM JHOTHUll DEFAULT",
"ojd&:\':b;ft,¡C.-1J:,~f20) ÑOTNUU DEFAOLT",
UHIQUE KEY id{ id ) •
KEY emaill' email, nick;
t rrPE-= MYISAM

IStructure 1l--saLl I Export I 1Search I I Query I I~


Run SQl query/queries on database pruebas [Documentation] : Figura 4.6.
ICREATETABlE directorio NOT
Id mp.cilllmmtf81uns.lnnP.d ( Nllll ;mto Inc.rp.mp.nt
tTI nll

Done
H de
~811Creación
la tablaexitosa
directorio.

144 Capítulo 4
Para ello podemos pulsar sobre el vínculo
Tabla 4.8.
que reza Insertar, lo cual nos permitirá intro-
ducir registros nuevos a la tabla de uno en Datos del nuevo registro.
uno, con lo que esto puede conllevar una Tmeister
Chávez
Contenido
Campo noone@tmeister.net
Enrique
http://www. tmeister.net
cierta pérdida de tiempo. Para evitar este
problema, vamos a introducir la información
email
url
nick
apellido
nombre
mediante sentencias SQL. Con la tabla directo-
rio seleccionada en la parte izquierda del
administrador, pulse sobre la pestaña SQL de
la parte derecha, en la que puede ver un área
de texto en el que vamos a introducir nues-
tros comandos.

Para insertar información utilice la palabra


reservada INS ERT seguida del nombre de la
tabla donde se realizará la inserción. Seguida-
INSERT INTO directorio
mente especificamos los campos que serán (nombre,apellido,email,url,nick)
afectados cuando realizamos una nueva VALUES
('Enrique', 'Chávez', 'noone@tmeister.net',
inserción de un registro y por último especifi-
,http://www.tmeister.net ', 'Tmeister' ) ;
camos los valores que tendrán cada uno de
esos campos. Resumiendo, la sintaxis debe ser
como SIgue:
Nota: Tenga en cuenta que los
INSERT INTO [nombre_tabla] (campol, valores para cada uno de los cam-
campo2, campo3) VALUES
pos se teclean entre comillas
('valor_campol', 'valor campo2',
'valor campo3'); simples y los nombres de los
campos van sin ellas.
Si recuerda la estructura de la tabla directorio
(tabla 4.7), verá que ésta cuenta con los si-
guientes campos: id, nombre, apellido, email, Pulsando el botón Insertar se agregará el nue-
ud y nick; hemos de tener en cuenta que id es vo registro a la tabla directorio de la base de
autoincremental, con lo que no es necesario datos pruebas, como puede ver en la figura 4.7.
asignade información puesto que MySQL se
encargará de insertar el registro con el número De esta forma hemos realizado la inserción de
correspondiente. Para comprobar lo que un solo registro. Si deseamos insertar, por
acabamos de decir vamos a insertar un nuevo ejemplo, quince, no tenemos más que escribir
registro. una sentencia INSERT INTO... por cada uno
de los registros a añadir en un documento .sql
Teclee en el área de texto la consulta para y posteriormente importado a MySQL, tal y
insertar el registro tal y como hemos especifi- como hemos realizado con los datos del docu-
cado con anterioridad: mento directorio_datos.sql que hemos visto al
inicio de este apartado.

MySQL 145
~.d;=;¡Q f~n;;-i~g on iocalhost, phpMyAdmin 1.3.0 ' Mozilla Firefox
Go ªookmarks Iools t!.elp

~ IO http://iocalhostfphpMyAdmínf,,dex,php El © Go [IQ~

Database pruebas - table directorio running on localhost

pruebas SQ[~uery , [Edil] [Create PHP Code]


~" diretlorio lHSERr lUTO diredOfiO\:nombfe~ apellido. emsil. url. ilid::}
FVAlUESf
'EntíqJ*', 'Chav.:.-Z'.:noon.e@tm,¡oisHu.net'. l1ttp:jJ"'My.~ts;er.nef.' "Tme:ÍSt.g'

~ ~ 1--sQLl ~ ~ IExPortlloperatiJ

• Run SOL query/queries on database pruebas [Documentation] Fields:


lid EJi~
i'NSERT INTO directorio (nombre,apellido,email,url,nick) VALUES
¡(Enrique' .'Chávez', 'noone@tmeister.ne!' •.http://www.tmeister.ne!.. Tmeister'); Figura 4.7.
!
I

<} íiIj.x;J11 Datos insertados


con éxito.

Vamos a realizar diversas consultas de selec-


Selección de registros de la tabla
ción con los datos de nuestra tabla directorio.
La selección de información es una de las Seleccionamos dicha tabla del menú de tablas
actividades más realizadas cuando trabaja- de la base de datos pruebas en la parte iz-
mos con bases de datos, cuando realizamos quierda del administrador, y a continuación
una búsqueda o desplegamos una serie de pulsamos sobre la pestaña SQL. En el área de
registros estamos realizando una selección. La texto teclee lo siguiente:
sintaxis para realizar una selección de regis-
SELECT FROM directorio;
tros de una tabla es variable, siendo la forma
básica como se indica a continuación:
La siguiente pantalla mostrará todos los
SELECT * FROM [nombre_tabla]; registros de la tabla, como puede observar en
la figura 4.8.
En este caso, el carácter "*" representa todas
las columnas y todos los registros de la tabla.

Ed1t Oelete
htt¡>:lIxf1ash:~~~c?m,' jesús
Figura 4.8 .
i,;;j/~:rolhigliactrri""]~~'
•.••• _-."'-.-~ ""--,-,-. --"-",,,::!,•••
_~ . ~~
Edif" Delete 7"" Carlos http://www.kadazuro.com kadazuro Selección de todos los
~:xJ~_ ..._.- .... '

1~ ,- JUl.
~~¡;~G1I~¡;;-:r1~riqu-'-e-UC¡;áve~noon~tmeiSternet ~;p:;;:::;~;iªtéL;et" Urmeist~r. registros.

146 Capítulo 4
En cambio, si deseamos seleccionar sólo SELECT nombre_columna 1,
nombre_columna_2,
algunos campos de la tabla, habremos de nombre columna_N FROM [nombre_tabla]
separar los nombres de las columnas por aRDER BY [nombre columna] [modo de
ordenamiento] ;
comas, como se indica a continuación:

SELECT nombre_columna_1, Si queremos seleccionar registros en nuestra


nombre_columna_2, tabla directorio tomando como referencia al
nombre columna N FROM [nombre tabla];
campo nombre y en orden descendente teclea-
ríamos:
De esta forma, si deseamos seleccionar única-
mente las columnas nombre, apellido, url y SELECT nombre,apellido,url,nick FROM
nick de la tabla directorio habremos de teclear directorio ORDER BY nombre DESC;
en el área de texto de SQL lo siguiente:
con lo que, como puede verse en la figura 4.10,
SELECT nombre,apellido,url,nick FROM se muestran los distintos registros pero orde-
directorio;
nados no por el campo id, sino por el campo
La siguiente pantalla mostrará únicamente los nombre. Al haber indicado además que la
campos nombre, apellido, url y nick de cada ordenación fuese descendente aparecen en los
primeros lugares aquellos nombres cuya
registro almacenado en la tabla, como puede
inicial es posterior en orden alfabético.
observar en la figura 4.9.

Kali Zumbado
Rodolfo
Flores
Chávei
de
Delete
Ruizla Cruz.
nick url
nombre kali
kadazuro
femando
Tmeister
rolf net
hltp:l!www.tmeister.
Romiglia
htlp:l/www.kadazuro.com
htlp:l/www.alesys.net
apellido
hltp:l!www. sangles.com.
http://www.romiglia.com
htlp:llxflash.8k.com
Anglés granatla
htlp:l/www.onelx.com
hltp:llwww.granatla.com
Vejarano jesús
Podemos además ordenar los resultados en
~ s';;'.gles
forma ascendiente "ASC" o descendente
"DESC", en base a una columna o varias; para
esto agregamos ORDER BY [columna] [modo de
ordenamiento] a la consulta. Por ejemplo, para
seleccionar registros en base al campo nombre
en forma descendente teclearíamos:

SELECT nombre,apellido,url,nick FROM


Figura 4.9. directorio ORDER BY nombre DESC;

Selección de campos concretos de los


Delete Manuel
hll nick
nombre
apellido urt
Anglés Ruiz
L de la Cruz.
Flores
Zumbado
Delete htlp:flwww.onelx.com
htlp:llwwN.sangles.com
Santiago chávez
htlp:Hxflash.8kcom
Vejaranosangles
registros. '--
Edit Delete· En~que
Edlt Delete Rodolfo
Edit Edit Delete Carlos
Daniel Edil Delete Fernando
Figura
Edit 4.10.
Delete ~ali_._~.~iglia
Selección y ordenamiento de resultados.

Ordenación de los resultados

Además de obtener los campos deseados en la


consulta, también podemos ordenarlos en
orden ascendente (ASC) o descendente
(DESC), referenciando a una columna o a
varias, para lo cual agregaremos ORDER BY
[columna] [modo de ordenamiento] a la consulta,
resultando entonces lo siguiente:

MySQL 147
SELECT * FROM directorio WHERE nombre
Puede practicar las selecciones ordenando
LIKE '%e%';
por distintas columnas. Para ordenar por más
de una columna puede adjuntar el nombre Observe los registros de la tabla directorio y
del campo y el orden, seguido cada uno de practique realizando distintos tipos de con-
ellos por la instrucción ORDER BY,por ejem- sultas de selección como las anteriores.
plo:

SELECT nombre, apellido, url, nick FROM Desplegar un determinado número


directorio ORDER BY nombre ASC, url DESC;
de registros
Selección de datos específicos
Puede que cuando realizamos una consulta
En caso de que deseemos realizar una consul-
no queramos mostrar todos los registros resul-
ta a la base de datos buscando los registros
tantes en la búsqueda, sino simplemente un
que concuerden con un criterio específico
número determinado de ellos. Para este tipo
utilizaremos la cláusula WHERE, que se suele
de consultas se utilizan lo que se denominan
utilizar de la siguiente forma:
límites, y la sintaxis para usarlos es la si-
SELECT [nombre columnas] FROM guiente:
[nombre tabla] WHERE
[nombre_columna] [criterio comparacion] SELECT [campos] FROM [tabla] [WHERE]
[valor] ; LIMIT [inicio] , [cantidad] ;

donde nombreJolumna es una columna de la siendo inicio el índice en el array resultante de


tabla, criterioJomparación es el lugar en el que respuestas y cantidad el número de registros a
indicamos a la base de datos que seleccione mostrar.
los campos donde la información sea "igual",
"mayor" o "menor" o que contenga cierto valor, Por ejemplo, si queremos mostrar solamente
y valor es el criterio de búsqueda de la selec- los dos primeros registros de la tabla directo-
ción que estamos llevando a cabo. rio, teclearíamos:

SELECT * FROM directorio LIMIT 0,2;


Por ejemplo, si quisiéramos seleccionar todas
las columnas de la tabla directorio donde el
Si queremos mostrar los dos registros siguien-
nombre sea Enrique, teclearíamos lo siguiente:
tes la consulta a realizar sería:
SELECT * FROM directorio WHERE nombre
I Enrique' i SELECT * FROM directorio LIMIT 2,2;

Si deseamos seleccionar todas las columnas Obsérvese cómo se siguen mostrando dos
de la tabla directorio donde nombre comienza registros tras la búsqueda, pero al variar el
con la letra R, teclearíamos lo siguiente: valor de inicio el lugar a partir del cual se
empiezan a mostrar registros también varía.
SELECT * FROM directorio WHERE nombre
LIKE 1 E% 1 i Este tipo de consultas (utilizando límites) es
muy útil cuando deseamos realizar paginacio-
Si deseamos seleccionar todas las columnas nes de resultados.
de la tabla directorio donde nombre contenga
la letra e, teclearíamos lo siguiente:

148 Capítulo 4
Nota: Recuerde que puede pensar en un array como en uno de esos grandes ficheros
con cajones, dentro de cada uno de los cuales hay información guardada sobre un tema
concreto. Los arrays son estructuras que sirven para almacenar más de un valor al mis-
mo tiempo, en distintas celdas, y disponen de un índice, un número identificador que
se usa para acceder a cada uno de los datos almacenados. Este índice es un número
que va desde O hasta número_valores_del_array-1 i así si un array guarda seis valores, el
índice de dicho array va desde O hasta 5. Por ello, los dos primeros elementos de un
array están almacenados en las posiciones Oy 1, de forma que cuando queremos esco-
ger los dos primeros registros de la consulta comenzamos por el número O.

Modificación de registros hacerla de varias formas, seleccionando en la


almacenados en la tabla tabla al usuario cuyo nombre es Juan, por
ejemplo:
Para actualizar o modificar el contenido de
SELECT * FROM directorio WHERE nombre=
alguno de los registros almacenados en la 1Juan 1 i

tabla se utiliza como referencia el campo cuyo


identificador es único para cada registro. En También podemos seleccionar de la tabla
nuestra tabla directorio, el campo id es único directorio el registro en el que el valor del
por ser autoincrementat por lo que nos ayuda campo id sea el mayor (al ser este campo
a especificar cuál es el registro que deseamos autoincremental el último registro será que el
modificar. tenga mayor id) como se muestra en la figura
4.11.
La sintaxis para realizar modificaciones es la
SELECT * FROM directorio ORDER BY id
siguiente:
DESC LIMIT 0,1;
UPDATE [nombre_tabla] SET
nombre_campol=valorl, SQl-quel}l

nombre_campo2=valor2, SQl-queIY: [Edit] [Explaín S~l] [Create PHe COdeJ:


SELECT ~ ". 7
nombre_campoN=valorN FROMdiredcrio
ORDER BY id oese
[WHERE] [nombre_columna] [criterio UMIT {l .. i. __._. _ m.

comparación] [valor] ;

url
Inserte el siguiente registro en la tabla directo- id nombre apellido email

Edrt Delete 9 Juan Perez info@juanperez.com


rio tal y como hicimos con anterioridad:
Figura 4.11. Selección del último registro
INSERT INTO directorio
insertado.
(nombre,apellido,email,url,nick)
VALUES
('Juan' , 'Perez' 'info@juanperez. com' ,
'juanperez. com' , 'jperez' ) ; Si se ha fijado, el nuevo registro que hemos
añadido a la tabla tiene la particularidad de
A continuación seleccionaremos el registro que algunos de los contenidos de sus campos
que acabamos de insertar. Esto podemos están incompletos (en comparación con los

MySQL 149
UPDATE directorio SET
datos almacenados de los demás registros); el
ape1lido='Perez',url='http://www.
apellido de Juan carece de tilde, y su url no juanperez. com' ;
contiene la cadena http://www. que sí tienen el
resto de registros, por lo que hemos de modifi- y como resultado de esta acción todos los
car los datos que hemos almacenado previa- registros almacenarían en su campo apellido
mente (concretamente los campos apellido y el valor Pérez y en su campo url el valor
ud) utilizando el campo id como identificador http://www.juanperez.com .
único. Para ello teclearemos:

UPDATE directorio SET Eliminación de registros almacenados


apellido='Perez' ,url='http://www. en la tabla
juanperez.com' WHERE id=9;
Para realizar el borrado de un registro se
Ejecute la consulta a la base de datos, y selec- utiliza la siguiente sintaxis:
cione de nuevo el registro con utilizando como
DELETE FROM [tabla] WHERE [clausula
valor del campo id el del último registro inser- where] LIMIT [numero de registros a
tado en la tabla: eliminar] ;

SELECT * FROM directorio ORDER BY id


Para borrar el registro cuyo identificador id es
DESC LIMIT 0,1;
9, la consulta a efectuar sería:
Como puede observar en la figura 4.12 los DELETE FROM directorio WHERE id=9
datos se han modificado con éxito, con lo que LIMIT 1;

el último registro añadido ya dispone de la


información correcta.
Nota: Es muy importante hacer
referencia a una columna con un
identificador único a la hora de
realizar la consulta. De igual forma
a como ocurría en una consulta de
id nombre apellido email ud nick

Edil Oelete 9 Juan Pérez ¡nfo@juanperez,com http://WW\\I_juanperez_com jperez


actualización, si se omite la cláu-
Figura 4.12. sula where al efectuar una opera-
ción de borrado la consulta afecta
Modificación del último registro añadido
a la tabla directorio. a todos los registros, por lo que en
este caso serían eliminados todos
ellos.
El Es fundamental utilizar un identificador
único para realizar las modificaciones. En el
supuesto de que omitiera usar dicho También es bueno usar la cláusula LIMIT
identificador (id en este ejemplo), la consulta a (límite) informando de la cantidad de registros
.~
la base de datos se haría de la siguiente forma: que queremos eliminar, siendo así la cantidad

~-------------------------------------------
150 Capítulo 4
eliminada exacta, o la pérdida de informa- Más información
ción mínima; esto en caso de querer borrar un
sobre MySQL
único archivo; si se quieren eliminar varios
archivos y se desconoce la cantidad de estos,
Para más información sobre MySQL puede
se puede omitir esta parte, ya que hay que
tener en cuenta que al eliminar registros los acudir a http://www.mysql.com. el sitio oficial
datos no son recuperables y, por tanto, vale la de este software, para encontrar noticias,
pena revisar dos veces la consulta. documentación y descargar las nuevas versio-
nes del mismo.

gotoAndPlay("capitulo 5");

MySQL 151

S-ar putea să vă placă și