MySql - 字段 'park_id' 没有默认值
MySql - Field 'park_id' doesn't have a default value
我是Mysql的新手,一直卡在这个上面
我正在使用 bookshelfjs 创建多对多关系,每次我尝试将我的文章附加到公园时,我都会收到以下错误。
(node:24480) UnhandledPromiseRejectionWarning: Unhandled promise
rejection (rejection id: 1): Error: insert into articles_parks
(article_id
, park_id
) values (0, DEFAULT) -
ER_NO_DEFAULT_FOR_FIELD: Field 'park_id' doesn't have a default value
这是我的 MySQL 代码:
Create table parks(
park_id integer,
primary key (park_id)
);
Create table articles(
article_id integer,
primary key (article_id)
);
CREATE TABLE articles_parks(
article_id integer,
park_id integer,
Primary Key (article_id,park_id),
Foreign Key (article_id) REFERENCES articles(article_id),
Foreign Key (park_id) REFERENCES parks(park_id)
);
这是我的书架代码:
var bookshelf = require('bookshelf')(knex);
var Article = bookshelf.Model.extend({
tableName: 'articles',
park: function() {
return this.belongsToMany(Park);
}
});
var Park = bookshelf.Model.extend({
tableName: 'parks',
articles: function() {
return this.belongsToMany(Article);
}
});
const number = 197;
var article1 = new Article({article_id: number});
Promise.all([article1.save()])
.then(function() {
return Promise.all([
new Park({park_id: 200}).articles().attach([article1]),
]);
})
您的两个主键(park_id 和 article_id)未设置为自动递增。在 MySQL 中,您必须明确声明您希望主键自动递增,否则它将假定您将手动为其分配值。这就是它返回缺少默认值的错误的原因。
尝试将您的 SQL 代码编辑为:
Create table parks(
park_id integer AUTO_INCREMENT,
primary key (park_id)
);
Create table articles(
article_id integer AUTO_INCREMENT,
primary key (article_id)
);
CREATE TABLE articles_parks(
article_id integer,
park_id integer,
Primary Key (article_id,park_id),
Foreign Key (article_id) REFERENCES articles(article_id),
Foreign Key (park_id) REFERENCES parks(park_id)
);
我是Mysql的新手,一直卡在这个上面
我正在使用 bookshelfjs 创建多对多关系,每次我尝试将我的文章附加到公园时,我都会收到以下错误。
(node:24480) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: insert into
articles_parks
(article_id
,park_id
) values (0, DEFAULT) - ER_NO_DEFAULT_FOR_FIELD: Field 'park_id' doesn't have a default value
这是我的 MySQL 代码:
Create table parks(
park_id integer,
primary key (park_id)
);
Create table articles(
article_id integer,
primary key (article_id)
);
CREATE TABLE articles_parks(
article_id integer,
park_id integer,
Primary Key (article_id,park_id),
Foreign Key (article_id) REFERENCES articles(article_id),
Foreign Key (park_id) REFERENCES parks(park_id)
);
这是我的书架代码:
var bookshelf = require('bookshelf')(knex);
var Article = bookshelf.Model.extend({
tableName: 'articles',
park: function() {
return this.belongsToMany(Park);
}
});
var Park = bookshelf.Model.extend({
tableName: 'parks',
articles: function() {
return this.belongsToMany(Article);
}
});
const number = 197;
var article1 = new Article({article_id: number});
Promise.all([article1.save()])
.then(function() {
return Promise.all([
new Park({park_id: 200}).articles().attach([article1]),
]);
})
您的两个主键(park_id 和 article_id)未设置为自动递增。在 MySQL 中,您必须明确声明您希望主键自动递增,否则它将假定您将手动为其分配值。这就是它返回缺少默认值的错误的原因。
尝试将您的 SQL 代码编辑为:
Create table parks(
park_id integer AUTO_INCREMENT,
primary key (park_id)
);
Create table articles(
article_id integer AUTO_INCREMENT,
primary key (article_id)
);
CREATE TABLE articles_parks(
article_id integer,
park_id integer,
Primary Key (article_id,park_id),
Foreign Key (article_id) REFERENCES articles(article_id),
Foreign Key (park_id) REFERENCES parks(park_id)
);