Prismaの基本操作(MySQL CRUD処理)

#本記事の内容
TypeScriptやGo言語をサポートしているPrismaの説明です。MySQLのCRUD処理に関した記事となります。
※TBLの作成方法は[マイグレーション編](https://qiita.com/kouji0705/items/945baaeab0a476550c40)を参考にしてください。

#基本情報
<details><summary>更新対象TBL(マイグレーション編で作成済)</summary>
![スクリーンショット 2021-07-11 17.01.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/cc33ba59-3684-7f08-9001-6bf50443e481.png)
</details>

<details><summary>ディレクトリ構成</summary><div>

```
~/develop/study/starter $ tree -I node_modules
.
├── package-lock.json
├── package.json
├── prisma
│   ├── dev.db
│   └── schema.prisma
├── script.ts
└── tsconfig.json

1 directory, 6 files
```
</div></details>

##CREATE(INSERT文)
<details><summary>1レコード追加</summary><div>

```
【script.ts】
import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()

/** Userテーブルに1レコード追加 */
async function main() {
  /**　テーブル名はprisma.TBL名の箇所で指定。 */
  const allUsers = await prisma.user.create({
    data:{ 
      email:'user@mail.com',
      name:'user1'
    }
  })
  console.dir(allUsers, { depth: null })
}

main()
  .catch(e => {
    throw e
  })
  .finally(async () => {
    await prisma.$disconnect()
  })
```
【実行結果】
![スクリーンショット 2021-07-11 19.01.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/d35f981b-091c-7e15-8b87-81ddd840466e.png)
![スクリーンショット 2021-07-11 19.02.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/83a4cb43-03d8-5006-26c8-c121544c0b83.png)
</div></details>

<details><summary>複数レコード追加</summary><div>

```
【script.ts】
import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()

/** Userテーブルに複数レコード追加 */
async function main() {
  /**　テーブル名はprisma.TBL名の箇所で指定。 */
  const allUsers = await prisma.user.createMany({
    data:[
      { email:'user1@mail.com',name:'user1'},
      { email:'user2@mail.com',name:'user2'},
      { email:'user3@mail.com',name:'user3'},
    ]
  })
  console.dir(allUsers, { depth: null })
}

main()
  .catch(e => {
    throw e
  })
  .finally(async () => {
    await prisma.$disconnect()
  })
```
【実行結果】
![スクリーンショット 2021-07-11 19.09.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/e8976d4d-ddc7-9ef0-8348-a9d99a7d0057.png)
![スクリーンショット 2021-07-11 19.09.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/b46a296e-7f85-844d-8394-ca6767ecfeb4.png)
</div></details>

##Read(SELECT文)
<details><summary>1レコードのみ取得</summary><div>

```
【script.ts】
import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()

/** Userテーブルに1レコードのみ取得 */
async function main() {
  /**　テーブル名はprisma.TBL名の箇所で指定。 */
  const allUsers = await prisma.user.findUnique({
    where: {
      email: 'user1@mail.com',
    },
  })
  console.dir(allUsers, { depth: null })
}

main()
  .catch(e => {
    throw e
  })
  .finally(async () => {
    await prisma.$disconnect()
  })
```
【実行結果】
![スクリーンショット 2021-07-11 19.14.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/47a23c1c-09f3-891f-f05e-eb4e19cdc843.png)

</div></details>

<details><summary>複数レコード取得</summary><div>

```
【script.ts】
import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()

/** Userテーブルに複数レコード取得 */
async function main() {
  /**　テーブル名はprisma.TBL名の箇所で指定。 */
  const allUsers = await prisma.user.findMany({
  })
  console.dir(allUsers, { depth: null })
}

main()
  .catch(e => {
    throw e
  })
  .finally(async () => {
    await prisma.$disconnect()
  })
```
【実行結果】
![スクリーンショット 2021-07-11 19.18.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/71b0dfd1-0d13-9dc0-420b-ee8776180a3d.png)
</div></details>

<details><summary>複数条件でのレコード取得</summary><div>

```
【script.ts】
import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()

/** Userテーブルに複数レコード取得 */
async function main() {
  /**　テーブル名はprisma.TBL名の箇所で指定。 */
  const allUsers = await prisma.user.findMany({
    where: {
      AND: {
        email:'user1@mail.com',
        name:'user1'
      }
    }
  })
  console.dir(allUsers, { depth: null })
}

main()
  .catch(e => {
    throw e
  })
  .finally(async () => {
    await prisma.$disconnect()
  })
```
【実行結果】
![スクリーンショット 2021-07-11 19.24.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/1884503c-d74f-ed93-215d-a19eaf9a2c3e.png)

</div></details>

##UPDATE(UPDATE文)
<details><summary>1レコードのみ更新</summary><div>

```
import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()

/** Userテーブルに1レコードのみ更新 */
async function main() {
  /**　テーブル名はprisma.TBL名の箇所で指定。 */
  const allUsers = await prisma.user.update({
    /**更新レコードを指定 */
    where: {
      email:'user1@mail.com',
    },
    /**更新内容 */
    data:{
      name:'kouji',
    },
  })
  console.dir(allUsers, { depth: null })
}

main()
  .catch(e => {
    throw e
  })
  .finally(async () => {
    await prisma.$disconnect()
  })
```
【実行結果】
![スクリーンショット 2021-07-11 19.31.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/100bc266-5aa5-dfa2-b996-34420ca4ee5d.png)
![スクリーンショット 2021-07-11 19.32.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/b7cffc2d-a9ad-e161-4cf5-4884eafc73dd.png)
</div></details>

<details><summary>複数レコード更新</summary><div>

```
import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()

/** Userテーブルに複数レコード更新 */
async function main() {
  /**　テーブル名はprisma.TBL名の箇所で指定。 */
  const allUsers = await prisma.user.updateMany({
    /**更新内容 */
    data:{
      name:'kkfactory',
    },
  })
  console.dir(allUsers, { depth: null })
}

main()
  .catch(e => {
    throw e
  })
  .finally(async () => {
    await prisma.$disconnect()
  })
```
【実行結果】
![スクリーンショット 2021-07-11 19.33.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/ae1022f7-c49f-24c2-26c1-c6665847bbc9.png)
![スクリーンショット 2021-07-11 19.34.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/c2bcff5c-ed2c-78d6-017b-0385a840fd5c.png)
</div></details>

##DELTE(DELTE文)
<details><summary>1レコードのみ削除</summary><div>

```
import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()

/** Userテーブルに複数レコード取得 */
async function main() {
  /**　テーブル名はprisma.TBL名の箇所で指定。 */
  const allUsers = await prisma.user.delete({
    where:{
      email:'user1@mail.com'
    }
  })
  console.dir(allUsers, { depth: null })
}

main()
  .catch(e => {
    throw e
  })
  .finally(async () => {
    await prisma.$disconnect()
  })
```
【実行結果】
![スクリーンショット 2021-07-11 19.37.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/28e3f9fe-35d0-0694-d9e7-4c7d13cb701b.png)
![スクリーンショット 2021-07-11 19.37.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/68f57e7b-4595-db7f-e944-8e34feaeb7fe.png)
</div></details>

<details><summary>複数レコード削除</summary><div>

```
import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()

/** Userテーブルに複数レコード取得 */
async function main() {
  /**　テーブル名はprisma.TBL名の箇所で指定。 */
  const allUsers = await prisma.user.deleteMany({
  })
  console.dir(allUsers, { depth: null })
}

main()
  .catch(e => {
    throw e
  })
  .finally(async () => {
    await prisma.$disconnect()
  })
```
【実行結果】
![スクリーンショット 2021-07-11 19.39.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/aaa0a960-8db6-7aa1-a4eb-699695c198ce.png)
![スクリーンショット 2021-07-11 19.39.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/6de68a6b-bee4-3a98-44b8-9b0386b599e3.png)
</div></details>