node.js 迁移时不保留主键
node.js sequelize no primary keys when migrating
这是我 node.js 项目中的 create_user_table
迁移。
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable("comments", {
content: {
type: Sequelize.STRING(20),
allowNull: false
},
lastName: {
type: Sequelize.STRING(20),
allowNull: false
}
})
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable("comments")
}
};
在 运行ning sequelize db:migrate 之后,这是结果:
sequelize db:migrate
Sequelize CLI [Node: 10.15.2, CLI: 5.4.0, ORM: 5.8.5]
Loaded configuration file "config/config.json".
Using environment "development".
== 20190507193540-create_comment_table: migrating =======
== 20190507193540-create_comment_table: migrated (0.021s)
== 20190507195058-create_user_table: migrating =======
== 20190507195058-create_user_table: migrated (0.011s)
当我在 mysql CLI 中 运行 describe users;
时, table 不包含 ID?
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| username | varchar(20) | NO | | NULL | |
| lastName | varchar(20) | NO | | NULL | |
+----------+-------------+------+-----+---------+-------+
为了完全确定,我也试过了。
mysql> show index from users where id = 'PRIMARY';
ERROR 1054 (42S22): Unknown column 'id' in 'where clause'
您必须在模型和迁移文件中手动声明一个 id
字段,例如:
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable("comments", {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
},
content: {
type: Sequelize.STRING(20),
allowNull: false
},
lastName: {
type: Sequelize.STRING(20),
allowNull: false
}
})
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable("comments")
}
};
这是我 node.js 项目中的 create_user_table
迁移。
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable("comments", {
content: {
type: Sequelize.STRING(20),
allowNull: false
},
lastName: {
type: Sequelize.STRING(20),
allowNull: false
}
})
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable("comments")
}
};
在 运行ning sequelize db:migrate 之后,这是结果:
sequelize db:migrate
Sequelize CLI [Node: 10.15.2, CLI: 5.4.0, ORM: 5.8.5]
Loaded configuration file "config/config.json".
Using environment "development".
== 20190507193540-create_comment_table: migrating =======
== 20190507193540-create_comment_table: migrated (0.021s)
== 20190507195058-create_user_table: migrating =======
== 20190507195058-create_user_table: migrated (0.011s)
当我在 mysql CLI 中 运行 describe users;
时, table 不包含 ID?
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| username | varchar(20) | NO | | NULL | |
| lastName | varchar(20) | NO | | NULL | |
+----------+-------------+------+-----+---------+-------+
为了完全确定,我也试过了。
mysql> show index from users where id = 'PRIMARY';
ERROR 1054 (42S22): Unknown column 'id' in 'where clause'
您必须在模型和迁移文件中手动声明一个 id
字段,例如:
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable("comments", {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
},
content: {
type: Sequelize.STRING(20),
allowNull: false
},
lastName: {
type: Sequelize.STRING(20),
allowNull: false
}
})
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable("comments")
}
};