[DB]SQLとType-ORM


これは自分がSQLを勉強していることをまとめたドキュメントです.
SQL(Structured Query Language)
データベースの作成および管理に使用される言語.ほとんどのDBMSは標準SQLを遵守しています.
SQLのタイプ
DDL (Data Definition Language)
データ定義語.データベースの言語を作成、変更、削除します.データのスケルトンを決定
種類
ロール#ロール#
CREATE
データベース(schema)またはテーブルを作成します.
create database {schemaName}
create table {tableName} (filed1 type1, ...[options(pk, fk etc.])
ALTER
Tableを修正します.
alter table {tableName}/[add, drop, modify column] {filedName}
DROP
データベース(schema)またはテーブルを削除します.
drop database {schemaName}
drop table {tableName}
TRUNCATE
テーブルを初期化します.
### DML (Data Manipulation Language)
データ操作語.データベース・テーブルでデータを問合せ、挿入、変更、削除する言語.
種類
ロール#ロール#
SELECT
テーブルでデータを問合せます.
select {Column} from {table} where {condition} [...options(group by 'group', having 'search condition', order by 'DESC or ASC']
INSERT
表にデータを挿入します.
insert into {Table} value (match table column data1, ...)
UPDATE
表のデータを変更します.
update {table} set {column} = 'value' where {condition}
DELETE
テーブルのデータを削除します.
delete {table} where {condition}
DCL (Data Control Language)
データ制御言語.データベースやライセンスオブジェクトへのアクセスなどの役割を果たす言語.
GRANT、REVOKE、COMMIT、ROLLBACKなどのコマンドがありますが、データベース管理者であるため、ここでは省略します.
結合#ケツゾク#
データベース内の複数のテーブルのデータを1つのコレクションにマージします.
内部結合
例:同じ条件のデータを2つのテーブルからのみ抽出し、1つのセットとして表示します.
select * from table1
inner join table2
on table1.condition = table2.condition;
! onセクションでは、whereセクションのすべての条件を使用できます.
left joinは、最初のテーブルに基づいて2番目のテーブルを組み合わせます.
つまり、データは最初のテーブルのローに基づいて生成されます.
right joinはreverse left joinであることがわかります.
索引
テーブルでデータをクエリーするには、順番にブラウズする必要があります.ただし、インデックスを使用すると、テーブル全体を読み込む必要がないため、非常に高速です.
欠点は、テーブルの記憶領域の10%を占めるため、必要に応じてのみ使用することが望ましい.
usage:
create [option(unique)] index {indexName}
on {tableName[option(order)]}
TypeOrm (Type Object-relation-mapping)
TypeOrmはオブジェクト向けプログラミングでクラスとリレーショナル・データベース・テーブル・パイプのモデルの不一致を解決した.
// typeorm.config.ts
import { TypeOrmModuleOptions } from '@nestjs/typeorm';

export const typeORMConfig: TypeOrmModuleOptions = {
  type: 'mysql', //Database 설정
  host: 'localhost',
  port: 3306,
  username: 'root',
  password: '1234',
  database: 'Ryan',
  entities: ['dist/**/*.entity.{ts,js}'], // Entity 연결
  synchronize: true, 
};

// post.model.ts
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class Post {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    title: string;

    @Column()
    text: string;

}
configがsynchronizeをtrueに設定すると、テーブルを変更するたびに削除して再作成されるため、本番モードでfalseに設定する必要があります.
本番モードでも手動でTableを作成することはできないので、migrationを使用してschemaを同期する必要があります.
リポジトリを作成した場合は、データベースに格納されているエンティティを次のようにインポートできます.
const repository = connection.getRepository(User);

const user = new User();
user.firstName = "Timber";
user.lastName = "Saw";
user.age = 25;
await repository.save(user); // 데이터 저장

const allUsers = await repository.find(); // 모든 데이터 가져오기
const firstUser = await repository.findOne(1); // find by id
const timber = await repository.findOne({ firstName: "Timber", lastName: "Saw" });

await repository.remove(timber); // 데이터 삭제
//typeorm migrationリンクが必要なときは中に入って設定しましょう!
https://github.com/typeorm/typeorm/blob/master/docs/migrations.md
また//migration setupの例もありますので、参考にしてください.
https://velog.io/@jodmsoluth/nestjs-typeorm-%EC%84%B8%ED%8C%85