这是我参与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
}