Listado completo de tutoriales
14 - Valores null. |
Analizaremos la estructura de una tabla que vemos al utilizar el comando "describe". Tomamos como ejemplo la tabla "libros":
Field Type Null Key Default Extra ______________________________________________________________________ codigo int(11) 7 b.. NO PRI auto_increment titulo varchar(50) 11 b.. YES (NULL) autor varchar(50) 11 b.. YES (NULL) editorial varchar(25) 11 b.. YES (NULL) precio float 5 b.. YES (NULL)
La primera columna indica el tipo de dato de cada campo.
La segunda columna "Null" especifica si el campo permite valores nulos; vemos que en el campo "codigo", aparece "NO" y en las demás "YES", esto significa que el primer campo no acepta valores nulos (porque es clave primaria) y los otros si los permiten.
La tercera columna "Key", muestra los campos que son clave primaria; en el campo "codigo" aparece "PRI" (es clave primaria) y los otros están vacíos, porque no son clave primaria.
La cuarta columna "Default", muestra los valores por defecto, esto es, los valores que MySQL ingresa cuando omitimos un dato o colocamos un valor inválido; para todos los campos, excepto para el que es clave primaria, el valor por defecto es "null".
La quinta columna "Extra", muestra algunos atributos extra de los campos; el campo "codigo" es "auto_increment".
Vamos a explicar los valores nulos.
"null' significa "dato desconocido" o "valor inexistente". No es lo mismo que un valor 0, una cadena vacía o una cadena literal "null".
A veces, puede desconocerse o no existir el dato correspondiente a algún campo de un registro. En estos casos decimos que el campo puede contener valores nulos. Por ejemplo, en nuestra tabla de libros, podemos tener valores nulos en el campo "precio" porque es posible que para algunos libros no le hayamos establecido el precio para la venta.
En contraposición, tenemos campos que no pueden estar vacíos jamás, por ejemplo, los campos que identifican cada registro, como los códigos de identificación, que son clave primaria.
Por defecto, es decir, si no lo aclaramos en la creación de la tabla, los campos permiten valores nulos.
Imaginemos que ingresamos los datos de un libro, para el cual aún no hemos definido el precio:
insert into libros (titulo,autor,editorial,precio) values ('El aleph','Borges','Planeta',null);
Note que el valor "null" no es una cadena de caracteres, no se coloca entre comillas.
Si un campo acepta valores nulos, podemos ingresar "null" cuando no conocemos el valor.
Los campos establecidos como clave primaria no aceptan valores nulos. Nuestro campo clave primaria, está definido "auto_increment"; si intentamos ingresar el valor "null" para este campo, no lo tomará y seguirá la secuencia de incremento.
El campo "titulo", no debería aceptar valores nulos, para establecer este atributo debemos crear la tabla con la siguiente sentencia:
create table libros( codigo int auto_increment, titulo varchar(50) not null autor varchar(50), editorial varchar(25), precio float, primary key (codigo) );
Entonces, para que un campo no permita valores nulos debemos especificarlo luego de definir el campo, agregando "not null". Por defecto, los campos permiten valores nulos, pero podemos especificarlo igualmente agregando "null".
Explicamos que "null" no es lo mismo que una cadena vacía o un valor 0 (cero).
Para recuperar los registros que contengan el valor "null" en el campo "precio" no podemos utilizar los operadores relacionales vistos anteriormente: = (igual) y <> (distinto); debemos utilizar los operadores "is null" (es igual a null) y "is not null" (no es null):
select * from libros where precio is null;
La sentencia anterior tendrá una salida diferente a la siguiente:
select * from libros where precio=0;
Con la primera sentencia veremos los libros cuyo precio es igual a "null" (desconocido); con la segunda, los libros cuyo precio es 0.
Igualmente para campos de tipo cadena, las siguientes sentencias "select" no retornan los mismos registros:
select * from libros where editorial is null; select * from libros where editorial='';
Con la primera sentencia veremos los libros cuya editorial es igual a "null", con la segunda, los libros cuya editorial guarda una cadena vacía.
Ingresemos desde la aplicación "Workbench" la siguiente secuencia de comandos SQL para probar el valor null:
drop table if exists libros; create table libros( codigo integer auto_increment, titulo varchar(20) not null, autor varchar(30), editorial varchar(15), precio float, primary key(codigo) ); insert into libros (titulo,autor,editorial,precio) values('El aleph','Borges','Planeta',null); insert into libros (titulo,autor,editorial,precio) values ('Matematica estas ahi','Paenza','Paidos',0); insert into libros (titulo,autor,editorial,precio) values ('Martin Fierro','Jose Hernandez','',22.50); insert into libros (titulo,autor,editorial,precio) values ('Harry Potter y la piedra filosofal', 'J.K. Rowling',null,30.00); select * from libros where precio is null; select * from libros where precio=0; select * from libros where editorial is null; select *from libros where editorial='';
Tenemos como resultado:
Intentemos ingresar un valor null en el campo titulo:
insert into libros (titulo,autor,editorial,precio) values(null,'Rodriguez','Planeta',23);
Se produce un error y no se efectúa la inserción.