我正在使用MVC节点express pug和sequelize作为ORM和视图部分,我用pug做了一个待办事项列表,所以当我开始我的应用程序工作正常,但当我试图创建一个新的项目时,这个项目已经插入到数据库中,出现错误1364
原则上这是一个个人项目添加到我的投资组合,我看到有一个可能的解决方案,通过停用严格的SQL模式,但我想知道是否有另一个解决方案
model code Proyect.js
const Sequelize = require('sequelize');
//conect db
const db = require('../config/db');
const Proyects = db.define('proyects', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false
},
name: Sequelize.STRING,
url: Sequelize.STRING
});
module.exports = Proyects;
字符串
我希望用这个模型在我的表中创建一个寄存器,但当我尝试实际错误时,它是下一个
Executing (default): CREATE TABLE IF NOT EXISTS `proyects` (`id` INTEGER NOT NULL auto_increment , `name` VARCHAR(255), `url` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
Executing (default): SHOW INDEX FROM `proyects`
conected to db
Executing (default): INSERT INTO `proyects` (`id`,`createdAt`,`updatedAt`) VALUES (DEFAULT,?,?);
{ SequelizeDatabaseError: Field 'id' doesn't have a default value
code: 'ER_NO_DEFAULT_FOR_FIELD',
errno: 1364,
sqlState: 'HY000',
sqlMessage: 'Field \'id\' doesn\'t have a default value',
sql:
'INSERT INTO `proyects` (`id`,`createdAt`,`updatedAt`) VALUES (DEFAULT,?,?);' },
型
4条答案
按热度按时间htrmnn0y1#
据我所知,这是MySQL数据库的问题。表中的“id”字段被标记为非空,并且在插入值时,您没有为“id”字段提供任何值。
您可以避免面对此错误,要么在'id'字段中允许空值,要么在创建表时提供默认值(您可以使用defaultValue标志)。否则,你已经有了一个替代的解决方案。
efzxgjgh2#
我最初得到这个错误是因为我拼错了autoIncrement。为了解决这个问题,我在应用正确的拼写后使用了如下的{force:true},一旦问题消失,就从sync()方法中删除了它。我永远不会在生产部署中使用{force:true},因为它会删除表(并删除所有记录)。
在app.js中,调用sync方法如下
字符串
swvgeqrz3#
你可以安装uuid
npm install uuid
然后const uuid = require('uuid')
在任何你想要的地方使用它例如id:uuid.v4()
pjngdqdw4#
内部异常:java.sql.SQLException:字段“Id”没有默认值。
此问题已解决。在我的情况下,这是一个配置错误的问题。
在
glassfish-resources.xml
中,我有这个指向测试数据库的设置:字符串
但在Payara Console中,我有一个指向另一个数据库的配置。
型
我认为这种错误配置会导致
Auto_Increment
下一个值不匹配,从而导致了这个问题。我想这和你说的序列号有时会被重置是一样的。型
在控制台中更改Pool Name以与
glassfish-resource.xml
中的pool-name匹配并且它们指向相同的数据库后,解决问题。