Tema: 61. Id Pregunta: 1802.

Responder
Avatar de Usuario
bits
Usuario registrado
Mensajes: 83
Registrado: Mié Jun 22, 2016 6:35 pm

Tema: 61. Id Pregunta: 1802.

Mensaje por bits » Dom Feb 05, 2017 8:36 pm

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: 88
Registrado: Jue Oct 20, 2016 12:31 pm

Re: Tema: 61. Id Pregunta: 1802.

Mensaje por grgpeople » Lun Feb 06, 2017 10:03 am

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.

Avatar de Usuario
Montijeño
Usuario registrado
Mensajes: 159
Registrado: Sab Nov 05, 2016 8:25 am

Re: Tema: 61. Id Pregunta: 1802.

Mensaje por Montijeño » Lun Feb 06, 2017 10:14 am

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: 88
Registrado: Jue Oct 20, 2016 12:31 pm

Re: Tema: 61. Id Pregunta: 1802.

Mensaje por grgpeople » Lun Feb 06, 2017 10:23 am

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).

Avatar de Usuario
Montijeño
Usuario registrado
Mensajes: 159
Registrado: Sab Nov 05, 2016 8:25 am

Re: Tema: 61. Id Pregunta: 1802.

Mensaje por Montijeño » Lun Feb 06, 2017 10:38 am

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: Mié Jun 22, 2016 6:35 pm

Re: Tema: 61. Id Pregunta: 1802.

Mensaje por bits » Lun Feb 06, 2017 11:17 am

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: 144
Registrado: Lun Feb 29, 2016 7:24 pm
Contactar:

Re: Tema: 61. Id Pregunta: 1802.

Mensaje por sray » Lun Feb 06, 2017 8:04 pm

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
Usuario registrado
Mensajes: 159
Registrado: Sab Nov 05, 2016 8:25 am

Re: Tema: 61. Id Pregunta: 1802.

Mensaje por Montijeño » Mar Feb 07, 2017 10:16 am

¿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: 88
Registrado: Jue Oct 20, 2016 12:31 pm

Re: Tema: 61. Id Pregunta: 1802.

Mensaje por grgpeople » Mar Feb 07, 2017 11:31 am

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.

_0p0s1t0r_
Usuario registrado
Mensajes: 12
Registrado: Sab Jun 02, 2018 10:29 pm

Re: Tema: 61. Id Pregunta: 1802.

Mensaje por _0p0s1t0r_ » Jue Ago 02, 2018 11:13 am

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”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado