BLOQUE II (temas 5, 6, 7, 8 y 9)
SQL CON MYSQL
"Evaluacin II"
Marca la casilla con la respuesta correcta
1. La clusula WHERE:
Selecciona
las
filas
seleccionadas
que
cumplan
una
condicin
Establece un criterio de ordenacin
Indica sobre qu tabla se est realizando la consulta
Modifica las filas de una tabla
2. Para ordenar de mayor a menor por salario y, a igual salario,
alfabticamente por apellido:
ORDER
BY
salario,apellido
ORDER
BY
apellido,salario
ORDER
BY
salario
DESC
DESC,apellido
ORDER BY salario DESC,apellido DESC
3. Para visualizar los tres empleados que ms salario ganan:
SELECT *
FROM
empleados
ORDER
BY salario
LIMIT 3;
SELECT * FROM empleados ORDER BY salario DESC LIMIT 3;
SELECT * FROM empleados ORDER BY salario LIMIT 1,3;
SELECT * FROM empleados ORDER BY salario DESC LIMIT 1,3;
4.
Las
funciones
de
grupo
exigen
GROUP
BY:
Siempre
Nunca
No siempre, si se considera que todas las filas de la tabla forman un nico
grupo
Da lo mismo
5. Las expresiones de columna a especificar en una SELECT con
clusula GROUP BY:
Son
las
Son
las
que
que
se
se
quiera
han
especificar
puesto
en
la
sin
otra
clusula
restriccin
GROUP
BY
Son las columnas o expresiones de agrupacin y/o funciones de grupo
Las funciones de columna que aparezcan en la clusula HAVING
6. La clusula HAVING:
Establece unas condiciones para la seleccin de grupos formados con
GROUP BY
Realiza lo mismo que la clusula WHERE
Sustituye a WHERE cuando existe GROUP BY
Ordena los resultados de la agrupacin
7. Para obtener el mayor salario de cada departamento:
SELECT
MAX(salario),dep_no
FROM
empleados
SELECT MAX(salario),dep_no FROM empleados GROUP BY salario
SELECT MAX(salario),dep_no FROM empleados GROUP BY dep_no
SELECT
MAX(salario),dep_no
MAX(salario)=dep_no
FROM
empleados
WHERE
8. Para seleccionar los departamentos con ms de 2 empleados:
SELECT dep_no,COUNT(*) FROM empleados GROUP BY emp_no
SELECT dep_no,COUNT(*) FROM empleados GROUP BY dep_no
SELECT dep_no,COUNT(*) FROM empleados GROUP BY emp_no
HAVING
COUNT(*)>2
SELECT dep_no,COUNT(*) FROM empleados GROUP BY dep_no
HAVING COUNT(*)>2
9. Una subconsulta consiste en:
Realizar
Utilizar
una
los
consulta
resultados
sobre
de
un
una
subconjunto
consulta
dentro
de
de
datos
otra
Almacenar resultados de una consulta para acceder a ellos en posteriores
consultas
Realizar una consulta despus de otra
10.Una subconsulta se describe en:
WHERE
HAVING
WHERE o HAVING
En cualquier clusula de la consulta principal
11. Cul sera la subconsulta correcta para obtener todos los
nmeros de pedido procedentes de clientes de 'BARCELONA':
SELECT pedido_no FROM pedidos
cliente_no
FROM
clientes
WHERE
WHERE cliente_no=(SELECT
localidad='BARCELONA');
SELECT pedido_no FROM pedidos WHERE cliente_no IN (SELECT
cliente_no
FROM
clientes
WHERE
localidad='BARCELONA');
SELECT pedido_no FROM pedidos WHERE cliente_no = (SELECT
cliente_no
FROM
clientes)
AND
localidad='BARCELONA';
SELECT pedido_no FROM pedidos WHERE cliente_no IN (SELECT
cliente_no FROM clientes) AND localidad='BARCELONA';
12. Cul sera la subconsulta correcta obtener los empleados que
ganan
memos
que
la
media
de
su
oficio?
SELECT * FROM empleados WHERE salario < ( SELECT AVG(salario)
FROM
empleados
);
(
SELECT * FROM empleados GROUP BY oficio HAVING salario <
SELECT AVG(salario) FROM empleados GROUP BY oficio);
SELECT * FROM empleados e1 WHERE salario < ( SELECT AVG(salario)
FROM
empleados
WHERE
oficio=e1.oficio);
SELECT * FROM empleados WHERE salario < ( SELECT AVG(salario)
FROM empleados e2 WHERE oficio=e2.oficio);
13. Una composicin o combinacin (JOIN) consiste en:
Obtener
Obtener
filas
todas
de
las
filas
ms
resultantes
de
de
una
multiplicar
tabla
tablas
Aplicar una condicin de seleccin a las filas resultantes de multiplicar tablas
Obtener el producto cartesiano de tablas
14. Para obtener los pedidos con nombres de cliente y de producto:
SELECT
pedido_no,nombre,descripcin,unidades
pedidos,productos,clientes;
FROM
SELECT
pedido_no,nombre,descripcin,unidades
pedidos,productos,clientes
WHERE
cliente_no=cliente_no
producto_no=producto_no;
FROM
AND
SELECT
pedido_no,nombre,descripcin,unidades
FROM
pedidos
p,productos
pr,clientes
c
WHERE
p.cliente_no=c.cliente_no
AND
p.producto_no=pr.producto_no;
SELECT
pedido_no,nombre,descripcin,unidades
FROM
pedidos
p,productos
pr,clientes
c
WHERE
p.cliente_no=c.cliente_no
AND
p.producto_no=pr.producto_no AND p.pedido=pr.pedido_no;
15. Para obtener cada nombre de empleado con el nombre de su
director:
SELECT e1.apellido Empleado,e2.apellido "Su director" FROM empleados
e1,empleados
e2
WHERE
e1.director=e2.emp_no;
SELECT e2.apellido Empleado,e2.apellido "Su director" FROM empleados
e1,empleados
e2
WHERE
e1.director=e2.emp_no;
SELECT apellido Empleado,apellido "Su director" FROM empleados
,empleados
WHERE
director=emp_no;
SELECT e1.apellido Empleado,e2.apellido "Su director" FROM empleados
e1,empleados e2 WHERE e2.director=e1.emp_no;
14.Para listar los clientes con sus pedidos, incluyendo aquellos que
no tengan ningn pedido:
SELECT c.cliente_no,nombre,pedido_no FROM clientes c RIGHT JOIN
pedidos
p
ON
c.cliente_no=p.cliente_no;
SELECT c.cliente_no,nombre,pedido_no FROM clientes c LEFT JOIN
pedidos
p
ON
c.cliente_no=p.cliente_no;
ON
SELECT c.cliente_no,nombre,pedido_no FROM clientes c JOIN pedidos p
c.cliente_no=p.cliente_no;
SELECT c.cliente_no,nombre,pedido_no FROM clientes c,pedidos p
WHERE c.cliente_no=p.cliente_no;
15. Para
crear una tabla a partir de otra ya creada:
No se puede
Hay que crearla idntica
Se puede crear a partir de una consulta sobre la tabla ya creada
Se puede hacer usando dos sentencias CREATE concatenadas
16.Suponiendo que disponemos de la tabla TNOMBRES (recin
creada y vaca) con una nica columna denominada C1. Para
introducir en ella todos los apellidos de los empleados cuyo
salario supera las 3000 Euros, escribiremos:
UPDATE tnombres SELECT apellido FROM empleados WHERE salario >
3000;
UPDATE tnombres SET c1 = apellido WHERE salario > 3000;
INSERT INTO tnombres SELECT apellido FROM empleados WHERE
salario > 3000;
Ninguna de las anteriores
17.Al crear una vista:
No se puede usar la clusula ORDER BY en la creacin de una vista
La consulta que define a una vista puede incluir a su vez una vista
Se puede crear a partir de una consulta que recupera informacin de varias
tablas relacionadas
Las tres anteriores son correctas
18.Al eliminar una vista, los datos de las tablas en las que se basa la
vista quedarn afectados:
Se eliminan todos los datos de las tablas en las que se basa la vista.
Se eliminan solamente las filas que estaban incluidas en la seleccin de la
vista.
Se
elimina
la
vista
Ninguna de las anteriores
las
tablas
vistas
asociadas.
BLOQUE II (temas 10,11 y 12)
SQL CON MYSQL
"Evaluacin III"
Marca la casilla con la respuesta correcta
1. Ventajas de las tablas MyISAM con respecto a las tablas InnoDB
(Marcar la respuesta falsa).
El acceso a los datos es ms rpido.
Consumen menos espacio de disco.
Permiten control de transacciones
Permiten crear tablas comprimidas.
2. Indicar cual de las siguientes afirmaciones es falsa con respecto a
las tablas InnoDB.
Permite definir integridad referencial entre tablas.
Permite bloqueo a nivel de fila.
Permite definir los datos de cada tabla en ficheros independientes separados
del resto de tablas.
Permite a los usuarios un mejor acceso concurrente a la informacin.
3. Si en la base de datos hay una tabla tipo MyISAM llamada
EMPLEADOS
necesariamente debe haber un fichero asociado llamado empleados.frm donde
estn los datos almacenados.
necesariamente debe haber un fichero asociado llamado empleados.frm donde
estn los ndices almacenados.
necesariamente debe haber un fichero asociado llamado empleados.MYD
donde estn los datos almacenados.
necesariamente debe haber un fichero asociado llamado empleados.MDI
donde estn los ndices almacenados.
4. Si estoy lanzando una sentencia del tipo C:\mysql\bin>myisamchk
-u ..\data\test\empleados Que estoy tratando de hacer?
Convertir
la
tabla
empleados
tipo
InnoDB.
Descomprimiendo la tabla empleados que se supone comprimida.
Optimizar
la
tabla
empleados
mediante
una
desfragmentacin.
Comprimiendo la tabla empleados que se supone descomprimida.
5. Indicar que sentencia es verdadera referida a la clusula
IDENTIFIED
BY
de
una
sentencia
GRANT.
Si el usuario no existe y se omite la clusula se crea el usuario sin contrasea.
Si el usuario existe y no se omite la clusula la contrasea que acompaa la
clusula
sustituye
la
anterior.
Si el usuario existe y se omite la clusula permanece vigente la contrasea
anterior.
Todas las anteriores son ciertas.
6. Indicar cual de las siguientes sentencias GRANT no tiene un error
de
sintaxis.
mysql>GRANT ALL PRIVILEGES ON *.* TO manuel@localhost
IDENTIFIED
BY
'algo'
FROM
GRANT
OPTION;
mysql> GRANT ALL PRIVILEGES TO manuel@"%" IDENTIFIED BY
'algo'
;
mysql> GRANT RELOAD, PROCESS ON *.* TO admin@localhost;
mysql> GRANT PRIVILEGES ON *.* TO manuel;
7. Indica cual de las siguientes utilidades de la distribucin de
MySQL no requiere de una comunicacin directa con el servidor
myisamchk
mysqlshow
mysqldump
mysqlimport
8. Que diferencia sucede con los usuarios pepe@localhost y
juan@localhost si se lanzan estas dos sentencias. 1- mysql> SET
PASSWORD FOR pepe@localhost='epep'; y 2- mysql> SET
PASSWORD
FOR
juan@localhost=PASSWORD('nuaj');
La
sentencia
tiene
La
sentencia
La
sentencia
error
encripta
tiene
la
error
de
sintaxis
password
de
la
la
sintaxis
la
est
sentencia
1
est
correcta.
1
no.
correcta.
La sentencia 1 encripta la password la sentencia 2 no
9. Indica la afirmacin correcta con respecto a mysqldump y
mysqlhotcopy
mysqlhotcopy
mysqldump
es
es
solo
solo
para
para
tablas
tablas
InnoDB.
MyISAM.
mysqlhotcopy solo funciona si el servidor no est en ejecucin.
Las tres anteriores son falsas.
11. Si desde la consola de comandos se lanza la siguiente sentencia
shell>mysql
-h
mihost.midominio.es
-u
juan
-p
prueba
Se intenta ejecutar el cliente mysql pero no se llega a conectar con la base de
datos por error en la sintaxis.
Se intenta ejecutar el cliente mysql para acceder a un servidor situado en la
mquina mihost.midominio.es mediante el usuario Juan con password prueba.
Se intenta ejecutar el cliente mysql para acceder a la base de datos prueba de
un servidor situado en la mquina mihost.midominio.es mediante el usuario Juan
que tiene password.
Se intenta ejecutar el cliente mysql para acceder a la base de datos prueba de
un servidor situado en la mquina mihost.midominio.es mediante el usuario Juan
que no tiene password.
12.Indica la respuesta correcta
El eliminar todos los privilegios de un usuario no supone la eliminacin del
usuario.
Se puede eliminar un usuario mediante DROP USER aunque aun conserve
privilegios.
Se puede eliminar completamente un usuario mediante REVOKE ALL
PRIVILEGES.
Las tres anteriores respuestas son falsas.
13. La
siguiente sentencia LOAD DATA LOCAL INFILE
'C:\\temp\\misdatos.txt'
INTO
TABLE
mitabla
FIELDS TERMINATED BY '#' ENCLOSED BY '"' LINES
TERMINATED BY '\n';
Busca el fichero misdatos.txt en la carpeta temp del servidor.
Busca el fichero misdatos.txt en la carpeta temp del cliente.
Busca primero el fichero misdatos.txt en la carpeta temp del servidor y si no
encuentra
busca
en
la
carpeta
temp
del
cliente.
Busca primero el fichero misdatos.txt en la carpeta temp del cliente y si no
encuentra busca en la carpeta temp del servidor.
13. Indica cual de las siguientes afirmaciones no es verdadera con
respecto al proceso de la replicacin de datos:
Permitir
configurar
el
balanceo
de
carga
en
las
consultas.
Permite aumentar la fiabilidad ante las cadas de los servidores.
Permite
configurar el balanceo
de carga en las
transacciones.
Incluye la posibilidad de implementar un servicio de copia de seguridad sobre
el esclavo sin molestar al maestro y por tanto a los usuarios.
14.Indica cual de las siguientes no es una regla valida para
establecer una arquitectura de replicacin:
Un
maestro
Un
esclavo
puede
solo
tener
debe
muchos
tener
un
esclavos.
maestro.
Servidores maestros pueden ser a su vez esclavos de otros maestros.
Servidores esclavos no pueden ser a su vez maestros de otros esclavos.
15.Indica cual es la condicin indispensable para ejecutar dos
servidores MySQL en la misma mquina.
Deben escuchar
Deben
tener
Deben
acceder
las peticiones
dos
a
por dos
directorios
distintos
Las tres anteriores son ciertas.
de
fichero
puertos TCP distintos.
datos
de
diferentes.
configuracin.
16. Indica cual de las siguientes sentencias es correcta para crear un
ndice ordinario llamado miindice sobre el campo micampo de la
tabla
mitabla.
ALTER
CREATE
TABLE
mitabla
INDEX
CREATE
ADD
miindice
INDEX
ON
miindice
INDEX
miindice(micampo);
micampo
FROM
FROM
mitabla
mitabla;
(micampo);
Todas son correctas.
16.Sobre los tipos de ndices marcar cual es la respuesta correcta de
las siguientes:
Los ndices ordinarios son ndices primarios que no admiten valores
duplicados.
Los ndices ordinarios son ndices que no son primarios y permiten valores
duplicados.
Los ndices ordinarios son ndices primarios que admiten valores duplicados.
Las tres anteriores son falsas, por lo tanto, esta es la respuesta correcta.
18. Si en el fichero my.ini tenemos la siguiente entrada en la seccin
[mysqld]: log Que se le esta indicando al servidor MySQL?:
Que
se
activa
el
binary
log
file.
Que
se
activa
el
query
log
file.
Que
se
activa
el
error
log
file.
un
servicio
de
activado
el
binary
log
file.
Que se activa el update log file.
19.
Para
poder
iniciar
tener
replicacin:
Es
aconsejable
Es
necesario
tener
activado
el
query
log
file.
Es
necesario
tener
activado
el
binary
log
file.
Es aconsejable tener activado el query log file.
20. Si se lanza la siguiente sentencia desde una ventana de
comandos:
mysqldump -d test > test.sql .Qu se esta almacenando en test.sql?
Solo los datos de la base de datos test no la estructura de sus tablas.
Solo la estructura de tablas la base de datos test no sus datos.
Solo la estructura y los datos de la base de datos test no sus relaciones de
integridad.
Todas las anteriores son falsas
Parte III, tema 11
Administracin de MySQL (I)
Obligatorio
A partir del fichero ASCII TituloAutorNacionalidad.txt que tiene la siguiente
informacin
"Ttulo"#"Autor"#"Nacionalidad"
"Las
lecciones
de
las
cosas"#"Luis
Mateo
Dez"#"Espaol"
"El
secuestro
de
Miss
Blandish"#"James
Hadley
Chase"#"Norteamericano"
"Una
princesa
en
Berln"#"A.
R.
G.
Solmssen"#"Alemn"
"Solal"#"Albert
Cohen"#"Norteamericano"
"Los
Indiferentes"#"Alberto
Moravia"#"Italiano"
"El
cabra"#"Alexandre
Jardin"#"Francs"
"Asuntos
Exteriores"#"Alison
Lurie"#"Britnico"
"La
virtud
sobre
Lorin
Jones"#"Alison
Lurie"#"Britnico"
"Amor
y
amistad"#"Alison
Lurie"#"Britnico"
etc,etc.
Se quiere importar a MYSQL dicha informacin pero optimizando el
almacenamiento de tal forma que la informacin resultante quede
estructurada de la siguiente forma
Tabla NACIONALIDADES
id
nacionalidad
1
Espaol
2
Norteamericano
3
Alemn
4
Italiano
5
Francs
6
Britnico
7
Asiatico
etc,etc,..
Tabla AUTORES
id
autor
1
A. R. G. Solmssen
2
Alan Bennett
3
Albert Cohen
4
Alberto Moravia
5
Alexandre Jardin
6
Alison Lurie
7
Almudena Grandes
etc,etc,..
Tabla TITULOS
id
autor
Las lecciones
1
cosas
id_nac
3
6
2
4
5
6
1
id_aut
de
las
2
3
4
5
6
7
El secuestro de Miss
6
Blandish
Una princesa en Berln 2
Solal
4
Los Indiferentes
5
El cabra
6
Asuntos Exteriores
1
Enunciado
Se pide:
1. Debes acceder al servidor como root y crear la base de datos LIBROS y
a continuacin crear un usuario con password llamado librero con
derechos totales en la base de datos LIBROS y con el permiso FILE que
permite importar ficheros a tablas y exportar tablas a ficheros.
2. Establecer una conexin al servidor MySQL con el usuario librero y
acceder a la base de datos LIBROS. Realizar con este usuario las tareas
necesarias de administracin de BD para pasar la informacin desde el
fichero TituloAutorNacionalidad.txt a las tablas NACIONALIDADES ,
AUTORES y TITULOS. Habr que tener en cuenta que los campos
llamados Id en cada una de las tablas deben ser de tipo auto_increment.
3. Incluye las restricciones de integridad que consideres necesarias entre
las tres tablas.
4. Genera los ficheros ASCII nacionalidades.txt, autores.txt y titulos.txt
exportando las tablas NACIONALIDADES , AUTORES y TITULOS como
ficheros de texto de campos delimitados. El carcter delimitador ser # y
los campos de texto deben ir entrecomillados
Todas estas tareas deben quedar reflejadas en sentencias sql y guardadas
en un fichero de script llamado, por ejemplo, act1_administracion.sql con
los comentarios necesarios que consideres pertinentes.
Si encuentras problemas o dificultades en la realizacin del ejercicio, no
tengas duda en preguntar al tutor o incluso enviarle las sentencias que no
funcionan como deben, para que lo vea y te ayude en la resolucin de
esta actividad. No obstante, ten en cuenta que no se trata de un ejercicio
de autoevaluacin, sino de evaluacin por parte del tutor, por lo cual
debes intentar resolverlo por tu cuenta.
Cuando acabes la actividad propuesta, comprime el fichero .sql en nico
fichero tipo .zip o .rar y envalo al tutor o tutora, para que pueda
comprobar el grado de tu aprendizaje y orientarte adecuadamente, si lo
precisas.
Parte III, tema 12
Administracin de MySQL (II)
Obligatorio
Enunciado
Este ejercicio consiste en hacer una simulacin de un error de actuacin
sobre una base de datos que obliga al Administrador del servidor de base
de datos MySQL a iniciar un proceso de recuperacin de los datos a partir
de la ltima copia de seguridad realizada y posteriormente ejecutar las
sentencias almacenadas en el fichero de log para dejar la base de datos
exactamente como se encontraba inmediatamente antes de producirse el
error.
Pasos a dar para la ejecucin de la prctica.
1. Activa el binary log en el servidor MySQL y comprueba su
funcionamiento correcto. (Lee detenidamente el punto 12.1.4 de la
Documentacin del curso)
2. Crea una base de datos para nuestra prueba llamado por ejemplo
PRUEBACOPIA y crgala con dos tablas a partir del script siguiente:
CREATE DATABASE PRUEBACOPIA;
USE PRUEBACOPIA;
CREATE
TABLE
(
DEP_NO
DNOMBRE
LOCALIDAD
CONSTRAINT
PK_DEPARTAMENTOS_DEP_NO
) engine=myisam;
PRIMARY
DEPARTAMENTOS
INT(2),
VARCHAR(14),
VARCHAR(10),
KEY
(DEP_NO)
INSERT
INTO
DEPARTAMENTOS
VALUES(10,
'CONTABILIDAD',
'BARCELONA');
INSERT
INTO
DEPARTAMENTOS
VALUES(20,
'INVESTIGACION',
'VALENCIA');
INSERT INTO DEPARTAMENTOS VALUES(30, 'VENTAS', 'MADRID');
INSERT
INTO
DEPARTAMENTOS
VALUES(40,
'PRODUCCION',
'SEVILLA');
CREATE
(
APELLIDO
TABLE
EMP_NO
EMPLEADOS
INT(4),
VARCHAR(8),
OFICIO
VARCHAR(10),
DIRECTOR
INT(4),
FECHA_ALTA
DATE,
SALARIO
FLOAT(6,2),
COMISION
FLOAT(6,2),
DEP_NO
INT
(2),
CONSTRAINT
PK_EMPLEADOS_EMP_NO
PRIMARY
KEY
(EMP_NO),
CONSTRAINT
FK_EMP_DIRECTOR
FOREIGN
KEY
(DIRECTOR)
REFERENCES
EMPLEADOS(EMP_NO),
CONSTRAINT
FK_EMP_DEP_NO
FOREIGN
KEY
(DEP_NO)
REFERENCES
DEPARTAMENTOS(DEP_NO)
)engine=myisam;
INSERT
INTO
EMPLEADOS
VALUES
(7839,'REY',
'PRESIDENTE',NULL,'1981-11-17',6000.00,
NULL,
10);
INSERT INTO EMPLEADOS VALUES (7698,'GARRIDO', 'DIRECTOR',
7839,'1981-5-1',3850.00,
NULL,
30);
INSERT INTO EMPLEADOS VALUES (7782,'MARTINEZ','DIRECTOR',
7839,'1981-6-1',2450.00,
NULL,
10);
INSERT
INTO
EMPLEADOS
VALUES(7499,'ALONSO',
'VENDEDOR',
7698,'1981-2-20',1400.00,400.00,30);
INSERT INTO EMPLEADOS VALUES (7521,'LOPEZ', 'EMPLEADO',
7782,'1981-5-8',1350.00,
NULL,10);
INSERT INTO EMPLEADOS VALUES (7654,'MARTIN', 'VENDEDOR',
7698,'1981-9-28',1500.00,
1600.00,
30);
INSERT INTO EMPLEADOS VALUES (7844,'CALVO', 'VENDEDOR',
7698,'1981-9-8',1800.00,
0,
30);
INSERT
INTO
EMPLEADOS
VALUES
(7876,'GIL',
'ANALISTA',
7782,'1982-5-6',3350.00,
NULL,
20);
INSERT INTO EMPLEADOS VALUES (7900,'JIMENEZ', 'EMPLEADO',
7782,'1983-3-24',1400.00, NULL, 20);
3. Crear mediante mysqldump la copia de seguridad completa de la base
datos PRUEBACOPIA del servidor. (Lee detenidamente el punto 11.5.1 de
la Documentacin del curso).
4. Inmediatamente despus de efectuada la copia reiniciamos el servidor
mysql. Esto obliga a que se genere un nuevo fichero binary log
inmediatamente despus de cada proceso de backup.
5. Aadimos algunos cambios a nuestra base de datos de prueba para la
comprobacin posterior. (por ejemplo borramos determinadas filas de una
tabla y creamos una tabla nueva en la base de datos PRUEBACOPIA).
6. Se corrompe la base de datos PRUEBACOPIA o se produce
accidentalmente alguna transaccin no deseada. En nuestro caso
borramos, se supone que por descuido, la base de datos PRUEBACOPIA.
El objetivo es recuperar las tablas a la situacin que tenan justo antes de
producirse esa sentencia errnea de borrado.
7. Antes de proceder a recuperar la copia reiniciamos de nuevo el
servidor para que se inicie un nuevo fichero binary log .
8. Restauramos la ultima copia de seguridad realizada. (Lee
detenidamente el punto 11.5.1 de la Documentacin del curso).
9. Ejecutamos los binary log a partir de la ltima copia efectuada
mediante la herramienta mysqlbinlog. Tenemos que determinar que
fichero binary log es el que tiene los cambios realizados entre la creacin
de la copia de seguridad y la recuperacin de dicha copia. Habr que
analizar con cuidado que parte del fichero log tenemos que relanzar
Ejemplo:
C:\mysql4\bin>mysqlbinlog --port=3308 --start-position=171 --stopposition=246 ..\data\Portatil-bin.000005 | mysql --port=3308
10. Comprobamos que la base de datos se encuentra en el estado previo
al momento de producirse el borrado accidental.
Todos los comandos y sentencias que se realicen en este ejercicio de
simulacin de restauracin completa de una base de datos deben quedar
recogidos en un documento llamado restaurar.txt con los comentarios
necesarios que consideris pertinentes.
BLOQUE III (temas 1, 2, 3 y 4)
SQL CON MYSQL
"Evaluacin I"
Marca la casilla con la respuesta correcta
1. El lenguaje SQL permite:
Controlar
Crear
Recuperar
el
objetos
la
acceso
en
informacin
a
una
almacenada
la
informacin
base
en
de
la
base
datos
de
datos
Todas las anteriores
2. En el modelo relacional la restriccin que se utiliza para
relacionar dos tablas es:
PRIMARY KEY
FOREIGN KEY
UNIQUE
CHECK
3. Siendo el valor de A true (verdadero) y el de B null, el resultado
de la expresin A AND B ser:
true
false
null
ninguno de los anteriores
4. Indicar cul de los siguientes identificadores es incorrecto:
b2-ax
ax_b2
axb2
xa2b
5. Indicar cul de las siguientes expresiones es la correcta para
comprobar si el valor de COMISION es nulo (carece de valor):
COMISION IS NULL
COMISION = 0
COMISION = NULL
Cualquiera de los anteriores
6. Para comprobar si un nombre empieza por 'A', qu expresin
sera la correcta?:
nombre='A%'
Nombre LIKE 'A%'
Nombre LIKE 'A_'
Nombre LIKE '%A'
7. Para mostrar los empleados del departamento 10 y del 30 qu
clausula WHERE sera la adecuada:
Dep_no=10 AND dep_no=30
Dep_no=10 OR dep_no=30
Dep_no BETWEEN 10 AND 30
Dep_no IN (10,20,30)
8. Para buscar un salario entre 1500 y 3500, ambos inclusives:
Salario=1500 OR salario=3500
Salario>1500 AND salario<3500
Salario>1500 OR salario<3500
Salario BETWEEN 1500 AND 3500
9.
Para
crear
una
tabla
se
necesita:
Un nombre de tabla
Las definiciones de las columnas
El
nombre
de
la
tabla
las
definiciones
de
las
columnas
El nombre de la tabla y sus restricciones
6. Para indicar que una columna va a ser clave principal:
NOT NULL
FOREIGN KEY
CHECK
PRIMARY KEY
7. Para indicar que una columna va a ser clave ajena se necesitan
las clusulas:
FOREIGN KEY
FOREIGN KEY con REFERENCES
FOREIGN KEY con REFERENCES y ON DELETE CASCADE
FOREIGN KEY y PRIMARY KEY
8. Una restriccin se puede definir a nivel de columna:
Siempre se puede definir
Si
no
Si
le
afecta
queremos
a
dar
una
un
sola
nombre
columna
Si no le queremos dar un nombre y afecta a una sola columna
13.
La
Es
de
clusula
obligatoria
ON
para
DELETE
crear
CASCADE:
una
clave
ajena
Es obligatoria para crear una clave ajena que permita el borrado automtico
filas
cuando
se
ha
borrado
la
clave
principal
Sirve
para
borrar
filas
seleccionadas
con
un
WHERE
Evita el borrado automtico de filas cuando se ha borrado la clave principal
14. Para
aadir
una
columna
una
tabla
ya
creada:
ALTER TABLE tabla NombreColumna;
ALTER TABLE tabla;
ALTER TABLE tabla ADD NombreColumna ;
ALTER TABLE tabla ADD NombreColumna TipoDato;
15. Para cambiar de nombre la tabla Uno por Dos podemos utilizar:
ALTER
TABLE
Uno
RENAME
TO
Dos;
RENAME TABLE Uno TO Dos;
Los dos anteriores
Ninguno de los anteriores
16. Indicar cul de los siguientes comandos de insercin es
incorrecto:
INSERT INTO departamentos VALUES (50,'MARKETING', NULL);
INSERT INTO departamentos VALUES (50, NULL, 'BILBAO');
INSERT
INTO
departamentos
VALUES
(50,
'MARKETING');
Todos son correctos
17. Indicar cul de los siguientes comandos de insercin es
incorrecto:
INSERT
INTO
('BILBAO',50);
departamentos
(dnombre,
localidad)
VALUES
INSERT
INTO
(50,'MARKETING');
departamentos
(dep_no,
dnombre)
VALUES
INSERT
INTO
('MARKETING',50);
departamentos
(dnombre,
dep_no)
VALUES
INSERT INTO departamentos (dnombre, localidad, dep_no) VALUES
( 'MARKETING',NULL, 50);
18. Para incrementar en 100 Euros el salario de todos los empleados
escribiremos:
UPDATE salario FROM empleados WHERE salario = salario + 100;
UPDATE
salario
FROM
empleados
SET
salario
100;
UPDATE empleados FROM salario WHERE salario = salario + 100;
UPDATE empleados SET salario = salario + 100;
19.
La
instruccin
Es
DELETE
incorrecta
FROM
empleados:
errnea
Elimina
el
ltimo
empleado
de
la
tabla
empleados
Elimina
el
primer
empleado
de
la
tabla
empleados
Elimina todos los empleados de la tabla empleados
19. Si existe una clave ajena en la tabla EMPLEADOS referenciando
a la tabla DEPARTAMENTOS sin la opcin modificado en cascada,
podremos
modificar
un
departamento:
Siempre
Solo si no tiene empleados
Nunca
Siempre que hagamos primero la modificacin correspondiente en la tabla
EMPLEADOS
BLOQUE III (temas 5, 6, 7, 8 y 9)
SQL CON MYSQL
"Evaluacin II"
Marca la casilla con la respuesta correcta
1. La clusula WHERE:
Selecciona
las
Establece
Indica
filas
seleccionadas
un
sobre
qu
que
criterio
tabla
se
cumplan
de
est
una
condicin
ordenacin
realizando
la
consulta
Modifica las filas de una tabla
2. Para ordenar de mayor a menor por salario y, a igual salario,
alfabticamente
por
apellido:
ORDER BY salario,apellido
ORDER
BY
apellido,salario
ORDER
BY
salario
DESC
DESC,apellido
ORDER BY salario DESC,apellido DESC
3. Para visualizar los tres empleados que ms salario ganan:
SELECT *
FROM
empleados
ORDER
BY salario
LIMIT 3;
SELECT * FROM empleados ORDER BY salario DESC LIMIT 3;
SELECT * FROM empleados ORDER BY salario LIMIT 1,3;
SELECT * FROM empleados ORDER BY salario DESC LIMIT 1,3;
4.
Las
funciones
de
grupo
exigen
GROUP
BY:
Siempre
Nunca
No siempre, si se considera que todas las filas de la tabla forman un nico
grupo
Da lo mismo
5. Las expresiones de columna a especificar en una SELECT con
clusula
GROUP
BY:
Son
las
Son
las
que
que
se
se
quiera
han
especificar
puesto
en
la
sin
otra
clusula
restriccin
GROUP
BY
Son las columnas o expresiones de agrupacin y/o funciones de grupo
Las funciones de columna que aparezcan en la clusula HAVING
6.
La
clusula
HAVING:
Establece unas condiciones para la seleccin de grupos formados con
GROUP
BY
Realiza
Sustituye
lo
mismo
que
WHERE
cuando
la
clusula
existe
WHERE
GROUP
BY
Ordena los resultados de la agrupacin
7. Para obtener el mayor salario de cada departamento:
SELECT
MAX(salario),dep_no
FROM
empleados
SELECT MAX(salario),dep_no FROM empleados GROUP BY salario
SELECT MAX(salario),dep_no FROM empleados GROUP BY dep_no
SELECT
MAX(salario),dep_no
MAX(salario)=dep_no
FROM
empleados
WHERE
8. Para seleccionar los departamentos con ms de 2 empleados:
SELECT dep_no,COUNT(*) FROM empleados GROUP BY emp_no
SELECT dep_no,COUNT(*) FROM empleados GROUP BY dep_no
SELECT dep_no,COUNT(*) FROM empleados GROUP BY emp_no
HAVING
COUNT(*)>2
SELECT dep_no,COUNT(*) FROM empleados GROUP BY dep_no
HAVING COUNT(*)>2
9.
Una
Realizar
Utilizar
una
los
subconsulta
consulta
consiste
sobre
resultados
de
un
una
en:
subconjunto
consulta
dentro
de
datos
de
otra
Almacenar resultados de una consulta para acceder a ellos en posteriores
consultas
Realizar una consulta despus de otra
10.
Una
subconsulta
se
describe
en:
WHERE
HAVING
WHERE
HAVING
En cualquier clusula de la consulta principal
11. Cul sera la subconsulta correcta para obtener todos los
nmeros de pedido procedentes de clientes de 'BARCELONA':
SELECT pedido_no FROM pedidos
cliente_no
FROM
clientes
WHERE
WHERE cliente_no=(SELECT
localidad='BARCELONA');
SELECT pedido_no FROM pedidos WHERE cliente_no IN (SELECT
cliente_no
FROM
clientes
WHERE
localidad='BARCELONA');
SELECT pedido_no FROM pedidos WHERE cliente_no = (SELECT
cliente_no
FROM
clientes)
AND
localidad='BARCELONA';
SELECT pedido_no FROM pedidos WHERE cliente_no IN (SELECT
cliente_no FROM clientes) AND localidad='BARCELONA';
12. Cul sera la subconsulta correcta obtener los empleados que
ganan
memos
que
la
media
de
su
oficio?
SELECT * FROM empleados WHERE salario < ( SELECT AVG(salario)
FROM
empleados
);
SELECT * FROM empleados GROUP BY oficio HAVING salario <
SELECT
AVG(salario)
FROM
empleados
GROUP
BY
oficio);
SELECT * FROM empleados e1 WHERE salario < ( SELECT AVG(salario)
FROM
empleados
WHERE
oficio=e1.oficio);
SELECT * FROM empleados WHERE salario < ( SELECT AVG(salario)
FROM empleados e2 WHERE oficio=e2.oficio);
13. Una composicin o combinacin (JOIN) consiste en:
Obtener
Obtener
filas
todas
de
las
filas
ms
resultantes
de
de
una
multiplicar
tabla
tablas
Aplicar una condicin de seleccin a las filas resultantes de multiplicar tablas
Obtener el producto cartesiano de tablas
14. Para obtener los pedidos con nombres de cliente y de producto:
SELECT
pedido_no,nombre,descripcin,unidades
pedidos,productos,clientes;
FROM
SELECT
pedido_no,nombre,descripcin,unidades
pedidos,productos,clientes
WHERE
cliente_no=cliente_no
producto_no=producto_no;
FROM
AND
SELECT
pedido_no,nombre,descripcin,unidades
FROM
pedidos
p,productos
pr,clientes
c
WHERE
p.cliente_no=c.cliente_no
AND
p.producto_no=pr.producto_no;
SELECT
pedido_no,nombre,descripcin,unidades
FROM
pedidos
p,productos
pr,clientes
c
WHERE
p.cliente_no=c.cliente_no
AND
p.producto_no=pr.producto_no AND p.pedido=pr.pedido_no;
15. Para obtener cada nombre de empleado con el nombre de su
director:
SELECT e1.apellido Empleado,e2.apellido "Su director" FROM empleados
e1,empleados
e2
WHERE
e1.director=e2.emp_no;
SELECT e2.apellido Empleado,e2.apellido "Su director" FROM empleados
e1,empleados
e2
WHERE
e1.director=e2.emp_no;
SELECT apellido Empleado,apellido "Su director" FROM empleados
,empleados
WHERE
director=emp_no;
SELECT e1.apellido Empleado,e2.apellido "Su director" FROM empleados
e1,empleados e2 WHERE e2.director=e1.emp_no;
16. Para listar los clientes con sus pedidos, incluyendo aquellos que
no
tengan
ningn
pedido:
SELECT c.cliente_no,nombre,pedido_no FROM clientes c RIGHT JOIN
pedidos
p
ON
c.cliente_no=p.cliente_no;
SELECT c.cliente_no,nombre,pedido_no FROM clientes c LEFT JOIN
pedidos
p
ON
c.cliente_no=p.cliente_no;
SELECT c.cliente_no,nombre,pedido_no FROM clientes c JOIN pedidos p
ON
c.cliente_no=p.cliente_no;
SELECT c.cliente_no,nombre,pedido_no FROM clientes c,pedidos p
WHERE c.cliente_no=p.cliente_no;
17. Para crear una tabla a partir de otra ya creada:
No
se
Hay
que
puede
crearla
idntica
Se puede crear a partir de una consulta sobre la tabla ya creada
Se puede hacer usando dos sentencias CREATE concatenadas
18. Suponiendo que disponemos de la tabla TNOMBRES (recin
creada y vaca) con una nica columna denominada C1. Para
introducir en ella todos los apellidos de los empleados cuyo salario
supera
las
3000
Euros,
escribiremos:
UPDATE tnombres SELECT apellido FROM empleados WHERE salario >
3000;
UPDATE tnombres SET c1 = apellido WHERE salario > 3000;
INSERT INTO tnombres SELECT apellido FROM empleados WHERE
salario
>
3000;
Ninguna de las anteriores
19.
Al
crear
una
vista:
No se puede usar la clusula ORDER BY en la creacin de una vista
La consulta que define a una vista puede incluir a su vez una vista
Se puede crear a partir de una consulta que recupera informacin de varias
tablas
relacionadas
Las tres anteriores son correctas
20. Al eliminar una vista, los datos de las tablas en las que se basa la
vista
quedarn
afectados:
Se eliminan todos los datos de las tablas en las que se basa la vista.
Se eliminan solamente las filas que estaban incluidas en la seleccin de la
vista.
Se
elimina
la
vista
Ninguna de las anteriores
las
tablas
vistas
asociadas.
BLOQUE III (temas 10,11 y 12)
SQL CON MYSQL
"Evaluacin III"
Marca la casilla con la respuesta correcta
1. Ventajas de las tablas MyISAM con respecto a las tablas InnoDB
(Marcar
la
respuesta
falsa).
El
acceso
Consumen
los
datos
menos
Permiten
es
espacio
control
de
ms
de
rpido.
disco.
transacciones
Permiten crear tablas comprimidas.
2. Indicar cual de las siguientes afirmaciones es falsa con respecto a
las
tablas
InnoDB.
Permite
Permite
del
definir
bloqueo
integridad
a
referencial
nivel
entre
de
tablas.
fila.
Permite definir los datos de cada tabla en ficheros independientes separados
resto
de
tablas.
Permite a los usuarios un mejor acceso concurrente a la informacin.
3. Si en la base de datos hay una tabla tipo MyISAM llamada
EMPLEADOS
necesariamente debe haber un fichero asociado llamado empleados.frm donde
estn
los
datos
almacenados.
necesariamente debe haber un fichero asociado llamado empleados.frm donde
estn
los
ndices
almacenados.
necesariamente debe haber un fichero asociado llamado empleados.MYD
donde
estn
los
datos
almacenados.
necesariamente debe haber un fichero asociado llamado empleados.MDI
donde estn los ndices almacenados.
4. Si estoy lanzando una sentencia del tipo C:\mysql\bin>myisamchk
-u ..\data\test\empleados Que estoy tratando de hacer?
Convertir
la
tabla
empleados
tipo
InnoDB.
Descomprimiendo la tabla empleados que se supone comprimida.
Optimizar
la
tabla
empleados
mediante
una
desfragmentacin.
Comprimiendo la tabla empleados que se supone descomprimida.
5. Indicar que sentencia es verdadera referida a la clusula
IDENTIFIED
BY
de
una
sentencia
GRANT.
Si el usuario no existe y se omite la clusula se crea el usuario sin contrasea.
Si el usuario existe y no se omite la clusula la contrasea que acompaa la
clusula
sustituye
la
anterior.
Si el usuario existe y se omite la clusula permanece vigente la contrasea
anterior.
Todas las anteriores son ciertas.
6. Indicar cual de las siguientes sentencias GRANT no tiene un error
de
sintaxis.
mysql>GRANT ALL PRIVILEGES ON *.* TO manuel@localhost
IDENTIFIED
BY
'algo'
FROM
GRANT
OPTION;
mysql> GRANT ALL PRIVILEGES TO manuel@"%" IDENTIFIED BY
'algo'
;
mysql> GRANT RELOAD, PROCESS ON *.* TO admin@localhost;
mysql> GRANT PRIVILEGES ON *.* TO manuel;
7. Indica cual de las siguientes utilidades de la distribucin de
MySQL no requiere de una comunicacin directa con el servidor
myisamchk
mysqlshow
mysqldump
mysqlimport
8. Que diferencia sucede con los usuarios pepe@localhost y
juan@localhost si se lanzan estas dos sentencias. 1- mysql> SET
PASSWORD FOR pepe@localhost='epep'; y 2- mysql> SET
PASSWORD
FOR
juan@localhost=PASSWORD('nuaj');
La
sentencia
La
sentencia
La
sentencia
tiene
error
encripta
tiene
la
error
de
sintaxis
password
de
la
la
sintaxis
la
est
sentencia
1
est
correcta.
1
no.
correcta.
La sentencia 1 encripta la password la sentencia 2 no
9. Indica la afirmacin correcta con respecto a mysqldump y
mysqlhotcopy
mysqlhotcopy
mysqldump
es
es
solo
solo
para
para
tablas
tablas
InnoDB.
MyISAM.
mysqlhotcopy solo funciona si el servidor no est en ejecucin.
Las tres anteriores son falsas.
10. Si desde la consola de comandos se lanza la siguiente sentencia
shell>mysql -h mihost.midominio.es -u juan -p prueba
Se intenta ejecutar el cliente mysql pero no se llega a conectar con la base de
datos
por
error
en
la
sintaxis.
Se intenta ejecutar el cliente mysql para acceder a un servidor situado en la
mquina mihost.midominio.es mediante el usuario Juan con password prueba.
Se intenta ejecutar el cliente mysql para acceder a la base de datos prueba de
un servidor situado en la mquina mihost.midominio.es mediante el usuario Juan
que
tiene
password.
Se intenta ejecutar el cliente mysql para acceder a la base de datos prueba de
un servidor situado en la mquina mihost.midominio.es mediante el usuario Juan
que no tiene password.
11.
Indica
la
respuesta
correcta
El eliminar todos los privilegios de un usuario no supone la eliminacin del
usuario.
Se puede eliminar un usuario mediante DROP USER aunque aun conserve
privilegios.
Se puede eliminar completamente un usuario mediante REVOKE ALL
PRIVILEGES.
Las tres anteriores respuestas son falsas.
12.
La
siguiente
sentencia
LOAD
DATA
LOCAL
INFILE
'C:\\temp\\misdatos.txt'
INTO
TABLE
mitabla
FIELDS TERMINATED BY '#' ENCLOSED BY '"'
LINES
TERMINATED
BY
'\n';
Busca el fichero misdatos.txt en la carpeta temp del servidor.
Busca el fichero misdatos.txt en la carpeta temp del cliente.
Busca primero el fichero misdatos.txt en la carpeta temp del servidor y si no
encuentra
busca
en
la
carpeta
temp
del
cliente.
Busca primero el fichero misdatos.txt en la carpeta temp del cliente y si no
encuentra busca en la carpeta temp del servidor.
13. Indica cual de las siguientes afirmaciones no es verdadera con
respecto al proceso de la replicacin de datos:
Permitir
configurar
el
balanceo
de
carga
en
las
consultas.
Permite aumentar la fiabilidad ante las cadas de los servidores.
Permite
configurar el balanceo
de carga en las
transacciones.
Incluye la posibilidad de implementar un servicio de copia de seguridad sobre
el esclavo sin molestar al maestro y por tanto a los usuarios.
14. Indica cual de las siguientes no es una regla valida para
establecer
una
arquitectura
de
replicacin:
Un
maestro
Un
esclavo
puede
solo
tener
debe
muchos
tener
un
esclavos.
maestro.
Servidores maestros pueden ser a su vez esclavos de otros maestros.
Servidores esclavos no pueden ser a su vez maestros de otros esclavos.
15. Indica cual es la condicin indispensable para ejecutar dos
servidores
MySQL
en
la
misma
mquina.
Deben escuchar
Deben
tener
Deben
acceder
las peticiones
dos
por dos
directorios
distintos
puertos TCP distintos.
de
datos
fichero
de
diferentes.
configuracin.
Las tres anteriores son ciertas.
16. Indica cual de las siguientes sentencias es correcta para crear un
ndice ordinario llamado miindice sobre el campo micampo de la
tabla
mitabla.
ALTER
CREATE
TABLE
mitabla
INDEX
CREATE
ADD
miindice
INDEX
ON
miindice
INDEX
micampo
FROM
miindice(micampo);
FROM
mitabla
mitabla;
(micampo);
Todas son correctas.
17. Sobre los tipos de ndices marcar cual es la respuesta correcta de
las
siguientes:
Los ndices ordinarios son ndices primarios que no admiten valores
duplicados.
Los ndices ordinarios son ndices que no son primarios y permiten valores
duplicados.
Los ndices ordinarios son ndices primarios que admiten valores duplicados.
Las tres anteriores son falsas, por lo tanto, esta es la respuesta correcta.
18. Si en el fichero my.ini tenemos la siguiente entrada en la seccin
[mysqld]: log Que se le esta indicando al servidor MySQL?:
Que
se
activa
el
binary
log
file.
Que
se
activa
el
query
log
file.
Que
se
activa
el
error
log
file.
un
servicio
de
activado
el
binary
log
file.
Que se activa el update log file.
19.
Para
poder
iniciar
tener
replicacin:
Es
aconsejable
Es
necesario
tener
activado
el
query
log
file.
Es
necesario
tener
activado
el
binary
log
file.
Es aconsejable tener activado el query log file.
20. Si se lanza la siguiente sentencia desde una ventana de
comandos:
mysqldump -d test > test.sql .Qu se esta almacenando en test.sql?
Solo los datos de la base de datos test no la estructura de sus tablas.
Solo la estructura de tablas la base de datos test no sus datos.
Solo la estructura y los datos de la base de datos test no sus relaciones de
integridad.
Todas las anteriores son falsas.