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

Pasa absolutamente del NOT NULL

Estas en el tema de Pasa absolutamente del NOT NULL en el foro de Bases de Datos General en Foros del Web. Código MySQL @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original CREATE DATABASE   `Autos` DEFAULT CHARACTER SET utf8 COLLATE utf8_spanish_ci;   CREATE TABLE coches ( matricula_auto VARCHAR ...
  #1 (permalink)  
Antiguo 10/07/2015, 03:03
 
Fecha de Ingreso: agosto-2014
Mensajes: 30
Antigüedad: 9 años, 7 meses
Puntos: 0
Pasa absolutamente del NOT NULL

Código MySQL

Código SQL:
Ver original
  1. CREATE DATABASE  `Autos` DEFAULT CHARACTER SET utf8 COLLATE utf8_spanish_ci;
  2.  
  3. CREATE TABLE coches (matricula_auto VARCHAR(12) NOT NULL,
  4. modelo_auto VARCHAR(20) NOT NULL,
  5. PRIMARY KEY (matricula_auto))
  6. engine=innodb
  7.  
  8. INSERT INTO coches (matricula_auto) VALUES('123456789123');


Y me inserta el registro. Aunque no le de valor alguno a modelo_auto. Pero lo peor es que pasa incluso de la clave primaria. Si hago esto:
Código SQL:
Ver original
  1. INSERT INTO coches (modelo_auto) VALUES('101010101010');

Me inserta el registro sin problemas, sin clave...

Las sentencias están copiadas y pegadas, las escribí justamente así.

Última edición por gnzsoloyo; 10/07/2015 a las 05:00
  #2 (permalink)  
Antiguo 10/07/2015, 05:02
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, 4 meses
Puntos: 2658
Respuesta: Pasa absolutamente del NOT NULL

Pues NO, no sucede...
Código MySQL:
Ver original
  1. mysql> CREATE TABLE coches (matricula_auto VARCHAR(12) NOT NULL,
  2.     -> modelo_auto VARCHAR(20) NOT NULL,
  3.     -> PRIMARY KEY (matricula_auto))
  4.     -> engine=innodb;
  5. Query OK, 0 rows affected (0.53 sec)
  6.  
  7. mysql> INSERT INTO coches (matricula_auto) VALUES('123456789123');
  8. ERROR 1364 (HY000): Field 'modelo_auto' doesn''t have a default value
  9.  
  10. mysql> INSERT INTO coches (modelo_auto) VALUES('101010101010');
  11. ERROR 1364 (HY000): Field 'matricula_auto' doesn''t have a default value
  12. mysql>

Obviamente estás haciendo algo mal con tus pruebas, porque eso es imposible.
__________________
¿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 10/07/2015, 07:06
 
Fecha de Ingreso: agosto-2014
Mensajes: 30
Antigüedad: 9 años, 7 meses
Puntos: 0
Respuesta: Pasa absolutamente del NOT NULL

Pero cómo voy a estar haciendo algo mal con las pruebas... si dichas pruebas te las estoy copiando y pegando? Trabajo con phpMyAdmin... será alguna opción del servidor como cuando tuve el problema por el innoDB?
  #4 (permalink)  
Antiguo 10/07/2015, 07:26
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, 4 meses
Puntos: 2658
Respuesta: Pasa absolutamente del NOT NULL

Bueno, yo te estoy mostrando el resultado de una ejecución de tus propias sentencias en la consola de MySQL, sin quitar ni añadir nada en ninguna, y como puedes ver claramente no admite nulos.
Ergo, hay sólo habría una posibilidad: phpMyadmin (que no es MySQL, sino una interfaz en PHP para acceder a MySQL), le está agregando algo que no se considera nulo, y por tanto no dispara el error. Recordemos que un espacio vacío (no blanco), no es un NULL...
Esto decir que algo de esta forma NO dispara errores, por ejemplo:
Código MySQL:
Ver original
  1. INSERT INTO coches (matricula_auto, modelo_auto) VALUES('123456789123', '');

Para asegurarnos de todo, sería necesario que nos mostrases el resultado de esto:

Código MySQL:
Ver original
  1. SHOW CREATE TABLE coches ;

Postea una captura de la pantalla al momento de ejecutar la sentencia en phpMyadmin, y si es posible postea el contenido de la tabla donde podamos ver lo que se insertó y lo que no.
__________________
¿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 10/07/2015, 07:38
 
Fecha de Ingreso: agosto-2014
Mensajes: 30
Antigüedad: 9 años, 7 meses
Puntos: 0
Respuesta: Pasa absolutamente del NOT NULL

He seguido haciendo pruebas. Acabo de leer que phpMYAdmin trata el NOT NULL a su manera. Que su NOT NULL sirve para que no hayan campos nulos, pero no para asegurarte que en el insert se introduzcan datos en los campos que tú ves necesarios. Es decir, en mi caso... aunque yo haga el insert como te mostré... lo que hace es rellenar el campo varchar que tengo como NOT NULL, y al que no introduzco dato alguno, con una cadena vacía. Habiendo leído eso... cree otros dos campos. Uno int y el otro double... ambos como NOT NULL... a ver que ocurría. Pues lo que ocurre es que en el caso de que no introduzca datos al hacer el INSERT... me pone ambos campos a cero. Tú qué dices? Es posible que sea cosa de phpMyAdmin o es una locura?

Por si acaso...

Código MySQL:
Ver original
  1. show create table coches;
  2.  
  3. CREATE TABLE `coches` (
  4.  `matricula_auto` varchar(12) NOT NULL,
  5.  `modelo_auto` varchar(20) NOT NULL,
  6.  `precioAlquilerDiario` int(11) NOT NULL,
  7.  `precioAlquilerMes` double NOT NULL,
  8.  PRIMARY KEY  (`matricula_auto`)

Cuando hago el select... el resultado se me muestra de forma gráfica y no sabría como mostrártelo. Si elijo vista impresión sale esto:

matricula_auto modelo_auto precioAlquilerDiario precioAlquilerMes
123456789123 0 0
123489123 0 0

No se ve bien... pero ambos ceros están respectivamente en precioAlquilerDiario y precioAlquilerMes. El campo modelo_auto es el que al parecer se me rellana con cadena vacía.

Última edición por gnzsoloyo; 10/07/2015 a las 07:59
  #6 (permalink)  
Antiguo 10/07/2015, 07: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, 4 meses
Puntos: 2658
Respuesta: Pasa absolutamente del NOT NULL

Como te dije, phpMyadmin no es la base de datos MySQL, sino sólo una interfaz programada en PHP para acceder a MySQL de un modo amigable.
No asumas que es un error de BBDD cuando usas phpMyadmin. Es igual a querer administrar una base en SQL Server con el Visual Studio... no es la herramienta adecuada, porque no es esa la meta.
Las capacidades y formas de ejecutar sentencias desde phMyadmin dependerán de lo que los programadores de esa aplicación le han puesto.
Por lo que dices, la versión de phpMyadmin que usas rellena el resto de los campos concadenas vacías, y como ya te dije, una cadena vacía no es NULL.

Si quieres trabajar de forma segura, debes usar algo como el MySQL Workbech, que sí ejecuta consultas en modo nativo.

Escribe a mano el INSERT en la ventana de ejecución de SQL y prueba. No uses los asistentes que phpMyadmin tenga.
__________________
¿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 14/07/2015, 10:50
 
Fecha de Ingreso: julio-2015
Mensajes: 3
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: Pasa absolutamente del NOT NULL

Cita:
Iniciado por Lentorro Ver Mensaje
Pero cómo voy a estar haciendo algo mal con las pruebas... si dichas pruebas te las estoy copiando y pegando? Trabajo con phpMyAdmin... será alguna opción del servidor como cuando tuve el problema por el innoDB?
Porqué no usas otra herramienta como el HeidiSQL o el MySQL Browser para que tengas mejor control de tus sentencias?
  #8 (permalink)  
Antiguo 15/07/2015, 00:46
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Pasa absolutamente del NOT NULL

Buenas,

Es curioso lo que te pasa. Puedes hacer un DESC de la tabla para ver que es lo que te esta creando exactamente?

Código SQL:
Ver original
  1. DESC coches;

Un saludo
__________________
If to err is human, then programmers are the most human of us

Etiquetas: mysql, null, valor
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




La zona horaria es GMT -6. Ahora son las 03:37.