NodeJS的sequelize操作数据库(二)

1,588 阅读2分钟

这是我参与11月更文挑战的第16天,活动详情查看:2021最后一次更文挑战

一. 模型同步

模型同步到数据库表字段.通过调用异步函数(返回一个Promise)model.sync(options),Sequelize 将自动对数据库执行 SQL 查询. 只是修改数据库中的表结构,而不修改 JavaScript 端的模型

  • User.sync() - 如果表不存在,则创建该表(如果已经存在,则不执行任何操作)
  • User.sync({ force: true }) - 将创建表,如果表已经存在,则将其首先删除
  • User.sync({ alter: true }) - 这将检查数据库中表的当前状态(它具有哪些列,它们的数据类型等),然后在表中进行必要的更改以使其与模型匹配.

1. 单个模型User同步

await User.sync({ force: true });

2. sequelize实例同步所有模型字段

await sequelize.sync({ force: true });

3. 删除模型的表

await User.drop();

4. 删除所所有表

await sequelize.drop();\

5. 检测匹配的数据库名

sequelize.sync({ force: true, match: /_test$/ });

6. 设置字段的默认值

sequelize.define('User', {
  name: {
    type: DataTypes.STRING,
    defaultValue: "John Doe"
  }
});

二. 模型的字段的数据类型

const { DataTypes } = require("sequelize"); // 导入内置数据类型

1. 字符串(String)

DataTypes.STRING             // VARCHAR(255)
DataTypes.STRING(1234)       // VARCHAR(1234)
DataTypes.STRING.BINARY      // VARCHAR BINARY
DataTypes.TEXT               // TEXT
DataTypes.TEXT('tiny')       // TINYTEXT
DataTypes.CITEXT             // CITEXT          仅 PostgreSQL 和 SQLite.
DataTypes.TSVECTOR           // TSVECTOR        仅 PostgreSQL.

2. 布尔(Boolean)

DataTypes.BOOLEAN            // TINYINT(1)

3. 数字(Number)

DataTypes.INTEGER            // INTEGER
DataTypes.BIGINT             // BIGINT
DataTypes.BIGINT(11)         // BIGINT(11)

DataTypes.FLOAT              // FLOAT
DataTypes.FLOAT(11)          // FLOAT(11)
DataTypes.FLOAT(11, 10)      // FLOAT(11,10)

DataTypes.REAL               // REAL            仅 PostgreSQL.
DataTypes.REAL(11)           // REAL(11)        仅 PostgreSQL.
DataTypes.REAL(11, 12)       // REAL(11,12)     仅 PostgreSQL.

DataTypes.DOUBLE             // DOUBLE
DataTypes.DOUBLE(11)         // DOUBLE(11)
DataTypes.DOUBLE(11, 10)     // DOUBLE(11,10)

DataTypes.DECIMAL            // DECIMAL
DataTypes.DECIMAL(10, 2)     // DECIMAL(10,2)

4. 日期

DataTypes.DATE       // DATETIME 适用于 mysql / sqlite, 带时区的TIMESTAMP 适用于 postgres
DataTypes.DATE(6)    // DATETIME(6) 适用于 mysql 5.6.4+. 支持6位精度的小数秒
DataTypes.DATEONLY   // 不带时间的 DATE

5. UUID

使用 DataTypes.UUID时,PostgreSQL 和 SQLite生成 UUID 数据类型,MySQL生成CHAR(36) 数据类型. Sequelize使用Sequelize.UUIDV1 或 Sequelize.UUIDV4自动生成UUID

{
  type: DataTypes.UUID,
  defaultValue: Sequelize.UUIDV4 // 或 Sequelize.UUIDV1
}