https://avatars.githubusercontent.com/u/6058558

程式狂想筆記

MySQL(MariaDB) insert有關做相同表會遇到問題小記

最近做 INSERT 很簡單語法
但竟然出錯
印象中 DB2 以前這樣下沒有這個問題
錯誤訊息如下:
Table 'test' is specified twice, both as a target for 'INSERT' and as a separate source for data
You can't specify target table 'basic_data' for update in FROM clause
ex:

1
2
INSERT INTO data_waktu_vaksinasi (id_binatang, id_vaksin, tanggal_vaksin, status_vaksin) VALUES
    (1, 1, (SELECT DATE_ADD(max(tanggal_vaksin), INTERVAL 1 YEAR)) FROM data_waktu_vaksinasi, 'belum')

有關程式 N+1 問題

最近在做複雜的 API
由於 PM 覺得某一個 JSON 屬性調整
結果需要改好幾隻程式 API
不過有查到可以使用GraphQL | 一种为你的 API 而生的查询语言
但這篇不是重點在 GraphQL
而是我探索某一篇 阻碍你使用 GraphQL 的十个问题 | 咀嚼之味

它就像是一顆無限向下延伸的樹。所以在我看來,GraphQL 更應該叫 TreeQL,當然在圖論裡,Tree 就是 Graph 也沒毛病啦。需要注意的是,這也會引出 「N + 1 problem」 的話題——naive 的 GraphQL 服務端實現會讓這段 query 變得異常慢!

看了一下內容,N+1 問題就有像一個查詢每一行執行 SQL
如下

1
2
3
4
5
SELECT * FROM `song` LIMIT 0, 20;
SELECT * FROM `singer` WHERE `id` = 1;
SELECT * FROM `singer` WHERE `id` = 2;
SELECT * FROM `singer` WHERE `id` = 3;
...

奇怪,這個怎麼讓我想到 ORM 也是這樣
所以我查了一下 ORM 真的也有這個問題
由於最近也想開使用 ORM ,所以進入前想了解之後使用上會遇到什麼問題
這邊只會先整理

SQL union 排序的問題

union 要做排序要放在最下面 select seq from ooo union select null as seq from xxx seq 全部都會變成 null 最近太忙了 先記錄到這邊 有空在研究 UNION 中 ORDER By 的使用 - 不要依赖这里 因为你有大脑 - ITeye 博客