Ich habe folgendes Modell in NodeJS mit sequelize und einer MySQL-Datenbank:Autoinkrement-ID mit sequelize in MySQL
var Sequelize = require('sequelize');
var User = sequelize.define('user', {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true
},
...
};
Ich versuche, einen neuen Benutzer zu meinem databse mit dem folgenden Code hinzuzufügen:
sequelize.transaction().then(function(t) {
User.create({/* User data without id */}, {
transaction: t
}).then(function() {
t.commit();
}).catch(function(error) {
t.rollback();
});
});
Danach erhalte ich den nächsten Fehler:
Executing (47f19f7b-a02d-4d72-ba7e-d5045520fffb): START TRANSACTION;
Executing (47f19f7b-a02d-4d72-ba7e-d5045520fffb): SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Executing (47f19f7b-a02d-4d72-ba7e-d5045520fffb): SET autocommit = 1;
Executing (47f19f7b-a02d-4d72-ba7e-d5045520fffb): INSERT INTO `user` (`id`, /* next fields */) VALUES (DEFAULT, /* next values */);
Executing (47f19f7b-a02d-4d72-ba7e-d5045520fffb): ROLLBACK;
Und die Fehlermeldung:
[SequelizeDatabaseError: ER_NO_DEFAULT_FOR_FIELD: Field 'id' doesn't have a default value]
name: 'SequelizeDatabaseError',
message: 'ER_NO_DEFAULT_FOR_FIELD: Field \'id\' doesn\'t have a default value'
Wenn ich jedoch manuell den ID-Wert festlegen, funktioniert es. Es scheint so zu sein, dass sequelize versucht, einen Standardwert im id-Feld zu setzen und stattdessen eine autoincrement-Ganzzahl zu setzen. Ich habe dieses Feld auch in meiner Datenbank als autoIncrement definiert.
Wie könnte ich diese Insertion machen? Muss ich die ID manuell einstellen?
EDIT
Dies ist meine Tabellendefinition:
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`uid` varchar(9) NOT NULL,
`name` varchar(20) NOT NULL,
`email` varchar(30) DEFAULT NULL,
`birthdate` date NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uid_UNIQUE` (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Was ist Ihre Datenbankstruktur:
Tabelle Dump? Vielleicht ist es in MySQL selbst nicht richtig eingestellt? – Andrius
@Andrius, Ich habe meine Frage zu aktualisieren, um diese Informationen hinzuzufügen – Genzotto