MySQL - Valores NULL en Mysql

 
Vista:

Valores NULL en Mysql

Publicado por duralai (1 intervención) el 17/06/2015 16:44:33
Una pequaña duda, es lo mismo ingresar valores NULL que no poner nada o VACIO?

Por ejemplo:
insert into libros (titulo,autor,editorial,precio)
values ('El aleph','Borges','Planeta',null);

Es lo mismo que
insert into libros (titulo,autor,editorial,precio)
values ('El aleph','Borges','Planeta','');


O si no se un dato debo poner siempre NULL (en campos que lo permitan)?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Valores NULL en Mysql

Publicado por leonardo_josue (414 intervenciones) el 17/06/2015 22:28:03
Hola duralai:

1
es lo mismo ingresar valores NULL que no poner nada o VACIO?

No, no es lo mismo, NULL en realidad no es un "valor" para un campo, sino más bien un estado... una cadena vacía si es un "valor", pero no es lo mismo que NULL. checa este ejemplo:

1
2
3
mysql> INSERT INTO tabla VALUES (1, 'UNO'), (2, ''), (3, NULL);
Query OK, 3 rows affected (0.14 sec)
Records: 3  Duplicates: 0  Warnings: 0

Observa que para el ID = 2, en la descripción estoy colocando una cadena vacía, para el ID=3 estoy colocando un NULL, si hago un SELECT a la tabla, obtengo lo siguiente;

1
2
3
4
5
6
7
8
9
mysql> SELECT * FROM TABLA;
+----+-------------+
| id | descripcion |
+----+-------------+
|  1 | UNO         |
|  2 |             |
|  3 | NULL        |
+----+-------------+
3 rows in set (0.00 sec)

Aquí se "muestra" que no es lo mismo una cadena vacía a un valor NULL... lo mismo pasa cuando quieres consultar los datos... es por eso que existen los operadores IS NULL o IS NOT NULL para poder consultar estos registros:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> SELECT * FROM tabla WHERE descripcion = '';
+----+-------------+
| id | descripcion |
+----+-------------+
|  2 |             |
+----+-------------+
1 row in set (0.02 sec)
 
mysql> SELECT * FROM tabla WHERE descripcion IS NULL;
+----+-------------+
| id | descripcion |
+----+-------------+
|  3 | NULL        |
+----+-------------+
1 row in set (0.06 sec)

Además hay algunas "propiedades" importantes...

1. La longitud de un NULL es NULL, la longitud de una cadena vacía es 0;

1
2
3
4
5
6
7
8
9
mysql> SELECT id, descripcion, LENGTH(descripcion) FROM tabla;
+----+-------------+---------------------+
| id | descripcion | LENGTH(descripcion) |
+----+-------------+---------------------+
|  1 | UNO         |                   3 |
|  2 |             |                   0 |
|  3 | NULL        |                NULL |
+----+-------------+---------------------+
3 rows in set (0.08 sec)


2. El valor de NULL se ordena primero que el de cadena vacía:

1
2
3
4
5
6
7
8
9
mysql> SELECT id, descripcion FROM tabla ORDER BY descripcion;
+----+-------------+
| id | descripcion |
+----+-------------+
|  3 | NULL        |
|  2 |             |
|  1 | UNO         |
+----+-------------+
3 rows in set (0.00 sec)

3. Si concatenas un NULL a cualquier cadena, el resultado es NULL:}}

1
2
3
4
5
6
7
8
9
mysql> SELECT CONCAT(id, descripcion) FROM tabla;
+-------------------------+
| CONCAT(id, descripcion) |
+-------------------------+
| 1UNO                    |
| 2                       |
| NULL                    |
+-------------------------+
3 rows in set (0.03 sec)

hay otras características que marcan diferencia, sin embargo NO ES MEJOR NI PEOR manejar un NULL o una cadena VACÍA... esto es a concideración tuya.

Como mejor práctica, te recomendaría utilizar NULL.

Saludos.
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar