Javascript Sequelize中的.sync()的真正用途是什么?

Javascript Sequelize中的.sync()的真正用途是什么?,javascript,mysql,node.js,sequelize.js,Javascript,Mysql,Node.js,Sequelize.js,我是Sequelize和Node.js的新手,我想知道除了在开发阶段创建和构建一个完全适合您的项目的数据库之外,是否还需要.sync() 以下面的示例为例:如果我已经有了自己的数据库结构(使用MySQL Workbench或其他什么工具制作),那么使用.sync()是否有用?它在生产中有重要的应用吗? 如果我已经有了我的数据库结构(使用MySQL Workbench或 不管怎样),使用.sync()是否有用?有没有 在生产中的重要应用 否。Sequelizesync将创建不存在的表。如果您已经拥

我是Sequelize和Node.js的新手,我想知道除了在开发阶段创建和构建一个完全适合您的项目的数据库之外,是否还需要.sync()

以下面的示例为例:如果我已经有了自己的数据库结构(使用MySQL Workbench或其他什么工具制作),那么使用.sync()是否有用?它在生产中有重要的应用吗?

如果我已经有了我的数据库结构(使用MySQL Workbench或 不管怎样),使用.sync()是否有用?有没有 在生产中的重要应用

否。Sequelize
sync
将创建不存在的表。如果您已经拥有了所有的表,它将不会做任何事情。但是,如果使用
force:true
,它将删除存在的表,并从模型定义中重新创建它们

另一方面,人们应该更喜欢
迁移
而不是
同步
<代码>同步不反映变化。迁移功能更强大,您可以使用它撤消、重做和执行更多操作

下面是关于sequelize的一个很好的答案。sync()为所有已定义的模型创建表(即,在sequelize实例上使用define方法)。它通过创建适当的表和关系(如果适用)将模型与数据库同步

例如:

sequelize
  .sync()
  .then(result => {
    console.log(result);
  })
  .catch(err => console.log(err));
这是控制台日志开头的内容(“products”表是根据“product”模型创建的;它是自动多元化的):


@AbhinavD对此进行了讨论,但要重新迭代:
sync
永远不会在真正的数据库上使用。您应该只使用迁移。然而,
sync
对于测试来说是非常有价值的!这是一种确保测试套件在干净的数据库上运行的简单方法。在运行测试之前,我们通常先运行迁移
down
,然后再运行
up
。这使我们能够确保
向下迁移也能正常工作。万一我们不得不减少生产,这真的很方便
Executing (default): CREATE TABLE IF NOT EXISTS `products` (`id` INTEGER NOT NULL auto_increment , `title` VARCHAR(255), `price` DOUBLE PRECISION NOT NULL, `imageUrl` VARCHAR(255) NOT NULL, `description` VARCHAR(255) NOT NULL, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;