MySQL


前回はexpressを使ったWebサーバについてまとめました.
しかし、Webサーバをリフレッシュすると、データは消えてしまいます.
今回は、Webではなくハードディスク、SSDなどの記憶媒体にデータを格納し、リフレッシュ時に使用できるようにしました.
MySQL
MySQLはリレーショナル・データベース管理システム(RDBMS)であり、データベースやリソースを管理するGUI管理ツールが内蔵されていない.そのため、ユーザーはコマンドラインインタフェースツールまたはMySQLフロントエンドデスクトップソフトウェアまたはWebアプリケーションを使用して、データベースの作成、管理、バックアップ、ステータスのチェック、データベース構造の作成、またはデータレコーダの作成を行う必要があります.
正式なMySQLフロントエンドツールMySQLワークベンチはOracleによって開発され、自由に使用できます.
これは、UIでデータを表示したり、変更や削除を容易に行うことができることを意味します.
使用できるツール.
[ウィキペディア]
インストールについては、グーグルで簡単に知ることができます.
MySQLを使うにはSQL言語が必要です.
ただし、単純な操作であれば、このSQL言語は使用されません.javascriptユーザは시퀄라이즈 ORMを使用する.
DBを構築しやすい.
後でこの知識でパッケージを構築し、リアクターで簡単な製品の組み合わせを構築する予定なので、시퀄라이즈 ORMでDBを構築する方法を整理します.
しかし、今回の時間はMySQLを整理するよりも品質を重視しています.
データベースの構築方法、expressの接続方法
CRUDを行うかどうかを重点的に整理します.
ORM
ORMとは?
オブジェクトリレーションシップマッピングの略は、オブジェクトリレーションシップマッピングです.データベースとオブジェクト向けプログラミング言語を互換性のないデータに変換するプログラミング方法.
sequelze(siqualize)を使用する場合は、JavaScript構文を使用してデータベースを操作できます.
sequelize
簡単に言えば、SQLタスクを簡単に完了させるためのツールです.
MySQLのほか、他のRDB(Maria、Postgre、SQLite、MSSQL)と互換性があります.
しかし、注目すべきは、このORMがSQLを完璧にすることは難しいことだ.プロジェクトの規模によっては、十分な品質があり、SQLで行う必要がある規模もあるそうです.
実際の開発者として働いているなら、SQLをもっと勉強したほうがいいです.
install
npm i sequelize
npm i sequlize-cli
npm i mysql2
MySQLをインストールしたのになぜMySQL 2をインストールするのですか?mysql2はノードです.jsとMySQLを接続するツール.
sequelize init
フロントエンドでもnpm initを行い,操作前に設定するようにsiqualizeを使用する前にinitを行う.
npx sequelize init
入力するとconfig、models、seeders、migrationsのフォルダが自動的に作成されます.
config/config.json
{
  "development": { // 개발 시
    "username": "root",
    "password": "password",
    "database": "nodebird",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "test": { // 테스트 시
    "username": "root",
    "password": null,
    "database": "database_test",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "production": { // 배포 시
    "username": "root",
    "password": null,
    "database": "database_production",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }
}
開発のためにdevelopmentの設定を行いました
簡単に行う.username-DBユーザー名password-DBユーザーパスワード(入力時に必要)database-データベース名
程度を設定しましょう次のappjsに実行コードを追加します.
app.js
sequelize.sync({ force: false })
    .then(() => {
        console.log('데이터베이스 연결 성공');
    })
    .catch((err) => {
        console.error(err);
    })
app.jsで上記のコードが見つかった場合はsequelzeを実行します.
実行してnodejsをMySQLに接続します.
また、生成されたモデルのデータを生成することもできます.
ここforce: falseは何ですか?force : trueモデルの変更時にテーブルが消去され、テーブルが再作成されます(データの削除)(Xを使用)force : falseモデルを変更した場合、テーブルに変更はありません.(開発用)alter : true安全ですが、既存のデータと一致しない場合もあります.(Xを使用)
つまり、上記のようにMySQLを完全に操作し、
不足点がある.作成したモデルを修正する場合、
ワークベンチでの修正、削除などの処理が必要です.
(この部分を容易にする方法がある場合は、いくつかのフィードバックを提供してください)
このタスクを実行する前にモデルを作成します.
models/user.js
モデルは、データをどのような構造で管理するかを示します.
これは確定的な過程です.
// 제작한 User라는 데이터를 MySQL과 연결하기 위함
const Sequelize = require('sequelize');

// 아래처럼 생성하고자 하는 데이터를 만들어준다.
module.exports = class User extends Sequelize.Model {
  static init(sequelize) {
    return super.init({
      email: { // 이메일
        type: Sequelize.STRING(40), // 40자 이내 글자
        allowNull: true, // 필수 아님,
        unique: true, // 고유의 값
      },
      nick: { // 닉네임
        type: Sequelize.STRING(15), // 15자 이내 글자
        allowNull: false,
      },
      password: { // 비밀번호
        type: Sequelize.STRING(100), // 100자 이내 글자
        allowNull: true,
      },
      provider: {
        type: Sequelize.STRING(10), // 10자 이내 글자
        allowNull: false,
        defaultValue: 'local',
      },
      snsId: { // sns 아이디
        type: Sequelize.STRING(30), // SNS ID 처럼 저장
        allowNull: true,
      },
    }, { /*시퀄라이즈 설정부분*/ });
  }
  /*시퀄라이즈 관계 설정*/
};
品質の設定
{
  sequelize,
  timestamps: true, // createAt, updateAt 자동 생성
  underscored: false, // sequelize에서 _ 사용할지 말지 ex) createAt -> create_at
  paranoid: true, // deleteAt을 생성 (삭제한 날짜)
  modelName: 'User', // modelName - javascript에서 쓰인다.
  tableName: 'users', // tableName - SQL에서 쓰이며, modelName의 소문자로 하고, 복수형으로 짓는다.
  charset: 'utf8', // 한글
  collate: 'utf8_general_ci',
}
品質関係の設定
static associate(db) {
  // 1:다 관계 : 하나의 유저는 여러 게시글을 쓸 수 있다.
  db.User.hasMany(db.Post);

  // 다:다 관계 : 하나의 유저는 여러 팔로우를 할 수 있지만, 같은 테이블 안에서는 다:다 관계유지
  db.User.belongsToMany(db.User, { 
    foreignKey: 'followingId',
    as: 'Followers', // 이름을 변경하고, getFollowers하면 쉽게 불러올 수 있다.
    through: 'Follow', // 다:다 관계에서는 중간 테이블이 생성되고, 그 테이블의 이름이다.
  });
  db.User.belongsToMany(db.User, { 
    foreignKey: 'followerId',
    as: 'Followings',
    through: 'Follow',
  })
}
上記のように、リレーショナル・データベースとデータの関係はどうですか?
設定は必要ですが、実際の個人組合作業では、この部分にかなりの時間を費やす可能性があります.😭
この部分の説明は、説明がはっきりしているブログを参照してください.
複雑すぎます.
数回に分けて展示されていて、多く見えますが、実際は60行のコードしかありません.
また、必要なpost、hashtagモデルを作成した場合は、
簡単なDBを構築できます.
全部できたら、
npx sequelize db:create
これで端末に書くと起動してMySQL DBを生成します.
市場照会
以上のようにしてDBを生成しました
では、生成、クエリーの方法を見てみましょう.
// 위에서 만든 User model을 불러온다.
const { User } = require('../models');
// 생성 시퀄라이즈 쿼리
User.create({
  name: 'chu',
  age: 30,
  married: false,
  comment: '자기소개'
});
上のクエリを次のようにSQL文に変換します.
INSERT INTO nodejs.users(name, age, married, comment) VALUES ('chu',30,0,'자기소개');
また、このSQL文はプロンプトの下で記述できるだけでなく、siqualizeで記述することもできます.VALUESのうち0はfalse、1はtrueを表す.
生成されたuserを見つけます!
// 시퀄라이즈 쿼리로 모두 찾아오기.
// findAll - [{}, {}, {}] 이렇게 찾아오게 된다.
User.findAll({});
さらにfindAll、findOneなどを加えて使用する場合は待機と書きます.
try {
  const me = await User.findAll({});
} catch(err) {
  consoel.error(err);
}
欲しいデータしか見つからない!
User.findAll({
  attributes: ['name', 'married'],
});
条件文でデータを取得!
const { OP } = require('sequelize');
const { User } = require('../models');
User.findAll({
  attributes: ['name', 'age'],
  where: {
    married: true, // 결혼 한 사람
    age: { [Op.gt]: 30}, // 30실 초과
  }
});
市場照会では、Promiseを使用することが条件です.
ここwhereは何ですか?これはシプレスの演算子機能です.
Op.gt === > or <
つまり、不等号を考えるのは簡単です.もちろん、この中にはいろいろな機能がありますが、他の機能を知りたければ、グーグルを試してみましょう.
もっと検索内容がありますが、しばらくお休みください!
次の授業ではもっと多くの内容を整理します.
また、上記の品質設定ではデータベースindexを生成することはできません.最後に,jsで作成したモデルと関係について議論する.
設定する
事前にプレゼンテーションを行わないのは、コードの正しい概念を特定するためです.
補足したいのですが.では、概念を探してみましょう.
修正します