connection.sync({force:false})创建不需要的表

时间:2018-08-29 21:14:56

标签: mysql node.js sequelize.js

我正在玩在“中”上找到的代码,并更改了模型中表格的名称,形式为:

const connection = require ('../connection');
const { Sequelize } = connection;

const User = connection.define('user', {
    id: {
        type: connection.Sequelize.UUID,
        defaultValue: connection.Sequelize.UUIDV4,
        primaryKey: true
    },
    name: Sequelize.STRING,
    password: Sequelize.STRING

});

module.exports = User;

收件人:

const connection = require ('../connection');
const { Sequelize } = connection
const User = connection.define('Users', {
    id: {
        type: connection.Sequelize.UUID,
        defaultValue: connection.Sequelize.UUIDV4,
        primaryKey: true
    },
    name: Sequelize.STRING,
    password: Sequelize.STRING

});

module.exports = User;

我还更改了数据库中表的名称。

然后我决定返回原始名称。 但是从那以后,每次我运行整个代码时,我的数据库都会显示2个表:

+--------------------+
| Tables_in_database |
+--------------------+
| user               |
| users              |
+--------------------+ 

请注意,我已经将表名从'user'更改为'Users'而不是'users',但是创建的表是'users'。

尽管如此,我还是删除了'users'表,但是如果我运行代码,则会重新创建它。

我到处都看过,似乎没有对“用户”表或模型的引用。 阻止创建表的唯一方法是从index.js中删除以下行:

connection.sync({force: false});

为什么会发生这种情况?如何防止即使在connection.sync仍然存在的情况下也无法创建表?

1 个答案:

答案 0 :(得分:1)

我认为这可以为您提供帮助:

const Bar = sequelize.define('bar', { /* bla */ }, {
  // disable the modification of table names; By default, sequelize will automatically
  // transform all passed model names (first parameter of define) into plural.
  // if you don't want that, set the following
  freezeTableName: true,

  // define the table's name
  tableName: 'my_very_custom_table_name',
})

更多详细信息: DO READ