- ๋ฐ์ดํฐ๋ฅผ ๐upadate ํ๊ณ ๐๏ธdeleteํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋ณด์~
-WHAT ISโ
upadate
๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์กด์ฌํ๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ๊ฒ์ ์๋ฏธํ๋ค
upadate
์ delete
์ ์ฐจ์ด๋ ๋ญ๊ฐ์์๊น์?
upadate
๋ ์์ !delete
๋ ์ญ์ ! ๋ฐ๋ผ์ ๋ฐ์ดํฐ๋ฅผdelete
ํ ์๋ก ๋ง๋ค๊ฒ ๋๋ค๋ฉด?
1> ๊ด๊ณ๋ fk๊ฐ ๊ผฌ์ธ๋ค.
2> ๋ก๊ทธ๋ก ๋จ์ ์ด๋ ฅ๊ด๋ฆฌ๊ฐ ์๋๋ค.
3> ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๊ณ ์๋ก ๋ง๋ค๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ง์ด ์ฐ๊ฒ ๋๋ค.
-HOW TO USEโโ
- ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธํ ๋
PUT ๋ฉ์๋
๋ฅผ ์ฌ์ฉํ๋ค.prisma.user.updat
์ธ์๋updateMany
,upsert
๋ฑ์ ๋ฉ์๋๊ฐ ์๋ค.<script> // Router.js router.put("/update/", usersController.updateUser); // Dao.js const updateUser = async (req, res) => { const { email, password, user_name } = req.body; const { id } = req.query; return await prisma.user.update({ where: { id: Number(id), }, data: { email: email, password: password, userName: user_name, }, }); }; </script>
- where์ ์ ๋ฐ์ดํธํ๊ณ ํ๋ ๋ฐ์ดํฐ์ ์กฐ๊ฑด์ ๋ฃ๋๋ค.
(id๊ฐ request์์ ๋ณด๋ด์ฃผ๋ id์ ๋์ผํ์ ๋ ์ ๋ฐ์ดํธ ํ๋ค๋ ์๋ฏธ)- data์ ์์ ํ column๋ช ์ ๊ฐ์ฒด ํํ๋ก ๋ฃ์ ๋ค ์๋ก์ด ๊ฐ์ ์์ ํ๋ค.
<script> const updateUser = async (req, res) => { const { email, password, user_name } = req.body; // req.params๋ก ํด๋น id์ฐพ์์ ์ ๋ฐ์ดํธ ํ ๋ const { id } = req.params; // req.query๋ก ํด๋น id์ฐพ์์ ์ ๋ฐ์ดํธ ํ ๋ //const { id } = req.query; return await prisma.$queryRaw` UPDATE users SET email=${email}, password=${password}, user_name=${user_name} WHERE id=${id}; ;`; }; </script>
- UPDATE, SET, WHERE ๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ค.
UPDATE (์ ๋ฐ์ดํธ ํ ํ ์ด๋ธ ์ด๋ฆ) SET (์ ๋ฐ์ดํธ ํ ์นผ๋ผ๊ณผ ๊ฐ) WHERE (์ ๋ฐ์ดํธํ ์กฐ๊ฑด)
๐ก์ฃผ์๐ก)- WHERE๋ฌธ ์ ๋ ฅํ์ง ์ํ๋ฉด ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ ๋ฐ์ดํธ ๋์๋ ์ ์ ํญ์์ฃผ์!
๐ก์ฃผ์2๐ก)
req.query๋ก ์ ๋ฐ์ดํธ ํ ๋
router.put("/update/", usersController.updateUser);
http://localhost:8000/users/update/?id=12
๋ค์ ์๋?id=12
๊ฐ req.query๋ฅผ ์ถ๋ ฅํ๋ฉด {id : 12}๊ฐ ๋์จ๋ค.
req.params๋ก ์ ๋ฐ์ดํธํ ๋
http://localhost:8000/users/update/11- req.params๋ ๋ผ์ฐํฐ์ ์ ๋ฌํ๋
"/update/:id
์ ์๋:id
๋ฅผ ์๋ฏธํ๋ค.
router.put("/update/:id", usersController.updateUser);
- delete๋ ํ๊ฐ ์ญ์ , deleteMany๋ ์ฌ๋ฌ๊ฐ ์ญ์ ํ๋ ๋ฉ์๋
<script> // Router.js // query๋ก ์กฐํํด์ ์ญ์ router.delete("/delete/",usersController.deleteUser); // Dao.js const deleteUser = async (req, res) => { const { id } = req.query; const { email, password } = req.body; const updateUser = await prisma.$queryRaw` UPDATE users SET email=${email}, password=${password} WHERE id=${id}; `; res.json(updateUser); }); </script>
<script> // Router.js // params๋ก ์กฐํํด์ ์ญ์ router.delete("/delete/:id",usersController.deleteUser); // Dao.js const deleteUser = async (req, res) => { const { id } = req.params; return await prisma.$queryRaw` DELETE FROM users WHERE id=${id} `; }; </script>
- ์ ์ ๊ฐ ํ์์ ํํดํ๋ฉด ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ฐ์ดํฐ ์ ๋ถ๋ฅผ ์ญ์ ํ๋ ๊ฒ์ cascade๋ผ๊ณ ํ๋ค.
- ๊ทธ๋ฌ๋ ํ์์ ํํดํด๋ ๊ตฌ๋งค์ด๋ ฅ์ ์ง์ฐ์ง ์๋๋ค๋ฉด cascade = true, false๋ก ํ ์ด๋ธ์ ๋ง๋ค์ด์ ์ค์ ํ ์๊ฐ ์๋ค.
ALTER TABLE users ADD is_deleted TINYINT
update users set is_delete=1 where id=6
๋ฅผ ํตํด์ null=> 1๋ก ๋ฐ๊ฟ์ค๋ค.
- ์ด์ฒ๋ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋จ์์ ์ ์ ๋ฅผ ์ญ์ ํ๋ค๋ ๊ฒ์ด ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ถ ์ญ์ ํ ๊ฑด์ง ์ญ์ ๋ ์ํ์์ ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด ์ํ๊ฐ 1์ธ ๊ฒ๋ค๋ง ๋ฐ๋ก ์ญ์ ํ๋ ๊ณผ์ ์ ๊ฑฐ์น ๊ฑด์ง ๋ฑ์ ๊ณผ์ ์ ์๋น์ค ์ฐจ์์์ ๋ฌ๋ผ์ง๋ค.
- ์ปฌ๋ผ์ด is_delete์ ๊ฐ์ธ 1์ธ ๋ก์ฐ๋ง ์ญ์ ํ๊ธฐ ์ํด์ delete_at์ ์ปฌ๋ผ์ผ๋ก ํจ๊ป ๋ง๋ค์ด ์ง์ ์ด๋ฃฌ๋ค.
๐กTIP)
soft delete
๋ก ์ฌ์ฉ์๋ค์ ํ ๋ฒ์ ์ญ์ ํ๋ ์๋น์ค๋ณด๋ค ์ํ๊ด๋ฆฌ๋ฅผ ํ๋ ์๋น์ค๋ก ๊ตฌํํด๋ณด๋ ์๋ํด๋ณด๊ธฐ- is_delete์ deleted_at ์นผ๋ผ ์ถ๊ฐํด์ ์ ์ฉํด๋ณด๊ธฐ
- Prisma foreighkey cascade ์ ์ธ
- CRUD๋ ๋ค ํ ์ค ์์์ผ ์ง์ง ๋ฒก์๋ ๊ฐ๋ฐ์!
- ๋ค๋ฆ์ CRUD UD ๊ตฌํ ์ค :{