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
おわり
コメント