mysql - vacios - is null sql server ejemplos
MySQL-¿No puedo insertar un valor NULL en la columna, pero tengo un valor predeterminado especificado? (5)
Tengo una tabla en MySQL que tiene algunas columnas que tienen valores predeterminados especificados, pero cuando intento insertar una fila (sin especificar los valores de esas columnas predeterminadas), aparece un error que dice que no puedo insertar valores NULL.
Aquí está el ejemplo de la tabla;
CREATE TABLE `users` (
`Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`UniqueName` varchar(120) NOT NULL,
`Password` varchar(1000) NOT NULL,
`PublicFlag` tinyint(1) NOT NULL,
`NoTimesLoggedIn` int(10) unsigned NOT NULL DEFAULT ''0'',
`DateTimeLastLogin` timestamp NOT NULL DEFAULT ''1971-01-01 00:00:00'',
`UserStatusTypeId` int(10) unsigned NOT NULL,
`Private` tinyint(1) NOT NULL DEFAULT ''0'',
`SiteName` varchar(255) NOT NULL,
`CountryId` int(10) NOT NULL DEFAULT ''0'',
`TimeZoneId` varchar(255) NOT NULL DEFAULT ''UTC'',
`CultureInfoId` int(10) unsigned NOT NULL DEFAULT ''0'',
`DateCreated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`UserCreated` int(10) unsigned NOT NULL,
`LastUpdatedBy` int(10) unsigned NOT NULL,
`DateLastUpdated` datetime DEFAULT NULL,
PRIMARY KEY (`Id`),
UNIQUE KEY `UniqueName_UNIQUE` (`UniqueName`),
KEY `Index 3` (`SiteName`)
)
Se queja de TimeZoneId, y cuando yo poblo TimeZoneId, se queja de CultureInforId.
Estoy usando la versión de MySQL: 5.1.43-community
Aquí está la consulta de inserción que estoy tratando de insertar, tomada de NHibernate Profiler:
INSERT INTO Users
(UniqueName,
Password,
PublicFlag,
NoTimesLoggedIn,
DateTimeLastLogin,
SiteName,
TimeZoneId,
DateCreated,
DateLastUpdated,
Private,
CountryId,
CultureInfoId,
UserCreated,
LastUpdatedBy,
UserStatusTypeId)
VALUES (''[email protected]'',''u1uhbQviLp89P9b3EnuN/Prvo3A4KVSiUa0='',1,
0,''1/01/1971 12:00:00 AM'',''V9O1T80Q6D'',NULL,''2/08/2010 2:13:44 AM'',
''2/08/2010 2:13:44 AM'',0, NULL, NULL, 4, 4,31)
Como alternativa al uso de la palabra clave DEFAULT, también puede simplemente no especificar valores para los campos en los que desea tener valores predeterminados. Por ejemplo, si acaba de eliminar TimeZoneId, CountryId y CultureInfoId de su consulta por completo, esas columnas recibirán los valores predeterminados automáticamente:
INSERT INTO Users
(UniqueName,
Password,
PublicFlag,
NoTimesLoggedIn,
DateTimeLastLogin,
SiteName,
DateCreated,
DateLastUpdated,
Private,
UserCreated,
LastUpdatedBy,
UserStatusTypeId)
VALUES
(''[email protected]'',''u1uhbQviLp89P9b3EnuN/Prvo3A4KVSiUa0='',1,0,
''1/01/1971 12:00:00 AM'',''V9O1T80Q6D'',''2/08/2010 2:13:44 AM'',
''2/08/2010 2:13:44 AM'',0,4,4,31)
No estoy seguro de cómo funcionaría eso en el contexto de NHibernate, ya que esa parte de la pregunta no estaba tan bien explicada.
No inserte valores NULL. Supongo que estabas intentando esta sintaxis:
INSERT INTO users VALUES (null, ''Jones'', ''yarg'', 1, null, null, null);
En su lugar, use esta sintaxis:
INSERT INTO users SET UniqueName=''Jones'', Password=''yarg'';
Para obtener más información, consulte la documentación de MySQL en INSERTAR .
Tiene "NOT NULL" establecido en los campos en los que está intentando INSERT NULL.
p.ej. CountryId, CultureInfoId, TimeZoneId
Ejecuta lo siguiente:
ALTER TABLE `users` MODIFY `CountryId` int(10) DEFAULT ''0'' NULL;
ALTER TABLE `users` MODIFY `CultureInfoId` int(10) unsigned DEFAULT ''0'' NULL;
ALTER TABLE `users` MODIFY `TimeZoneId` varchar(255) DEFAULT ''UTC'' NULL;
EDIT: No se dio cuenta de que quería el valor predeterminado en lugar de NULL en la inserción "nula". Básicamente, como ya se ha sugerido, use la palabra clave DEFAULT en lugar de NULL en los valores.
O deje los campos y valores NULOS completamente fuera y mysql usará los valores predeterminados definidos, por ejemplo.
INSERT INTO Users
(UniqueName,
Password,
PublicFlag,
NoTimesLoggedIn,
DateTimeLastLogin,
SiteName,
DateCreated,
DateLastUpdated,
Private,
UserCreated,
LastUpdatedBy,
UserStatusTypeId)
VALUES (''[email protected]'',''u1uhbQviLp89P9b3EnuN/Prvo3A4KVSiUa0='',1,
0,''1/01/1971 12:00:00 AM'',''V9O1T80Q6D'',''2/08/2010 2:13:44 AM'',
''2/08/2010 2:13:44 AM'',0, 4, 4,31)
TimeZoneId varchar(255) NOT NULL DEFAULT ''UTC'',
CultureInfoId` int (10) unsigned NOT NULL DEFAULT ''0'',
Para estos campos, ha establecido restricciones como "No nulo" y, por lo tanto, los valores insertados no pueden ser nulos y, por lo tanto, alterar la estructura de la tabla o simplemente no especificar valores para los campos que desea tener valores predeterminados.
Utilice la palabra clave DEFAULT
lugar:
INSERT INTO users (TimeZoneId) VALUES (DEFAULT);