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