Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Campo NOT NULL con Default Value en NULL

Estas en el tema de Campo NOT NULL con Default Value en NULL en el foro de Mysql en Foros del Web. Hola, tengo un pequeño problema con mi base de datos, tengo un campo cant_pedido de tipo varchar que esta definido como not null, pero me ...
  #1 (permalink)  
Antiguo 08/01/2015, 18:41
 
Fecha de Ingreso: abril-2011
Mensajes: 171
Antigüedad: 13 años
Puntos: 1
Campo NOT NULL con Default Value en NULL

Hola, tengo un pequeño problema con mi base de datos, tengo un campo cant_pedido de tipo varchar que esta definido como not null, pero me deja guardar datos en blanco!!

si hago una consulta como la siguiente:

insert into pedidos (id,cliente,producto) values (1,34,57)

me la toma como correcto.

al hacer distintas modificaciones en la estructura de la tabla, vaya uno a saber porque, el default value me quedo en NULL, y creo que eso puede ser un factor determinante en este problema
  #2 (permalink)  
Antiguo 08/01/2015, 18:55
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Campo NOT NULL con Default Value en NULL

Cita:
Hola, tengo un pequeño problema con mi base de datos, tengo un campo cant_pedido de tipo varchar que esta definido como not null, pero me deja guardar datos en blanco!!
Tienes dos problemas:
1) Si es un campo que almacena cantidades, debe ser si o si INT UNSIGNED, o cualquier otro de enteros, pero nunca un VARCHAR.
Una cantidad es una magnitud escalar, en consecuencia no puede ni debe ser jamás almacenada en un campo para cadenas de texto. Eso no tiene sentido.
2) Un espacio vacío o un espacio en blanco no es un NULL, el NULL les otra cosa y ni siquiera es un dato. Es un estado de indefinición. DE allí que un campo declarado como NOT NULL acepte espacios vacíos o en blanco (son cosas distintas).

A nivel de diseño e datos, si un campo se define como NOT NULL, no debería tener un valor por default, porque eso eso es un contrasentido. La idea de un NOT NULL es generar una restricción en la tabla para que no se pongan datos vacíos.
Solo se debe poner un valor por default si es necesario, y habitualmente es un valor real y no un vacío.

¿Se entiende??
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 08/01/2015, 19:07
 
Fecha de Ingreso: abril-2011
Mensajes: 171
Antigüedad: 13 años
Puntos: 1
Respuesta: Campo NOT NULL con Default Value en NULL

lo se y entiendo perfectamente todo, el campo es varchar porque asi lo necesito (de todas formas lo cambio a INT pero sigue todo igual), y se que es un NULL, pero como dije, no se en que momento el default value me quedo en NULL, y creo que eso estaria permitiendo valor NULL por ensima del NOT NULL, la verdad que no lo se, son teorias que se me ocurren...

se puede "eliminar" el default value de alguna forma???
  #4 (permalink)  
Antiguo 08/01/2015, 19:12
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Campo NOT NULL con Default Value en NULL

Por un lado, si "necesitas" que sea VARCHAR, es porque tienes mal codificado algo en alguna parte, o lo estás manejando incorrectamente. Pero eso no justifica corromper las estructuras de datos; en todo caso debes corregir el otro defecto y no parchar la tabla con algo que no debe ser, y que eventualmente puede causarte problemas de inconsistencia de datos.

Por otro lado, para saber lo que pasa deberíamos ver el CREATE TABLE de esa tabla.
¿Lo puedes postear?

Lo puedes recuperar con un simple:

Código MySQL:
Ver original
  1. SHOW CREATE TABLA pedidos;
Copias el resultado de eso y lo posteas acá.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 08/01/2015, 19:22
 
Fecha de Ingreso: abril-2011
Mensajes: 171
Antigüedad: 13 años
Puntos: 1
Respuesta: Campo NOT NULL con Default Value en NULL

Esta es, el campo en cuestión esta como int ahora, pero debe ser varchar porque pueden ingresarse datos tanto numéricos como de texto...

Código MySQL:
Ver original
  1. CREATE TABLE `pedidos` (
  2.   `cod_cliente` int(10) unsigned NOT NULL AUTO_INCREMENT,
  3.   `razon_social` varchar(200) NOT NULL,
  4.   `tal_pedido` varchar(45) DEFAULT NULL,
  5.   `nro_pedido` int(45) NOT NULL,
  6.   `fech_pedido` varchar(45) NOT NULL,
  7.   `nro_o_comp` varchar(45) DEFAULT NULL,
  8.   `cod_articulo` int(11) NOT NULL,
  9.   `descripcion` varchar(45) NOT NULL,
  10.   `desc_adici` varchar(45) DEFAULT NULL,
  11.   `unidad` varchar(45) NOT NULL,
  12.   `cant_pedid` int(11) NOT NULL,
  13.   `can_pendes` varchar(45) DEFAULT NULL,
  14.   `can_penfac` varchar(45) DEFAULT NULL,
  15.   `imp_pendie` varchar(45) DEFAULT NULL,
  16.   `estado` varchar(45) DEFAULT NULL,
  17.   `motivo` varchar(45) DEFAULT NULL,
  18.   `descmotivo` varchar(45) DEFAULT NULL,
  19.   `anulado` varchar(45) NOT NULL,
  20.   `pendiente` varchar(45) NOT NULL,
  21.   `observaciones` varchar(100) DEFAULT NULL,
  22.   `id_orden_carga` int(10) unsigned NOT NULL,
  23.   PRIMARY KEY (`cod_cliente`,`nro_pedido`,`cod_articulo`,`cant_pedid`) USING BTREE,
  24.   KEY `cod_articulo` (`cod_articulo`),
  25.   CONSTRAINT `pedidos_ibfk_1` FOREIGN KEY (`cod_cliente`) REFERENCES `clientes` (`id`),
  26.   CONSTRAINT `pedidos_ibfk_2` FOREIGN KEY (`cod_articulo`) REFERENCES `productos` (`codigo`)
'

Última edición por gnzsoloyo; 10/01/2015 a las 08:42
  #6 (permalink)  
Antiguo 09/01/2015, 17:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Campo NOT NULL con Default Value en NULL

Por un lado, tu campo no es NOT NULL, es nulable, por lo que no hay error. En todo caso esta mal definido.
Por otro lado, si es un campo que almacena cantidades, ¿como es eso de que puede recibir textos?
Eso no tiene sentido.
Exllicate.

Finalmente, esta prohibido postear mensajes irrelevantes con el objetivo de subir el hilo en la lista. Lee las Políticas de Uso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 09/01/2015, 20:09
 
Fecha de Ingreso: abril-2011
Mensajes: 171
Antigüedad: 13 años
Puntos: 1
Respuesta: Campo NOT NULL con Default Value en NULL

Con respecto a lo ultimo, disculpa, es que nadie mas respondía, y vos que me pediste el create table de la tabla tampoco me respondias! :/ y pensé que por mi mala conexion a internet los mensajes que posteaba no logran subirse con exito! Disculpas!

Con respecto a lo anterior, por favor explicame lo de nulable, ya que nunca escuche el termino, y en todo caso, como solucionarlo, ya que eso es lo que estoy buscando, una solución! ;)

El campo puede almacenar 1 o "uno".

Saludos
  #8 (permalink)  
Antiguo 09/01/2015, 20:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Campo NOT NULL con Default Value en NULL

Se denomina coloquialmente "nulable" a los campos que pueden ser NULL, como en este caso.
Respecto a lo de contener un numero como cifra o como texto, eso está MAL, el dominio de un campo o atributo debe ser único, y esto quiere decir que NO debe poder contener ambos. O es un número o es la denominación. No ambos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 09/01/2015, 20:51
 
Fecha de Ingreso: abril-2011
Mensajes: 171
Antigüedad: 13 años
Puntos: 1
Respuesta: Campo NOT NULL con Default Value en NULL

ok lo tendré en cuenta. Que debo hacer entonces para que en mi campo deba ingresarse un dato si o si??
  #10 (permalink)  
Antiguo 09/01/2015, 21:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Campo NOT NULL con Default Value en NULL

Pues lo mismo que tienes en otros campos... Debe decir NOT NULL. Tan simple como eso.
Lo que puede llevar es un default '0', por ejemplo, si quieres asegurarte que posea un valor base en caso de no ingresar nada.
Código MySQL:
Ver original
  1. ...
  2. cantidad INT UNSIGNED NOT NULL DEFAULT '0',
  3. ...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 09/01/2015, 21:59
 
Fecha de Ingreso: abril-2011
Mensajes: 171
Antigüedad: 13 años
Puntos: 1
Respuesta: Campo NOT NULL con Default Value en NULL

Pero ese justamente es mi problema, esta como NOT NULL, y en el default no debe llevar nada!! Si no ingresa ningun dato, debe devolverme un error...
  #12 (permalink)  
Antiguo 09/01/2015, 22:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Campo NOT NULL con Default Value en NULL

Volvamos al principio: ¿estás dejando el campo sin datos en el INSERT, lo omites o pones un espacio vacío, es decir un ''?
¿Está activo el control de errores en MySQL?
¿Probaste insertar manualmente, con phpMyadmin, o MySQL Workbench
Todo apunta a que el error esta a nivel programático, no de base...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 09/01/2015, 22:23
 
Fecha de Ingreso: abril-2011
Mensajes: 171
Antigüedad: 13 años
Puntos: 1
Respuesta: Campo NOT NULL con Default Value en NULL

Cita:
Iniciado por axelb Ver Mensaje
si hago una consulta como la siguiente:

insert into pedidos (id,cliente,producto) values (1,34,57)

me la toma como correcto.
en este caso no estoy ingresando cantidad, por lo tanto no deberían guardarse esos datos...
  #14 (permalink)  
Antiguo 10/01/2015, 08:59
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Campo NOT NULL con Default Value en NULL

Pues mira, vamos a hacer una prueba sobre la base de tu propia tabla, conforme la posteaste.
Para el ejemplo, eliminaré las referencias a las FK, porque no posteaste las tablas, pero a los efectos de la prueba son irrelevantes.
También eliminaré ese "USING BTREE", que francamente no sé por que definiste así. Es innecesario.
Una vez creada realizaré un insert en que pondré todos los campos NOT NULL, ecepto el que te preocupa.

Primero creamos la tabla:
Código MySQL:
Ver original
  1. mysql> DROP TABLE IF EXISTS pedidos;
  2. Query OK, 0 rows affected (0.33 sec)
  3.  
  4. mysql> CREATE TABLE IF NOT EXISTS `pedidos` (
  5.     ->   `cod_cliente` int(10) unsigned NOT NULL AUTO_INCREMENT,
  6.     ->   `razon_social` varchar(200) NOT NULL,
  7.     ->   `tal_pedido` varchar(45) DEFAULT NULL,
  8.     ->   `nro_pedido` int(45) NOT NULL,
  9.     ->   `fech_pedido` varchar(45) NOT NULL,
  10.     ->   `nro_o_comp` varchar(45) DEFAULT NULL,
  11.     ->   `cod_articulo` int(11) NOT NULL,
  12.     ->   `descripcion` varchar(45) NOT NULL,
  13.     ->   `desc_adici` varchar(45) DEFAULT NULL,
  14.     ->   `unidad` varchar(45) NOT NULL,
  15.     ->   `cant_pedid` int(11) NOT NULL,
  16.     ->   `can_pendes` varchar(45) DEFAULT NULL,
  17.     ->   `can_penfac` varchar(45) DEFAULT NULL,
  18.     ->   `imp_pendie` varchar(45) DEFAULT NULL,
  19.     ->   `estado` varchar(45) DEFAULT NULL,
  20.     ->   `motivo` varchar(45) DEFAULT NULL,
  21.     ->   `descmotivo` varchar(45) DEFAULT NULL,
  22.     ->   `anulado` varchar(45) NOT NULL,
  23.     ->   `pendiente` varchar(45) NOT NULL,
  24.     ->   `observaciones` varchar(100) DEFAULT NULL,
  25.     ->   `id_orden_carga` int(10) unsigned NOT NULL,
  26.     ->   PRIMARY KEY (`cod_cliente`,`nro_pedido`,`cod_articulo`,`cant_pedid`)
  27.     -> ) ENGINE=InnoDB AUTO_INCREMENT=782744 DEFAULT CHARSET=latin1;
  28. Query OK, 0 rows affected (0.06 sec)

Código MySQL:
Ver original
  1. Luego intentamos el INSERT:
  2. mysql> INSERT INTO `pedidos` (`cod_cliente`, `razon_social` ,  `nro_pedido`, `fech_pedido`,
  3.     ->   `cod_articulo`, `descripcion`, `unidad`,
  4.     ->   `anulado`, `pendiente`, `id_orden_carga`)
  5.     -> VALUES (1, 'loquesea', 12, NOW(), 11, 'describe articulo', 32, 'NO', 'NO', 3333);
  6.  
  7. ERROR 1364 (HY000): Field 'cant_pedid' doesn't have a default value
Como se puede ver en la respuesta de MySQL, no admite la inserción porque el campo cant_pedido está definido como NOT NULL.

Ahora intentemos, poniendo NULL en ese campo:
Código MySQL:
Ver original
  1. mysql> INSERT INTO `pedidos` (`cod_cliente`, `razon_social` ,  `nro_pedido`, `fech_pedido`,
  2.     ->   `cant_pedid` , `cod_articulo`, `descripcion`, `unidad`, `anulado`, `pendiente`, `id_orden_carga`)
  3.     -> VALUES (1, 'loquesea', 12, NOW(), NULL, 11, 'describe articulo', 32, 'NO', 'NO', 3333);
  4. ERROR 1048 (23000): Column 'cant_pedid' cannot be null
  5. mysql>

Lo que esto demuestra es que si te está permitiendo insertar un valor nulo, no está siendo por la restricción, sino que sin duda estás cometiendo algún error a otro nivel.
Yo sospecho que si estás generando el INSERT por programación, no estás mandando realmente un valor NULL, sino otra cosa, por ejemplo un espacio vacío (representado por el contenido de dos apostrofes consecutivos).

Lamentablemente si ver todo lo que estas haciendo, lo mas que puedo decirte es esto. El error no está en el tipo de campo. Está en otra parte.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 10/01/2015, 11:56
 
Fecha de Ingreso: abril-2011
Mensajes: 171
Antigüedad: 13 años
Puntos: 1
Respuesta: Campo NOT NULL con Default Value en NULL

El USING BTREE no lo definí yo, habria sido el manejador de dase de datos que ocupo...

Hice ese primer insert en el MySql query browser que ocupo y lo inserta, pero me deja el siguiente mensaje:

Field 'cant_pedid' doesn't have a default value

junto con el error numero 1364
  #16 (permalink)  
Antiguo 10/01/2015, 16:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Campo NOT NULL con Default Value en NULL

Cita:
Hice ese primer insert en el MySql query browser que ocupo y lo inserta, pero me deja el siguiente mensaje:
Ajá... ¿y estás realmente seguro de que lo inserta?

Ese mensaje precisamente aparece cuando no se pudo insertar al violar una constraint de NOT NULL.

Mira, vamos de nuevo:
Código MySQL:
Ver original
  1. mysql> DROP TABLE IF EXISTS pedidos;
  2. Query OK, 0 rows affected (0.00 sec)
  3.  
  4. mysql>
  5. mysql> CREATE TABLE IF NOT EXISTS `pedidos` (
  6.     ->        `cod_cliente` int(10) unsigned NOT NULL AUTO_INCREMENT,
  7.     ->        `razon_social` varchar(200) NOT NULL,
  8.     ->        `tal_pedido` varchar(45) DEFAULT NULL,
  9.     ->        `nro_pedido` int(45) NOT NULL,
  10.     ->        `fech_pedido` varchar(45) NOT NULL,
  11.     ->        `nro_o_comp` varchar(45) DEFAULT NULL,
  12.     ->        `cod_articulo` int(11) NOT NULL,
  13.     ->        `descripcion` varchar(45) NOT NULL,
  14.     ->        `desc_adici` varchar(45) DEFAULT NULL,
  15.     ->        `unidad` varchar(45) NOT NULL,
  16.     ->        `cant_pedid` int(11) NOT NULL,
  17.     ->        `can_pendes` varchar(45) DEFAULT NULL,
  18.     ->        `can_penfac` varchar(45) DEFAULT NULL,
  19.     ->        `imp_pendie` varchar(45) DEFAULT NULL,
  20.     ->        `estado` varchar(45) DEFAULT NULL,
  21.     ->        `motivo` varchar(45) DEFAULT NULL,
  22.     ->        `descmotivo` varchar(45) DEFAULT NULL,
  23.     ->        `anulado` varchar(45) NOT NULL,
  24.     ->        `pendiente` varchar(45) NOT NULL,
  25.     ->        `observaciones` varchar(100) DEFAULT NULL,
  26.     ->        `id_orden_carga` int(10) unsigned NOT NULL,
  27.     ->        PRIMARY KEY (`cod_cliente`,`nro_pedido`,`cod_articulo`,`cant_pedid`)
  28.     ->      ) ENGINE=InnoDB AUTO_INCREMENT=782744 DEFAULT CHARSET=latin1;
  29. Query OK, 0 rows affected (0.03 sec)
Código MySQL:
Ver original
  1. mysql> INSERT INTO `pedidos` (`cod_cliente`, `razon_social` ,  `nro_pedido`, `fech_pedido`,
  2.     ->        `cod_articulo`, `descripcion`, `unidad`,
  3.     ->        `anulado`, `pendiente`, `id_orden_carga`)
  4.     ->      VALUES (1, 'loquesea', 12, NOW(), 11, 'describe articulo', 32, 'NO', 'NO', 3333);
  5. ERROR 1364 (HY000): Field 'cant_pedid' doesn't have a default value
Código MySQL:
Ver original
  1. mysql>  INSERT INTO `pedidos` (`cod_cliente`, `razon_social` ,  `nro_pedido`, `fech_pedido`,
  2.     ->        `cant_pedid` , `cod_articulo`, `descripcion`, `unidad`, `anulado`, `pendiente`, `id_orden_carga`)
  3.     ->      VALUES (1, 'loquesea', 12, NOW(), NULL, 11, 'describe articulo', 32, 'NO', 'NO', 3333);
  4. ERROR 1048 (23000): Column 'cant_pedid' cannot be null
Código MySQL:
Ver original
  1. mysql> SELECT `cod_cliente`, `razon_social` ,  `nro_pedido`, `fech_pedido`,
  2.     ->        `cant_pedid` , `cod_articulo`, `descripcion`, `unidad`, `anulado`,
  3.     ->        `pendiente`, `id_orden_carga`
  4.     -> FROM `pedidos` ;
  5. Empty set (0.00 sec)
¿Ves la última linea?
Bueno, esa dice que la tabla está vacía. Ninguna de las dos inserciones funcionó...

Verifica.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #17 (permalink)  
Antiguo 11/01/2015, 16:42
 
Fecha de Ingreso: abril-2011
Mensajes: 171
Antigüedad: 13 años
Puntos: 1
Respuesta: Campo NOT NULL con Default Value en NULL

disculpame pero no te hubiese dicho que insertó si realmente no lo hiciese, claro que verifique! La ha insertado!! Que tengo mal en mi base de datos? porque ni siquiera hago la consulta desde el sistema!

Tendré que crear nuevamente la tabla?? Hay alguna manera de pasar los datos de una tabla a otra de forma rápida??

Y ya que lo has nombrado, podrías aclararme eso del USING BTREE por favor??

De verdad muchas gracias por tu tiempo!!
  #18 (permalink)  
Antiguo 11/01/2015, 17:54
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Campo NOT NULL con Default Value en NULL

Cita:
disculpame pero no te hubiese dicho que insertó si realmente no lo hiciese,
No puedo saberlo porque no estoy sentado en tu ciputadora. Eso solo lo ves tu, y no sería la primera vez que nos dicen que hicieron algo que en realidad nunca hicieron.
Te sorprendería la cantidad de veces que insisten que realizaron una prueba que jamás intentaron...
Cita:
claro que verifique! La ha insertado!
Ya te demostré que en el contexto de tu tabla, si está definida como dices, eso es imposible.

Cita:
! Que tengo mal en mi base de datos?
No lo sé con certeza, para saberlo tendría que tener acceso a tu PC para analizar el caso. Estamos trabajando con lo que nos provees, y según mis pruebas, lo que dices no puede estar sucediendo.
Como te mostré en la prueba del post anterior, ese mensaje de error 1364 sólo puede suceder cuando se intenta insertar un registro dado con un campo NULL violando una contraint de NOT NULL, y en ese caso MySQL no inserta el registro. Si el registro está, habría que ver si no estás mirando un registro que se insertó anteriormente, poniendo un caracter vacío en lugar de un NULL.

Haz lo siguiente: Trunca la tabla (perderás todos los registros que existan en ella) y vuelve a intentar el INSERT.

Código MySQL:
Ver original
  1. TRUNCATE pedidos;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #19 (permalink)  
Antiguo 11/01/2015, 18:51
 
Fecha de Ingreso: abril-2011
Mensajes: 171
Antigüedad: 13 años
Puntos: 1
Respuesta: Campo NOT NULL con Default Value en NULL

he hecho el truncate y luego de eso funcionó!

a modo de comentario, cuando el inserte si funcionaba pero ademas me daba el error, el error venia acompañado de un signo de admiracion en amarillo. Ahora que no insertó el registro, el signo que acompaña el error es rojo! je

una pregunta, que diferencia hay entre truncate y delete? gracias
  #20 (permalink)  
Antiguo 11/01/2015, 19:24
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Campo NOT NULL con Default Value en NULL

En esencia, tu tabla contenía datos corruptos...

TRUNCATE es una sentencia algo mas directa y completa, ya que en las tablas InnodDB donde hay campos AI, no sólo se borra todo, sino que además se reinicia el AI.
DELETE marca el campo como borrado y su espacio como disponible, pero no elimina físicamente los registros, como sí lo hace TRUNCATE.
Ahora bien, no es posible usarlo siempre de un modo fácil como este. Cuando la tabla es padre de otra (FK->PK), no es posible usarlo porque se violaría la integridad referencial. En esos casos es preferible el DELETE porque el delete en las FK con clausula ON DELETE CASCADE generan el borrado en cascada, pero TRUNCATE no.
El tema es que TRUNCATE no borra realmente los registros. Lo que borra es la tabla.
Crea una tabla temporal con la misma estructura que la que se trunca, luego borra la que se desea truncar, y cambia el nombre de la nueva al de la descartada. Por todo eso es que los registros realmente se borran de un modo físico...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #21 (permalink)  
Antiguo 11/01/2015, 20:31
 
Fecha de Ingreso: abril-2011
Mensajes: 171
Antigüedad: 13 años
Puntos: 1
Respuesta: Campo NOT NULL con Default Value en NULL

ah muy buena explicación! Muy claro todo!! Ahora, siguiendo con mi tabla, los datos con los que son cargados, son planillas de cálculos en formato xls o xlsx que son importados al sistema, esta importación la hacen las personas que trabajan con el sistema, pero las planillas de calculo son confeccionadas por un montón de otras personas (es por eso que te decía que la cantidad podía ser 1 o "uno"), crees que esto puede ser la causa de los datos corruptos que me dices??
  #22 (permalink)  
Antiguo 11/01/2015, 20:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Campo NOT NULL con Default Value en NULL

Si lugar a dudas.
Para que los datos sean compatibles con lo que la base espera recibir y que no sean inconsistentes, hay que hacer un muy buen paseo, y la aplicación debe transportar esos datos de una forma adecuada.
Es habitual que los campos vacíos del Excel se traten mal en esos casos, peros sin conocer el código de la aplicación no se puede decir mucho más.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #23 (permalink)  
Antiguo 11/01/2015, 21:00
 
Fecha de Ingreso: abril-2011
Mensajes: 171
Antigüedad: 13 años
Puntos: 1
Respuesta: Campo NOT NULL con Default Value en NULL

A decir verdad, como la aplicación recién empieza a desarrollarse y todavía no esta en producción, la idea era que al importar el Excel, que los datos se carguen así tal cual como venían, sin realizar validación alguna! Entonces dices que para que esto no vuelva suceder, por lo menos deba validar los datos de este campo, no??
  #24 (permalink)  
Antiguo 11/01/2015, 21:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Campo NOT NULL con Default Value en NULL

Ninguna aplicación que funcione bien toma datos de fuentes externas sin validarlos.
Nunca.
Por la mas simple de las razones: No puedes garantizar a ciegas que los datos entrantes cumplan con lo estipulado.
Siempre existe la posibilidad de que un dato venga mal, en especial con hojas de Excel, que no tienen restricciones para meter datos de cualquier tipo en cualquier celda.

Ante la duda, lee la segunda frase de mi firma... Que la dijo un amigo mientras golpeaba una pared de frustración.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #25 (permalink)  
Antiguo 11/01/2015, 21:32
 
Fecha de Ingreso: abril-2011
Mensajes: 171
Antigüedad: 13 años
Puntos: 1
Respuesta: Campo NOT NULL con Default Value en NULL

Claro, exactamente ese era el motivo por el cual decidimos hacerlo así en esta fase, evidentemente tendremos que tomarnos el tiempo de hacerlo desde el principio.

Cambiando un poco de tema, me acaba de surgir una duda. Si tengo que realizar una consulta que depende d la correcta inserción de otra consulta, como puede deshacer la primer inserción si la segunda falla?? He leído algo de commit y rollback, pero no he podido interiorizarme bien, podrías darme una mano con esto también?? Saludos y nuevamente gracias
  #26 (permalink)  
Antiguo 11/01/2015, 21:36
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Campo NOT NULL con Default Value en NULL

Eso se hace con transacciones, que solo funcionan con tablas InnoDB, y creando la transaction antes del primer insert, haciendo commit luego de la segunda, si es exitosa.
Es recomendable poner todo en un stored procedure. Facilita mucho ese tipo de desarrollos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #27 (permalink)  
Antiguo 11/01/2015, 21:41
 
Fecha de Ingreso: abril-2011
Mensajes: 171
Antigüedad: 13 años
Puntos: 1
Respuesta: Campo NOT NULL con Default Value en NULL

Ok muy bien, veré si investigo un poco al respecto. La verdad nunca escuche "stored procedure"! je pero muchas gracias por tu tiempo y por compartir tus conocimientos con un novato como yo! Si no entiendo algo de esto ultimo, volveré por aquí a buscar mas respuestas!! Nuevamente, Gracias!
  #28 (permalink)  
Antiguo 12/01/2015, 13:32
 
Fecha de Ingreso: abril-2011
Mensajes: 171
Antigüedad: 13 años
Puntos: 1
Respuesta: Campo NOT NULL con Default Value en NULL

gnzsoloyo, he encontraba lo que solucionaba, y nuevamente con tu ayuda! Asi que solo escribo para agradecerte nuevamente! Tema cerrado! Saludos

Etiquetas: campo, default, null, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 07:00.