Sequelizeのsyncメソッドとは?

Sequelizeのsyncメソッドは

Sequelize上で定義したテーブルを、実際のデータベース上に作成or上書きするメソッド

です。

 

例えば

const Student= sequelize.define('student', {
  name: { 
    type: Sequelize.STRING, 
    allowNull: false 
  },
  email: {
    type: Sequelize.STRING,
    allowNull: false
  }
});

みたいなテーブルをSequelize上で定義したとします。(内容はテキトーなので気にしないでください)

テーブルの作成

Student.sync();

と書くと

  • 実際のデータベース上にStudentテーブルが存在しない場合
    →新たに作成される
  • 実際のデータベース上にStudentテーブルがすでに存在する場合
    →上書きされずにスルーされる

という風な挙動になります。

テーブルの強制再作成

Student.sync({force:true});

と書くと

  • 実際のデータベース上にStudentテーブルが存在しない場合
    →新たに作成される
  • 実際のデータベース上にStudentテーブルがすでに存在する場合
    →すでにあるStudentテーブルが削除されて、新たに作成される

という挙動になります。

{force:true}は、「DROPしてCREATEする」みたいなクエリが発行されるオプションみたいです。

なのでこのオプションを付けると強制的にテーブルが削除されるので、テスト段階でのみ使うのが良いみたいです。

テーブルの変更

Student.sync({alter: true});

と書くと

  • 実際のデータベース上にStudentテーブルが存在しない場合
    →新たに作成される
  • 実際のデータベース上にStudentテーブルがすでに存在する場合
    →すでにあるStudentテーブルと違いがある場合は、追加や削除が行われる。違いがない場合は何も行われない

という挙動になります。

{alter: true}は、ALTERクエリ(テーブルを変更するためのクエリ)が発行されるオプションみたいです。

テーブルの変更(削除はしない)

Student.sync({alter: true,alter.drop:false});

と書くと

  • 実際のデータベース上にStudentテーブルが存在しない場合
    →新たに作成される
  • 実際のデータベース上にStudentテーブルがすでに存在する場合
    →すでにあるStudentテーブルと違いがある場合は、追加は行われるが削除は行われない。違いがない場合は何も行われない

という挙動になります。

{alter.drop:false}は、ALTERクエリ(テーブルを変更するためのクエリ)でDROPクエリが発行されなくなるオプションみたいです。

 

 

参考にしたページ

https://sequelize.org/master/class/lib/sequelize.js~Sequelize.html#instance-method-sync

https://qiita.com/clustfe/items/02f372b86f32c7aafe0c

 

おわり

Node.js
スポンサーリンク
この記事を書いた人
penpen

1991生まれ。WEBエンジニア。

技術スタック:TypeScript/Next.js/Express/Docker/AWS

フォローする
フォローする

コメント

タイトルとURLをコピーしました