Tema: 61. Id Pregunta: 1802.

Responder
Avatar de Usuario
bits
Usuario registrado
Mensajes: 83
Registrado: 22 Jun 2016, 19:35
Agradecido: 0
Agradecimiento recibido: 0

Tema: 61. Id Pregunta: 1802.

Mensaje por bits »

53) En SQL, ¿cuál de las siguientes sentencias es correcta?
a) TRUNCATE TABLE, borra la tabla de la base de datos
b) TRUNCATE TABLE es funcionalmente igual a DELETE TABLE
c) TRUNCATE TABLE debe ser usado con la cláusula WHERE
d) Ninguna de las anteriores es correcta
Da como buena la a, ¿no sería la d?

DELETE: Borra una serie de filas de la tabla. Podemos usar una claúsula WHERE para limitar las filas a borrar, a las que cumplan una condición.

TRUNCATE: A diferencia de DELETE, TRUNCATE elimina todas las filas de la tabla sin borrar la tabla. También resetea los contadores de auto incremento a 0. No borra la tabla como tal, la llamada estructura, por lo que luego puede comenzar a hacer inserciones. Tampoco se pueden recuperar los registros eliminados.

Avatar de Usuario
grgpeople
Usuario registrado
Mensajes: 127
Registrado: 20 Oct 2016, 13:31
Agradecido: 0
Agradecimiento recibido: 0

Re: Tema: 61. Id Pregunta: 1802.

Mensaje por grgpeople »

Yo creo que la opción correcta es la b).
La opción a) no es correcta, porque TRUNCATE no borra la tabla, borra las filas de la tabla. Para borrar la tabla hay que usar DROP TABLE.
La opción c), descartada.
Y la opción b), es cierto. Funcionalmente, si pones DELETE TABLE, sin especificar nada con WHERE, te va a borrar todas las filas de la tabla, que es lo mismo que hace TRUNCATE. Indica funcionalmente, creo que porque internamente está la diferencia de ser una sentencia de tipo DDL o DML.
Un saludo :!:

Avatar de Usuario
Montijeño
PreparaTIC26
Mensajes: 203
Registrado: 05 Nov 2016, 08:25
Agradecido: 0
Agradecimiento recibido: 0

Re: Tema: 61. Id Pregunta: 1802.

Mensaje por Montijeño »

Uhmmm... Yo creo que ya depende de lo exquisito que se quiera poner uno. Porque a mí se me pondría la mosca detrás de la oreja al leer lo de "DELETE TABLE" en lugar de "DELETE FROM nombre_tabla" (que es cierto que sin cláusula WHERE hace el mismo efecto funcionalmente que el TRUNCATE TABLE nombre_tabla).

Siendo exquisitos, daría la d) como correcta. Siendo menos exquisitos, la b).

Saludos!

Avatar de Usuario
grgpeople
Usuario registrado
Mensajes: 127
Registrado: 20 Oct 2016, 13:31
Agradecido: 0
Agradecimiento recibido: 0

Re: Tema: 61. Id Pregunta: 1802.

Mensaje por grgpeople »

Montijeño escribió:Uhmmm... Yo creo que ya depende de lo exquisito que se quiera poner uno. Porque a mí se me pondría la mosca detrás de la oreja al leer lo de "DELETE TABLE" en lugar de "DELETE FROM nombre_tabla" (que es cierto que sin cláusula WHERE hace el mismo efecto funcionalmente que el TRUNCATE TABLE nombre_tabla).

Siendo exquisitos, daría la d) como correcta. Siendo menos exquisitos, la b).

Saludos!
Ya me ha puesto a mi también la mosca detrás de la oreja y he seguido buscando. Mirad lo que he encontrado:
https://technet.microsoft.com/es-es/lib ... .105).aspx

"FROM" es un argumento opcional. Creo que tiene más posibilidades de ser correcta la b).
Un saludo :!:

Avatar de Usuario
Montijeño
PreparaTIC26
Mensajes: 203
Registrado: 05 Nov 2016, 08:25
Agradecido: 0
Agradecimiento recibido: 0

Re: Tema: 61. Id Pregunta: 1802.

Mensaje por Montijeño »

Vaya, pues parece que así es: http://stackoverflow.com/questions/4484 ... -use-where

Damos la b) como ganadora pues.

Avatar de Usuario
bits
Usuario registrado
Mensajes: 83
Registrado: 22 Jun 2016, 19:35
Agradecido: 0
Agradecimiento recibido: 0

Re: Tema: 61. Id Pregunta: 1802.

Mensaje por bits »

Vaya, yo tampoco sabía que el FROM era opcional. Pues nos quedamos con la b, que aunque delete y truncate tengan sus diferencias, funcionalmente sí que hacen lo mismo.

Avatar de Usuario
sray
Usuario registrado
Mensajes: 145
Registrado: 29 Feb 2016, 19:24
Agradecido: 0
Agradecimiento recibido: 0

Re: Tema: 61. Id Pregunta: 1802.

Mensaje por sray »

Yo no daría por buena la b), en primer lugar porque no estoy seguro de que en el estándar SQL la opción FROM del DELETE sea opcional. He intentado buscarlo pero no he encontrado que lo sea. El hecho de que algunas SGBD te permitan que el FROM sea opcional, no quiere decir que en el estándar lo sea.

De todas formas la pregunta no especifica tampoco si se refiere al estándar, aunque al decir SQL a secas yo entiendo que se refiere al estándar, ¿no?

Independientemente de lo anterior, TRUNCATE no funciona exactamente igual que DELETE. Según he visto en Wikipedia, TRUNCATE no lanza el evento ON DELETE, mientras que DELETE sí lo lanza, por lo que las claves ajenas que existan, si las hay, se actualizarán con DELETE pero no con TRUNCATE.
Wikipedia escribió:TRUNCATE TABLE cannot be used when a foreign key references the table to be truncated, since TRUNCATE TABLE statements do not fire triggers. This could result in inconsistent data because ON DELETE/ON UPDATE triggers would not fire.
https://en.wikipedia.org/wiki/Truncate_(SQL)

Avatar de Usuario
Montijeño
PreparaTIC26
Mensajes: 203
Registrado: 05 Nov 2016, 08:25
Agradecido: 0
Agradecimiento recibido: 0

Re: Tema: 61. Id Pregunta: 1802.

Mensaje por Montijeño »

¿Que la pregunta es mejorable? Sin duda.
¿Que de las opciones propuestas el "funcionalmente" le da todas las probabilidades de acierto a la b)? Creo que también.

Siendo muy muy exhaustivos como ese detalle que citas, la verdad es que no me atrevería a marcar nada ;)

Avatar de Usuario
grgpeople
Usuario registrado
Mensajes: 127
Registrado: 20 Oct 2016, 13:31
Agradecido: 0
Agradecimiento recibido: 0

Re: Tema: 61. Id Pregunta: 1802.

Mensaje por grgpeople »

sray escribió: Independientemente de lo anterior, TRUNCATE no funciona exactamente igual que DELETE. Según he visto en Wikipedia, TRUNCATE no lanza el evento ON DELETE, mientras que DELETE sí lo lanza, por lo que las claves ajenas que existan, si las hay, se actualizarán con DELETE pero no con TRUNCATE.
Wikipedia escribió:TRUNCATE TABLE cannot be used when a foreign key references the table to be truncated, since TRUNCATE TABLE statements do not fire triggers. This could result in inconsistent data because ON DELETE/ON UPDATE triggers would not fire.
https://en.wikipedia.org/wiki/Truncate_(SQL)
Cierto, no funciona exactamente igual. Nadie dice que lo haga. La respuesta dice, funcionalmente. Vaya, que metes las dos funciones en una caja negra, le das a ejecutar, y viendo el resultado tú no sabrías decir qué caja contiene cada función.
Un saludo :!:

_0p0s1t0r_
Usuario registrado
Mensajes: 49
Registrado: 02 Jun 2018, 23:29
Agradecido: 0
Agradecimiento recibido: 0

Re: Tema: 61. Id Pregunta: 1802.

Mensaje por _0p0s1t0r_ »

Hola, retomo el hilo aunque sea del año pasado...

En la última versión de los test existe la siguiente pregunta (mismo contenido, pero id de pregunta diferente: 4052)
34) En SQL, ¿cuál de las siguientes sentencias es correcta? [MAL] Tema: 61. Id Pregunta: 4052.
a) TRUNCATE TABLE, borra la tabla de la base de datos
b) TRUNCATE TABLE es funcionalmente igual a DELETE TABLE
c) TRUNCATE TABLE debe ser usado con la cláusula WHERE
d) Ninguna de las anteriores es correcta
En este caso el test da por válida la "a) TRUNCATE TABLE, borra la tabla de la base de datos". Entiendo que la válida debería ser la "b) TRUNCATE TABLE es funcionalmente igual a DELETE TABLE" tal y como se ha comentado previamente en el hilo.

Muchas gracias.

Saludos.

[EDIT]

El test exacto del tema 61 es el "test_tema_T61_0003.html".

Responder

Volver a “PREGUNTAS TEST - ERRORES Y DUDAS”