Test 5
Este Test es cortesia de Lasse Christiansen, aparentemente residente de Japón.
Imaginemos los siguientes comandos:
[mysql]
CREATE TABLE test (
id varchar(1) NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO test VALUES (‘0’), (‘1’), (‘2’), (‘a’), (‘b’);
[/mysql]
Los INSERT funcionan como deben y el resultado es que ahora tenemos los registros ‘0′, ‘1′, ‘2′, ‘a’ y ‘b’.
Ahora hacemos:
[mysql]
DELETE FROM test WHERE id=0;
[/mysql]
Y se borran tres registros… ¿ Por qué ?
Pulsa para Mostrar/Ocultar la solución
Respuesta: Este comportamiento es intencionado. Debemos fijarnos que el 0 de la sentencia DELETE no está entrecomillado, y cuando comparamos valores de diferentes tipos (en este caso caracteres de texto y un entero), MySQL intenta complacernos convirtiendolos primero a FLOAT* y luego haciendo la comparación de la sentencia WHERE . En el ejemplo mostrador, las cadenas ‘0′, ‘a’ y ‘b’, asi como el entero 0 con el que comparamos, se convierten en 0.0 al hacer la comparación como FLOAT — y por tanto son iguales y entran en la condición de borrado.
*Esto es simplificar las cosas un poco demasiado, en otros casos podriamos encontrar valores NULL y/o de tipo temporal en medio de nuestra consulta. Más información aqui.
Traducido con permiso expreso de Mysql Test Quiz 5 Original
Creado por Carsten H. Pedersen
Otros Test anteriores:
2 comentarios en “Test rápidos de MySQL – Test 5”