Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
clave
MarioPerez
Marito
MariaGarcia
Mary
DiegoRodriguez
z8080
Deben aparecer todas las tablas que han creado los visitantes al sitio mysqlya.com.ar
Al crear una tabla debemos resolver qu campos (columnas) tendr y que tipo de datos
almacenarn cada uno de ellos, es decir, su estructura.
La tabla debe ser definida con un nombre que la identifique y con el cual accederemos a
ella.
Si intentamos crear una tabla con un nombre ya existente (existe otra tabla con ese
nombre), mostrar un mensaje de error indicando que la accin no se realiz porque ya
existe una tabla con el mismo nombre.
Para ver las tablas existentes en una base de datos tipeamos nuevamente:
show tables;
Cada usuario ocupar un registro de esta tabla, con su respectivo nombre y clave.
Para ver la estructura de una tabla usamos el comando "describe" junto al nombre de la
tabla:
describe usuarios;
Aparece lo siguiente:
Field Type
Null
_________________________
nombre varchar(30)
YES
clave varchar(10)
YES
Esta es la estructura de la tabla "usuarios"; nos muestra cada campo, su tipo, lo que
ocupa en bytes y otros datos como la aceptacin de valores nulos etc, que veremos ms
adelante en detalle.
Para eliminar una tabla usamos "drop table". Tipeamos:
drop table usuarios;
Si tipeamos nuevamente:
drop table usuarios;
Aparece un mensaje de error, indicando que no existe, ya que intentamos borrar una
tabla inexistente.
Para evitar este mensaje podemos tipear:
drop table if exists usuarios;
Creamos la tabla:
Insertamos 3 registros:
Antes de crear una tabla debemos pensar en sus campos y optar por el tipo de dato
adecuado para cada uno de ellos. Por ejemplo, si en un campo almacenaremos nmeros
enteros, el tipo "float" sera una mala eleccin; si vamos a guardar precios, el tipo
"float" es correcto, no as "integer" que no tiene decimales.
drop table if exists libros;
El comando "select" recupera los registros de una tabla. Con el asterisco (*) indicamos
que seleccione todos los campos de la tabla que nombramos.
Podemos especificar el nombre de los campos que queremos ver separndolos por
comas:
select titulo,autor,editorial from libros;
autor varchar(30),
editorial varchar(15),
precio float,
cantidad integer
);
7 - Recuperacin de registros
especficos (select - where)
Hemos aprendido cmo ver todos los registros de una tabla:
select nombre, clave from usuarios;
El comando "select" recupera los registros de una tabla. Detallando los nombres de los
campos separados por comas, indicamos que seleccione todos los campos de la tabla
que nombramos.
Existe una clusula, "where" que es opcional, con ella podemos especificar condiciones
para la consulta "select". Es decir, podemos recuperar algunos registros, slo los que
cumplan con ciertas condiciones indicadas con la clusula "where". Por ejemplo,
queremos ver el usuario cuyo nombre es "MarioPerez", para ello utilizamos "where" y
luego de ella, la condicin:
select nombre, clave from usuarios where nombre='MarioPerez';
describe usuarios;
Note que al ingresar valores numricos (en este caso float) no se utilizan comillas y para
el separador de decimales se usa el punto(.).
Seleccionamos todos los registros:
select titulo, autor,editorial,precio from libros;
Note que al comparar valores numricos (en este caso de tipo float) no se utilizan
comillas.
drop table if exists libros;
nombre varchar(30),
clave varchar(10)
);
usuarios;
Creamos la tabla:
create table usuarios (
nombre varchar(30),
clave varchar(10)
);
into
into
into
into
usuarios
usuarios
usuarios
usuarios
(nombre,
(nombre,
(nombre,
(nombre,
clave)
clave)
clave)
clave)
values
values
values
values
('Leonardo','payaso');
('MarioPerez','Marito');
('Marcelo','River');
('Gustavo','River');
Para actualizar los valores de todas las claves, por 'RealMadrid' tipeamos:
update usuarios set clave='RealMadrid';
Verificamos el cambio:
select nombre,clave from usuarios;
11 - Clave primaria.
Problema:
Trabajamos con la tabla "usuarios" que contiene el nombre de usuario y su clave.
Eliminamos la tabla, si existe:
drop table if exists usuarios;
Creamos la tabla:
create table usuarios (
nombre varchar(20),
clave varchar(10),
primary key (nombre)
);
describe usuarios;
Note que en la columna "KEY" del campo "nombre" aparece "PRI", esto significa que
ese campo es clave primaria.
Ingresamos algunos registros:
insert
insert
insert
insert
into
into
into
into
usuarios
usuarios
usuarios
usuarios
(nombre,
(nombre,
(nombre,
(nombre,
clave)
clave)
clave)
clave)
values
values
values
values
('Leonardo','payaso');
('MarioPerez','Marito');
('Marcelo','River');
('Gustavo','River');
Al intentar ingresar un valor repetido para el campo clave, aparece un mensaje de error
indicando que el registro no se carg pues el dato est duplicado; vemoslo en un
ejemplo, ingresemos un registro con un nombre de usuario repetido:
insert into usuarios (nombre, clave)
values ('Gustavo','Boca');
describe usuarios;
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla, si existe:
drop table if exists libros;
Note que al detallar los campos para los cuales ingresaremos valores hemos omitido
"codigo"; cuando un campo es "auto_increment" no es necesario ingresar valor para l,
porque se genera automticamente. Recuerde que si es obligatorio ingresar los datos de
todos los campos que se detallan y en el mismo orden.
Si mostramos los registros:
select * from libros;
vemos que este primer registro ingresado guard el valor 1 en el campo correspondiente
al cdigo, comenz la secuencia en 1.
Ingresamos ms registros:
insert into libros (titulo,autor,editorial)
values('Martin Fierro','Jose Hernandez','Emece');
insert into libros (titulo,autor,editorial)
values('Aprenda PHP','Mario Molina','Emece');
insert into libros (titulo,autor,editorial)
values('Cervantes y el quijote','Borges','Paidos');
insert into libros (titulo,autor,editorial)
values('Matematica estas ahi', 'Paenza', 'Paidos');
El siguiente registro insertado tomar el valor ms alto para seguir la secuencia (en este
caso 16):
insert into libros (titulo,autor,editorial)
values('Harry Potter y la camara secreta','J.K. Rowling','Emece');
Si ingresamos un valor negativo (y el campo no est definido para aceptar slo valores
positivos), lo ingresa:
insert into libros (codigo,titulo,autor,editorial)
values(-5,'Alicia a traves del espejo','Lewis Carroll','Planeta');
describe libros;
Creamos la tabla:
create table libros(
codigo integer auto_increment,
titulo varchar(20),
autor varchar(30),
editorial varchar(15),
primary key (codigo)
);
Veamos el resultado:
select * from libros;
Veamos el resultado:
select * from libros;
Para el campo "codigo" se guard el valor 6 porque el valor ms alto de ese campo,
antes de eliminar todos los registros era "5".
Ahora vaciemos la tabla:
truncate table libros;
14 - Valores null.
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla, si existe:
drop table if exists libros;
Vemos que el campo "codigo" y el campo "titulo" no permiten valores nulos. Y que el
campo "codigo" es clave primaria y "auto_increment". Los dems campos permiten
valores nulos.
Ingresamos algunos registros:
insert into libros (titulo,autor,editorial,precio)
values('El aleph','Borges','Planeta',null);
ingresamos "null" para el precio, campo que permite valores nulos. Note que el valor
"null" no se coloca entre comillas porque no es una cadena de caracteres.
Si intentamos ingresar el valor "null" en un campo que no lo permite (titulo), aparece un
mensaje de error indicando tal situacin:
insert into libros (titulo,autor,editorial,precio)
values (null,'Paenza','Paidos',10.30);
Si intentamos ingresar el valor "null" para el campo "codigo", que es clave primaria y
"auto_increment", no lo tomar y seguir la secuencia de incremento:
insert into libros (codigo,titulo,autor,editorial,precio)
Podemos ingresar valores nulos en los campos que lo permiten, por ejemplo, en
"editorial":
insert into libros (titulo,autor,editorial,precio)
values ('Harry Potter y la piedra filosofal', 'J.K.
Rowling',null,30.00);
Ingresemos otros valores que nos servirn luego para verificar que los valores "null" son
diferentes de 0 y de cadenas vacas.
insert into libros (titulo,autor,editorial,precio)
values ('Matematica estas ahi','Paenza','Paidos',0);
insert into libros (titulo,autor,editorial,precio)
values ('Martin Fierro','Jose Hernandez','',22.50);
* from libros
editorial is null;
*from libros
editorial='';
Con la primera sentencia recuperamos los libros cuya editorial es "null"; con la segunda,
los libros cuya editorial guarda una cadena vaca.
drop table if exists libros;
primary key(codigo)
);
Para almacenar el cdigo de los libros, definimos un campo de tipo "integer unsigned"
porque guardaremos valores a partir de 1 en adelante (no valores negativos).
Para almacenar el precio de los libros, definimos un campo de tipo "float unsigned"
porque jams guardaremos un valor negativo.
Para almacenar la cantidad de libros disponibles, definimos un campo de tipo "integer
unsigned" porque el menor valor posible ser 0, nunca negativos.
drop table if exists libros;
describe libros;
Note que definimos el campo "sexo" de tipo "char", porque necesitamos solamente 1
caracter "f" o "m", que siempre ser fijo, con esta definicin ocupamos un byte.
drop table if exists visitantes;
);
describe visitantes;
Note que definimos el campo "cantidad" de tipo "smallint unsigned", esto es porque los
valores para este campo sern siempre positivos (mayores o iguales a 0), adems la
cantidad disponible no superar los 60000 aprox., as que no es adecuado usar int (cuyo
rango llega hasta 4000 millones aprox.), as ocupamos menos espacio (3 bytes para
mediumint contra 4 bytes para int). Es importante elegir el tipo de dato ms preciso.
Como en el campo "precio" almacenaremos valores entre 0.00 y 999.99 definimos el
campo como tipo "decimal (5,2)", as evitamos tantos decimales innecesarios que
tenamos antes con el tipo "float".
drop table if exists libros;
describe libros;
Note que no ingresamos los segundos y coloc por defecto "00" para ellos.
Actualizamos la hora de salida del vehculo con patente "ACD123":
update vehiculos set horasalida='11:45'
where patente='ACD123';
almacena "00:00:15".
drop table if exists vehiculos;
63 - Clave fornea.
Problema:
Trabajamos con las tablas "libros" y "editoriales" de una librera.
Si modificamos el tipo, longitud o atributos de una clave fornea, sta puede quedar
inhabilitada para hacer los enlaces.
Veamos un ejemplo:
alter table libros
modify codigoeditorial char(1);
El libro con cdigo de editorial "23" ("Paidos") ahora tiene "2" ("Emece") en
"codigoeditorial" y el libro con cdigo de editorial "15" ("Planeta") ahora almacena "1"
(valor inexistente en "editoriales").
Si buscamos coincidencia de cdigos en la tabla "editoriales":
select l.titulo,e.nombre
from libros as l
join editoriales as e
on l.codigoeditorial=e.codigo;
El resultado es errneo.
Las claves forneas y las claves primarias deben ser del mismo tipo para poder
enlazarse. Si modificamos una, debemos modificar la otra para que los valores se
correspondan.
Intentemos modificar la clave en "editoriales":
alter table editoriales
modify codigo char(1);
No lo permite porque si la modifica los valores para el campo clave quedan repetidos.
drop table libros, editoriales;
select l.titulo,e.nombre
from libros as l
join editoriales as e
on l.codigoeditorial=e.codigo;