Sequelize 如何添加联合主键?
在 Sequelize 中,我们使用关系型数据库来存储数据。在数据库中,每个表都要有一个主键,用于唯一标识每一行数据。有些情况下,一个表需要使用多个字段来作为主键,这就需要添加联合主键。
下面,我们将介绍如何在 Sequelize 中添加联合主键。
定义模型
首先,我们需要定义一个模型,并在模型中定义联合主键。
-- -------------------- ---- ------- ----- - ---------- --------- - - --------------------- ----- --------- - --- --------------------- ----------- ----------- - -------- ------- --- ----- ---- - ------------------------ - --- - ----- ------------------ ----------- ----- -------------- ----- ---------- ----- -- ----- - ----- ----------------- ---------- ----- -- ---- - ----- ------------------ ---------- ------ ------------- -- - -- - ---------- ------- ----------- ------ -------- - - ------- ----- ------- -------- ------ - - ---
代码中,我们创建了一个 User 模型,并在模型中定义了 id、name 和 age 字段。接着,我们在模型的 options 中定义了表名和索引,索引中包含了 name 和 age 两个字段。
定义联合主键之后,我们需要在模型中明确指定每个字段是否允许为空,并使用唯一性约束来保证不会出现重复数据。
同步模型
在定义完成模型之后,我们需要使用 Sequelize.sync() 方法来同步模型和数据库。
sequelize.sync() .then(() => console.log('Tables have been synced')) .catch((e) => console.error('Failed to sync tables', e));
添加数据
在模型和数据库同步之后,我们就可以使用模型来添加数据了。
User.create({ name: 'Tom', age: 18 }) .then((user) => { console.log(user.toJSON()); }) .catch((e) => console.error('Failed to create user', e));
在上面的代码中,我们使用 User.create() 方法来添加一条数据。该方法返回一个 Promise 对象,我们可以使用 .then() 方法来获取添加成功后的数据。在获取到数据后,我们使用 .toJSON() 方法将数据转换成 JSON 格式并输出到控制台。
查询数据
我们可以使用模型的 findAll() 方法来查询数据,对于联合主键,我们可以使用 where 条件来查询数据。
-- -------------------- ---- ------- -------------- ------ - ----- ------ ---- -- - -- ------------- -- - ---------------------------- -- ---------------- -- ---------- -- --------------------- -- -------- ------- ----
在上面的代码中,我们使用 User.findAll() 方法来查询所有 name 为 'Tom' 和 age 为 18 的数据。查询结果是一个数组,我们可以使用 .map() 方法遍历数组并使用 .toJSON() 方法将每条数据转换成 JSON 格式并输出到控制台。
总结
在本文中,我们介绍了如何在 Sequelize 中添加联合主键。我们首先定义了一个 User 模型,并在模型中定义了 id、name 和 age 字段,并且使用唯一性约束来保证不会出现重复数据。接着,我们使用 Sequelize.sync() 方法同步模型和数据库,使用 User.create() 方法添加一条数据,使用 User.findAll() 方法查询数据。
对于关系型数据库的初学者来说,这些操作都是必须掌握的。掌握 Sequelize 中添加联合主键的方法,对于提高数据的存储和管理能力,以及提高开发效率都非常重要。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/644f84bd980a9b385b8f84c9