mysql - not - field usuario doesn t have a default value
¿El campo ''id'' no tiene un valor predeterminado? (9)
Soy nuevo en este SQL; He visto preguntas similares con programas mucho más grandes, que no puedo entender en este momento. Estoy haciendo una base de datos para juegos de cartas para usar en mi página de inicio.
Estoy usando MySQL Workbench en Windows. El error que recibo es:
Código de error: 1364. El campo ''id'' no tiene un valor predeterminado
CREATE TABLE card_games
(
nafnleiks varchar(50),
leiklysing varchar(3000),
prentadi varchar(1500),
notkunarheimildir varchar(1000),
upplysingar varchar(1000),
ymislegt varchar(500),
id int(11) PK
);
insert into card_games (nafnleiks, leiklysing, prentadi, notkunarheimildir, upplysingar, ymislegt)
values(''Svartipétur'',
''Leiklýsingu vantar'',
''Er prentað í: Þórarinn Guðmundsson (2010). Spilabókin - Allir helstu spilaleikir og spil.'',
''Heimildir um notkun: Árni Sigurðsson (1951). Hátíðir og skemmtanir fyrir hundrað árum'',
''Aðrar upplýsingar'',
''ekkert hér sem stendur''
);
values(''Handkurra'',
''Leiklýsingu vantar'',
''Er prentað í: Þórarinn Guðmundsson (2010). Spilabókin - Allir helstu spilaleikir og spil.'',
''Heimildir um notkun'',
''Aðrar upplýsingar'',
''ekkert her sem stendur''
);
values(''Veiðimaður'',
''Leiklýsingu vantar'',
''Þórarinn Guðmundsson (2010). Spilabókin - Allir helstu spilaleikir og spil. Reykjavík: Bókafélagið. Bls. 19-20.'',
''vantar'',
''vantar'',
''vantar''
);
Como id
es la clave principal, no puede tener filas diferentes con el mismo valor. Intenta cambiar tu tabla para que el id
se incremente automáticamente:
id int NOT NULL AUTO_INCREMENT
y luego establecer la clave principal de la siguiente manera:
PRIMARY KEY (id)
Todos juntos:
CREATE TABLE card_games (
id int(11) NOT NULL AUTO_INCREMENT,
nafnleiks varchar(50),
leiklysing varchar(3000),
prentadi varchar(1500),
notkunarheimildir varchar(1000),
upplysingar varchar(1000),
ymislegt varchar(500),
PRIMARY KEY (id));
De lo contrario, puede indicar el id
en cada inserción, teniendo cuidado de establecer un valor diferente cada vez:
insert into card_games (id, nafnleiks, leiklysing, prentadi, notkunarheimildir, upplysingar, ymislegt)
values(1, ''Svartipétur'', ''Leiklýsingu vantar'', ''Er prentað í: Þórarinn Guðmundsson (2010). Spilabókin - Allir helstu spilaleikir og spil.'', ''Heimildir um notkun: Árni Sigurðsson (1951). Hátíðir og skemmtanir fyrir hundrað árum'', ''Aðrar upplýsingar'', ''ekkert hér sem stendur'' );
Como desarrollador, se recomienda encarecidamente utilizar el modo STRICT
porque le permitirá ver los problemas / errores / advertencias que pueden surgir en lugar de simplemente solucionarlo desactivando el modo estricto. También es una mejor práctica.
El modo estricto es una gran herramienta para ver código desordenado y descuidado.
Desde mysql 5.6, hay un nuevo valor predeterminado que garantiza que se está insertando explícitamente cada campo que no tiene un valor predeterminado establecido en la definición de la tabla.
para deshabilitar y probar esto: vea esta respuesta aquí: mysql error 1364 Field no tiene valores predeterminados
Le recomendaría realizar una prueba sin él, luego volver a habilitarlo y asegurarse de que todas sus tablas tengan valores predeterminados para los campos que no está pasando de manera explícita en cada consulta INSERTAR.
Si un visor de mysql de terceros está dando este error, probablemente esté limitado a la corrección en ese enlace.
Esto se debe a que MySQL tiene un conjunto de modo estricto que no permite los comandos INSERT o UPDATE con campos vacíos donde el esquema no tiene un conjunto de valores predeterminado.
Hay un par de correcciones para esto.
El primer ''arreglo'' es asignar un valor predeterminado a su esquema. Esto se puede hacer con un simple comando ALTER:
ALTER TABLE `details` CHANGE COLUMN `delivery_address_id` `delivery_address_id` INT(11) NOT NULL DEFAULT 0 ;
Sin embargo, esto puede ser necesario para muchas tablas en el esquema de su base de datos que se volverán tediosas muy rápidamente. La segunda solución es eliminar sql_mode STRICT_TRANS_TABLES en el servidor mysql.
Si está utilizando un MySQL instalado, debería editar el archivo my.cnf en el directorio MySQL. Cambie el sql_mode en la parte inferior:
#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
sql_mode=NO_ENGINE_SUBSTITUTION
Guarde el archivo y reinicie Mysql.
Fuente: https://www.euperia.com/development/mysql-fix-field-doesnt-default-value/1509
Hay 2 soluciones mencionadas a continuación:
Solución 1
MySQL es más probable en el modo STRICT SQL . Intente ejecutar la consulta SQL SET GLOBAL sql_mode=''''
o edite su my.cnf / my.ini para asegurarse de que no está configurando STRICT_ALL_TABLES
y / o STRICT_TRANS_TABLES
.
Solucion 2
Si la Solución-1 no funciona, intente la Solución-2 como se indica en los pasos a continuación:
- Ejecute la herramienta MySQL Administrator como administrador.
- Luego ve a la variable de inicio.
- Luego ve a la pestaña de Avance.
- encuentre el Modo SQL y elimine
STRICT_ALL_TABLES
y / oSTRICT_TRANS_TABLES
y luego haga clic en Aplicar cambios. - Reinicie el servidor MySQL.
- Hecho.
Nota: He probado estas soluciones en MySQL Server 5.7
La identificación debe establecer como auto-increment
.
Para modificar una columna de ID existente para auto-incremento, simplemente agregue esto
ALTER TABLE card_games MODIFY id int NOT NULL AUTO_INCREMENT;
Para mí el problema se solucionó cuando cambié
<id name="personID" column="person_id">
<generator class="native"/>
</id>
a
<id name="personID" column="person_id">
<generator class="increment"/>
</id>
en mi Person.hbm.xml
.
después de eso volví a encontrar el mismo error para otro campo (mobno). Intenté reiniciar mi IDE, volviendo a crear la base de datos con el problema anterior. Cuando volví a crear mis tablas usando (sin ENGINE=InnoDB DEFAULT CHARSET=latin1;
y eliminando los guiones bajos en el nombre del campo)
CREATE TABLE `tbl_customers` (
`pid` bigint(20) NOT NULL,
`title` varchar(4) NOT NULL,
`dob` varchar(10) NOT NULL,
`address` varchar(100) NOT NULL,
`country` varchar(4) DEFAULT NULL,
`hometp` int(12) NOT NULL,
`worktp` int(12) NOT NULL,
`mobno` varchar(12) NOT NULL,
`btcfrom` varchar(8) NOT NULL,
`btcto` varchar(8) NOT NULL,
`mmname` varchar(20) NOT NULL
)
en lugar de
CREATE TABLE `tbl_person` (
`person_id` bigint(20) NOT NULL,
`person_nic` int(10) NOT NULL,
`first_name` varchar(20) NOT NULL,
`sur_name` varchar(20) NOT NULL,
`person_email` varchar(20) NOT NULL,
`person_password` varchar(512) NOT NULL,
`mobno` varchar(10) NOT NULL DEFAULT ''1'',
`role` varchar(10) NOT NULL,
`verified` int(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Probablemente creo que esto se debe al uso de ENGINE=InnoDB DEFAULT CHARSET=latin1;
, porque una vez obtuve el error org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Unknown column ''mob_no'' in ''field list''
aunque era mi nombre de columna anterior, que incluso no existe en mi tabla actual. Incluso después de realizar una copia de seguridad de la base de datos (con el nombre de columna modificado, usando el motor InnoDB), todavía recibí el mismo error con el nombre de campo antiguo. Esto probablemente debido al almacenamiento en caché en ese motor.
Solución: eliminar STRICT_TRANS_TABLES
de sql_mode
Para comprobar su configuración por defecto,
mysql> set @@sql_mode =
''STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'';
Query OK, 0 rows affected (0.00 sec)
mysql> select @@sql_mode;
+----------------------------------------------------------------+
| @@sql_mode |
+----------------------------------------------------------------+
| STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+----------------------------------------------------------------+
1 row in set (0.00 sec)
Ejecutar una consulta de muestra
mysql> INSERT INTO nb (id) VALUES(3);
ERROR 1364 (HY000): Field ''field'' doesn''t have a default value
Elimine sus STRICT_TRANS_TABLES
restableciéndolo a nulo.
mysql> set @@sql_mode = '''';
Query OK, 0 rows affected (0.00 sec)
Ahora, ejecute la misma consulta de prueba.
mysql> INSERT INTO nb (id) VALUES(3);
Query OK, 1 row affected, 1 warning (0.00 sec)
Fuente: https://netbeans.org/bugzilla/show_bug.cgi?id=190731
asegúrese de que no tiene un definidor definido para la clave principal en la clase del modelo.
public class User{
@Id
@GeneratedValues
private int user_Id;
private String userName;
public int getUser_Id{
return user_Id;
}
public String getUserName{
return userName;
}
public void setUserName{
this.userName=userName;
}
}