Sequelize 默认值设置及约束的详细介绍

阅读时长 10 分钟读完

Sequelize 是 Node.js 中一个流行的 ORM 框架,可以方便地操作 MySQL、PostgreSQL、SQLite 和 MSSQL 数据库。在实际开发中,我们经常需要设置默认值和约束来保证数据的完整性和一致性。本文将详细介绍 Sequelize 中如何设置默认值和约束,并提供示例代码。

默认值设置

在 Sequelize 中,可以通过在模型定义中设置 defaultValue 属性来设置默认值。例如,假设我们有一个用户模型:

-- -------------------- ---- -------
----- ---- - ------------------------ -
  ---------- -
    ----- -----------------
    ---------- -----
  --
  --------- -
    ----- -----------------
    ---------- -----
  --
  ------ -
    ----- -----------------
    ---------- ------
    ------- ----
  --
  ---- -
    ----- ------------------
    ------------- --
  -
---

在上述代码中,我们设置了 age 字段的默认值为 18。当我们创建新用户时,如果没有指定 age 字段的值,Sequelize 将自动使用默认值 18。

除了设置固定的默认值,Sequelize 还支持使用函数来动态生成默认值。例如,我们可以为 createdAt 字段设置一个函数,该函数在每次创建新记录时生成当前时间戳:

-- -------------------- ---- -------
----- ---- - ------------------------ -
  ---------- -
    ----- -----------------
    ---------- -----
  --
  --------- -
    ----- -----------------
    ---------- -----
  --
  ------ -
    ----- -----------------
    ---------- ------
    ------- ----
  --
  ---- -
    ----- ------------------
    ------------- --
  --
  ---------- -
    ----- ---------------
    ------------- --------------------------
  -
---

在上述代码中,我们使用了 Sequelize.literal() 方法来执行 SQL 语句 NOW(),该语句返回当前时间戳。每次创建新用户时,Sequelize 将使用这个函数生成当前时间戳作为 createdAt 字段的默认值。

约束设置

在 Sequelize 中,可以使用约束来限制字段的取值范围和关联关系。常用的约束包括 allowNulluniqueprimaryKeyautoIncrementdefaultValuevalidatereferences

allowNull

allowNull 约束用于指定字段是否允许为空。默认情况下,所有字段都允许为空。如果要禁止某个字段为空,可以将 allowNull 属性设置为 false

-- -------------------- ---- -------
----- ---- - ------------------------ -
  ---------- -
    ----- -----------------
    ---------- -----
  --
  --------- -
    ----- -----------------
    ---------- -----
  --
  ------ -
    ----- -----------------
    ---------- ------
    ------- ----
  --
  ---- -
    ----- ------------------
    ------------- ---
    ---------- -----
  -
---

在上述代码中,我们将 age 字段的 allowNull 属性设置为 false,表示该字段不允许为空。

unique

unique 约束用于指定字段的唯一性。如果要确保某个字段的值在表中是唯一的,可以将 unique 属性设置为 true

-- -------------------- ---- -------
----- ---- - ------------------------ -
  ---------- -
    ----- -----------------
    ---------- -----
  --
  --------- -
    ----- -----------------
    ---------- -----
  --
  ------ -
    ----- -----------------
    ---------- ------
    ------- ----
  --
  ---- -
    ----- ------------------
    ------------- ---
    ---------- -----
  -
---

在上述代码中,我们将 email 字段的 unique 属性设置为 true,表示该字段的值在表中必须是唯一的。

primaryKey

primaryKey 约束用于指定字段作为主键。一个表只能有一个主键字段。如果要将某个字段作为主键,可以将 primaryKey 属性设置为 true

-- -------------------- ---- -------
----- ---- - ------------------------ -
  --- -
    ----- ------------------
    ----------- -----
    -------------- ----
  --
  ---------- -
    ----- -----------------
    ---------- -----
  --
  --------- -
    ----- -----------------
    ---------- -----
  --
  ------ -
    ----- -----------------
    ---------- ------
    ------- ----
  --
  ---- -
    ----- ------------------
    ------------- ---
    ---------- -----
  -
---

在上述代码中,我们将 id 字段的 primaryKey 属性设置为 true,表示该字段是主键。

autoIncrement

autoIncrement 约束用于指定字段自增。如果要将某个字段设置为自增,可以将 autoIncrement 属性设置为 true

-- -------------------- ---- -------
----- ---- - ------------------------ -
  --- -
    ----- ------------------
    ----------- -----
    -------------- ----
  --
  ---------- -
    ----- -----------------
    ---------- -----
  --
  --------- -
    ----- -----------------
    ---------- -----
  --
  ------ -
    ----- -----------------
    ---------- ------
    ------- ----
  --
  ---- -
    ----- ------------------
    ------------- ---
    ---------- -----
  -
---

在上述代码中,我们将 id 字段的 autoIncrement 属性设置为 true,表示该字段将自动生成递增的整数值。

defaultValue

在前面的章节中已经介绍了 defaultValue 属性的用法。

validate

validate 约束用于指定字段的取值范围和格式。可以使用内置的验证器或自定义的验证函数来实现验证。例如,我们可以为 age 字段设置一个验证器,该验证器要求 age 的值必须在 18 到 100 之间:

-- -------------------- ---- -------
----- ---- - ------------------------ -
  ---------- -
    ----- -----------------
    ---------- -----
  --
  --------- -
    ----- -----------------
    ---------- -----
  --
  ------ -
    ----- -----------------
    ---------- ------
    ------- ----
  --
  ---- -
    ----- ------------------
    ------------- ---
    ---------- ------
    --------- -
      ---- ---
      ---- ---
    -
  -
---

在上述代码中,我们为 age 字段设置了一个验证器,该验证器要求 age 的值必须在 18 到 100 之间。Sequelize 内置了许多常用的验证器,如 isEmailisUrlisIntisFloat 等。

references

references 约束用于指定字段的外键关联。如果要将某个字段作为外键,可以将 references 属性设置为关联表的名称和字段名。

-- -------------------- ---- -------
----- ---- - ------------------------ -
  --- -
    ----- ------------------
    ----------- -----
    -------------- ----
  --
  ---------- -
    ----- -----------------
    ---------- -----
  --
  --------- -
    ----- -----------------
    ---------- -----
  --
  ------ -
    ----- -----------------
    ---------- ------
    ------- ----
  --
  ---- -
    ----- ------------------
    ------------- ---
    ---------- -----
  --
  ---------- -
    ----- ------------------
    ----------- -
      ------ ------------
      ---- ----
    -
  -
---

----- ------- - --------------------------- -
  --- -
    ----- ------------------
    ----------- -----
    -------------- ----
  --
  ----- -
    ----- -----------------
    ---------- ------
    ------- ----
  -
---

在上述代码中,我们将 companyId 字段设置为外键,并将其关联到 companies 表的 id 字段。这样,当我们查询用户时,可以方便地通过 companyId 字段查找所属公司。

总结

本文介绍了 Sequelize 中如何设置默认值和约束,并提供了示例代码。在实际开发中,正确地设置默认值和约束可以保证数据的完整性和一致性,减少错误和漏洞。因此,建议开发者在使用 Sequelize 操作数据库时,充分了解和利用其中的默认值和约束功能。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/650da1bd95b1f8cacd73dc44

纠错
反馈