- 1 1. ã¯ããã«
- 2 2. ON DUPLICATE KEY UPDATEãšã¯
- 3 3. åºæ¬çãªäœ¿çšäŸ
- 4 4. å¿çšçãªäœ¿çšæ³
- 5 5. 泚æç¹ãšãã¹ããã©ã¯ãã£ã¹
- 6 6. ä»ã®ããŒã¿ããŒã¹ã«ãããé¡äŒŒæ©èœ
- 7 7. ãŸãšã
- 8 8. FAQ
- 8.1 Q1: ON DUPLICATE KEY UPDATEã¯ã©ã®ããŒãžã§ã³ã®MySQLã§äœ¿çšã§ããŸããïŒ
- 8.2 Q2: äž»ããŒãååšããªãå Žåã§ãON DUPLICATE KEY UPDATEã¯åäœããŸããïŒ
- 8.3 Q3: ON DUPLICATE KEY UPDATEãšREPLACEæã®éãã¯äœã§ããïŒ
- 8.4 Q4: ON DUPLICATE KEY UPDATEã䜿ã£ãã¯ãšãªã®ããã©ãŒãã³ã¹ãæé©åããæ¹æ³ã¯ïŒ
- 8.5 Q5: éè€ããŒã¿ã®æ€åºæ¡ä»¶ã倿Žããããšã¯å¯èœã§ããïŒ
- 8.6 Q6: ãDuplicate entryããšã©ãŒãçºçããåå ãšå¯ŸåŠæ³ã¯ïŒ
- 8.7 Q7: ããªã¬ãŒã¯ON DUPLICATE KEY UPDATEã«åœ±é¿ãäžããŸããïŒ
- 8.8 Q8: ä»ã®ããŒã¿ããŒã¹ã§åãã¯ãšãªã䜿çšã§ããŸããïŒ
- 8.9 å°ãŸãšã
1. ã¯ããã«
ããŒã¿ããŒã¹ãæ±ãéãããçŽé¢ãã課é¡ã®äžã€ããããŒã¿ã®éè€åŠçãã§ããããšãã°ã顧客æ å ±ã管çããã·ã¹ãã ã§ã¯ãæ°ãã顧客ãç»é²ããéã«æ¢åã®ããŒã¿ãšéè€ãããã©ããã確èªãããã®å Žåã¯ããŒã¿ãæŽæ°ããå¿ èŠããããŸãããããæåã§ç®¡çãããšããšã©ãŒãçºçããããåŠçãé å»¶ãããããå¯èœæ§ããããŸãã
ããã§æŽ»èºããã®ããMySQLã®ãON DUPLICATE KEY UPDATEãæ§æã§ãããã®æ©èœã䜿ãã°ãéè€ããŒã¿ãçºçããå Žåã§ããèªåçã«é©åãªåŠçãè¡ãããšãã§ããŸããçµæãšããŠãå¹ççãªããŒã¿ç®¡çãå¯èœã«ãªããéçºè ã®è² æ ã軜æžãããŸãã
ãã®èšäºã§ã¯ãON DUPLICATE KEY UPDATEã®åºæ¬çãªæ§æã䜿çšäŸããå¿çšçãªæŽ»çšæ¹æ³ãããã«ã¯æ³šæãã¹ããã€ã³ããŸã§ã詳ãã解説ããŸããããã«ãããåå¿è ããäžçŽè ã®éçºè ãŸã§ãå®éã®ãããžã§ã¯ãã§ãã®æ©èœã䜿ãããªããããã«ãªããŸãã
2. ON DUPLICATE KEY UPDATEãšã¯
MySQLã«ããããON DUPLICATE KEY UPDATEãã¯ãINSERTæãå®è¡ããéã«äž»ããŒããŠããŒã¯ããŒã®å¶çŽã«éåããããŒã¿ãååšããå Žåããã®ããŒã¿ãèªåçã«æŽæ°ããããã®äŸ¿å©ãªæ§æã§ããããã«ãããããŒã¿ã®è¿œå ãšæŽæ°ãäžã€ã®ã¯ãšãªã§å¹ççã«åŠçããããšãã§ããŸãã
åºæ¬çãªæŠå¿µ
éåžžãINSERTæã䜿ã£ãŠããŒã¿ãæ¿å ¥ããå Žåãäž»ããŒããŠããŒã¯ããŒãéè€ããŠãããšãšã©ãŒãçºçããŸããããããON DUPLICATE KEY UPDATEã䜿çšããã°ã以äžã®åŠçãå¯èœã«ãªããŸãã
- æ¿å ¥ããããšããŠããããŒã¿ãæ°èŠã®å Žåã¯ãéåžžéãINSERTãå®è¡ãããã
- æ¿å ¥ããããšããŠããããŒã¿ãæ¢åã®ããŒã¿ãšéè€ããŠããå Žåã¯ãæå®ãããã«ã©ã ã®å€ãUPDATEãããã
ããã«ããããšã©ãŒãåé¿ããªããå¹ççãªããŒã¿æäœãå¯èœã§ãã
åºæ¬æ§æ
以äžãON DUPLICATE KEY UPDATEã®åºæ¬æ§æã§ãïŒ
INSERT INTO table_name (column1, column2, column3)
VALUES (value1, value2, value3)
ON DUPLICATE KEY UPDATE column1 = value1, column2 = value2;
table_name
: æäœå¯Ÿè±¡ã®ããŒãã«åãcolumn1, column2, column3
: ããŒã¿ãæ¿å ¥ããã«ã©ã åãvalue1, value2, value3
: æ¿å ¥ããå€ãON DUPLICATE KEY UPDATE
: éè€æã«å®è¡ãããæŽæ°åŠçã®æå®ã
åäœæ¡ä»¶
ãã®æ§æãåäœããããã«ã¯ãããŒãã«ã«å°ãªããšã以äžã®ããããã®å¶çŽãèšå®ãããŠããå¿ èŠããããŸãã
- äž»ã㌠(PRIMARY KEY): äžæã®å€ãæã€ã«ã©ã ã
- ãŠããŒã¯ã㌠(UNIQUE KEY): éè€ãèš±ããªãã«ã©ã ã
ãããã®å¶çŽãååšããªãå ŽåãON DUPLICATE KEY UPDATEã¯åäœããŸããã
䜿çšäŸ
ç°¡åãªäŸãšããŠããŠãŒã¶ãŒæ å ±ã管çããããŒãã«ã«ããŒã¿ãæ¿å ¥ã»æŽæ°ããå ŽåãèããŸãã
ããŒãã«å®çŸ©
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100) UNIQUE
);
INSERTæã®äœ¿çš
以äžã®ã¯ãšãªã¯ããŠãŒã¶ãŒIDãŸãã¯ã¡ãŒã«ã¢ãã¬ã¹ãæ¢ã«ååšããå Žåã«å¯Ÿå¿ããŸãã
INSERT INTO users (id, name, email)
VALUES (1, 'Taro', 'taro@example.com')
ON DUPLICATE KEY UPDATE name = 'Taro', email = 'taro@example.com';
- IDã1ã®ãŠãŒã¶ãŒãæ¢ã«ååšããå Žåã
name
ãšemail
ã®å€ãæŽæ°ãããŸãã - ååšããªãå Žåã¯æ°ããããŒã¿ãæ¿å ¥ãããŸãã
3. åºæ¬çãªäœ¿çšäŸ
ããã§ã¯ããON DUPLICATE KEY UPDATEãã®åºæ¬çãªäœ¿çšäŸã玹ä»ããŸããäž»ã«åäžã¬ã³ãŒãã®åŠçãšè€æ°ã¬ã³ãŒãã®åŠçã«åããŠèª¬æããŸãã
åäžã¬ã³ãŒãã®åŠç
åäžã®ã¬ã³ãŒããæ¿å ¥ããéãéè€ããŒã¿ãååšããã°æŽæ°ããäŸãèŠãŠã¿ãŸãããã
ããŒãã«å®çŸ©
CREATE TABLE products (
id INT PRIMARY KEY,
name VARCHAR(50),
stock INT
);
åºæ¬çãªINSERTæ
次ã®ã¯ãšãªã§ã¯ã補åIDã1ã®ããŒã¿ãæ¿å ¥ããŸããããæ¢åã®ããŒã¿ãããã°ãåšåº«æ°ïŒstockïŒãæŽæ°ããŸãã
INSERT INTO products (id, name, stock)
VALUES (1, 'Product A', 100)
ON DUPLICATE KEY UPDATE stock = 100;
åäœã®è§£èª¬
- 補åIDã1ã®ããŒã¿ãååšããªãå Žåãæ°ããã¬ã³ãŒããæ¿å ¥ãããŸãã
- 補åIDã1ã®ããŒã¿ãæ¢ã«ååšããå Žåã
stock
ã«ã©ã ã®å€ã100
ã«æŽæ°ãããŸãã
è€æ°ã¬ã³ãŒãã®åŠç
次ã«ãè€æ°ã®ã¬ã³ãŒããäžæ¬ã§åŠçããäŸã玹ä»ããŸãã
è€æ°ã®å€ãäžæ¬æ¿å ¥
以äžã®ã¯ãšãªã§ã¯ãè€æ°ã®è£œåããŒã¿ãäžæ¬ã§æ¿å ¥ããŸãã
INSERT INTO products (id, name, stock)
VALUES
(1, 'Product A', 100),
(2, 'Product B', 200),
(3, 'Product C', 300)
ON DUPLICATE KEY UPDATE stock = VALUES(stock);
åäœã®è§£èª¬
VALUES(stock)
ã¯ãåã¬ã³ãŒãã®æ¿å ¥å€ïŒããã§ã¯100
,200
,300
ïŒãæããŸãã- 補åIDãæ¢ã«ååšããå Žåããã®è£œåã®åšåº«æ°ãæ¿å ¥å€ã«åºã¥ããŠæŽæ°ãããŸãã
- ååšããªã補åã¯æ°ããã¬ã³ãŒããšããŠæ¿å ¥ãããŸãã
å¿çš: åçãªå€ã®æŽæ°
æ¢åã®ããŒã¿ã«åºã¥ããŠå€ãåçã«æŽæ°ããããšãå¯èœã§ãã以äžã¯ãæ¢åã®åšåº«æ°ã«è¿œå ããäŸã§ãã
INSERT INTO products (id, name, stock)
VALUES (1, 'Product A', 50)
ON DUPLICATE KEY UPDATE stock = stock + VALUES(stock);
åäœã®è§£èª¬
- 補åIDã1ã®ããŒã¿ãæ¢ã«ååšããå Žåãæ¢åã®
stock
å€ã«50
ãå ããå€ã§æŽæ°ãããŸãã - ååšããªãå Žåã¯æ°ããã¬ã³ãŒããæ¿å
¥ããã
stock
ã¯50
ã«èšå®ãããŸãã
å°ãŸãšã
- åäžã¬ã³ãŒãã ãã§ãªããè€æ°ã¬ã³ãŒãã®äžæ¬åŠçãå¹ççã«è¡ããã
VALUES()
ãæŽ»çšããããšã§ãæ¿å ¥ããŒã¿ãå©çšããŠæè»ãªæŽæ°ãå¯èœã
4. å¿çšçãªäœ¿çšæ³
ãON DUPLICATE KEY UPDATEãã䜿ãããšã§ãåºæ¬çãªæ¿å ¥ã»æŽæ°åŠçã«ãšã©ãŸãããæè»ãªããŒã¿æäœãå¯èœã§ãããã®ã»ã¯ã·ã§ã³ã§ã¯ãæ¡ä»¶ä»ãæŽæ°ããã©ã³ã¶ã¯ã·ã§ã³ãšã®çµã¿åãããªã©ãå¿çšçãªäœ¿çšæ³ã«ã€ããŠè§£èª¬ããŸãã
æ¡ä»¶ä»ãæŽæ°
ON DUPLICATE KEY UPDATEã§ã¯ãCASE
æãIF
æã䜿ã£ãŠæ¡ä»¶ä»ãã§ã«ã©ã ãæŽæ°ã§ããŸããããã«ãããç¶æ³ã«å¿ããæè»ãªæŽæ°åŠçãå¯èœã§ãã
䜿çšäŸ: æ¡ä»¶ã«å¿ããåšåº«æ°ã®å€æŽ
以äžã¯ãåšåº«ãäžå®æ°ä»¥äžã®å Žåã«ã®ã¿æŽæ°ããäŸã§ãã
INSERT INTO products (id, name, stock)
VALUES (1, 'Product A', 100)
ON DUPLICATE KEY UPDATE stock = CASE
WHEN stock < 50 THEN VALUES(stock)
ELSE stock
END;
åäœã®è§£èª¬
- 補åIDã1ã®ããŒã¿ãååšããåšåº«æ°ã50æªæºã®å Žåã®ã¿ãæ°ããå€ïŒããã§ã¯
100
ïŒã§æŽæ°ãããŸãã - åšåº«æ°ã50以äžã®å Žåã¯æŽæ°ããããæ¢åã®å€ããã®ãŸãŸä¿æãããŸãã
åçãªæŽæ°ã®æŽ»çš
åçãªèšç®ãè¡ããæŽæ°ããŒã¿ã«åºã¥ããæäœãå¯èœã§ãã
䜿çšäŸ: 环ç©ããŒã¿ã®æŽæ°
以äžã¯ãæ¢åã®åšåº«æ°ã«æ°ããå€ã远å ããäŸã§ãã
INSERT INTO products (id, name, stock)
VALUES (2, 'Product B', 50)
ON DUPLICATE KEY UPDATE stock = stock + VALUES(stock);
åäœã®è§£èª¬
- 補åIDã2ã®ããŒã¿ãæ¢ã«ååšããå Žåãæ¢åã®
stock
å€ã«50
ãå ç®ãããŸãã - ããŒã¿ãååšããªãå Žåã¯æ°ããã¬ã³ãŒããæ¿å ¥ãããŸãã
ãã©ã³ã¶ã¯ã·ã§ã³ãšã®çµã¿åãã
è€æ°ã®INSERTæãä»ã®ããŒã¿æäœããã©ã³ã¶ã¯ã·ã§ã³ã§ãŸãšããŠå®è¡ããããšã§ãããŒã¿ã®äžè²«æ§ãä¿ã¡ãªããè€éãªæäœãè¡ããŸãã
䜿çšäŸ: ãã©ã³ã¶ã¯ã·ã§ã³ãå©çšããäžæ¬åŠç
以äžã¯ãè€æ°ã®ã¬ã³ãŒããäžæ¬ã§åŠçãããšã©ãŒçºçæã«ã¯ããŒã«ããã¯ããäŸã§ãã
START TRANSACTION;
INSERT INTO products (id, name, stock)
VALUES
(1, 'Product A', 100),
(2, 'Product B', 200)
ON DUPLICATE KEY UPDATE stock = VALUES(stock);
INSERT INTO products (id, name, stock)
VALUES
(3, 'Product C', 300)
ON DUPLICATE KEY UPDATE stock = stock + VALUES(stock);
COMMIT;
åäœã®è§£èª¬
START TRANSACTION
ãšCOMMIT
ã®éã«è€æ°ã®ã¯ãšãªãå®è¡ããŠããŸãã- ã©ããã®ã¯ãšãªã§ãšã©ãŒãçºçããå Žåã¯ãããŒã«ããã¯ãããããŒã¿ããŒã¹ã«å€æŽãé©çšãããŸããã
å¿çšäŸã®å®åçãªã·ããªãª
ã·ããªãª1: ECãµã€ãã®åšåº«ç®¡ç
ECãµã€ãã§ååã®è³Œå ¥æãè³Œå ¥ãããååã®åšåº«æ°ãæžå°ãããã±ãŒã¹ã
INSERT INTO products (id, name, stock)
VALUES (4, 'Product D', 100)
ON DUPLICATE KEY UPDATE stock = stock - 1;
ã·ããªãª2: ãŠãŒã¶ãŒã®ãã€ã³ãã·ã¹ãã
æ¢åãŠãŒã¶ãŒã®ãã€ã³ããå ç®ããå Žåã
INSERT INTO users (id, name, points)
VALUES (1, 'Taro', 50)
ON DUPLICATE KEY UPDATE points = points + VALUES(points);
å°ãŸãšã
CASE
æãåçãªæŽæ°ã掻çšããããšã§ãè€éãªæ¡ä»¶ä»ãåŠçãå¯èœã- ãã©ã³ã¶ã¯ã·ã§ã³ãçµã¿åãããã°ãããŒã¿ã®äžè²«æ§ãä¿ã¡ãªããå®å šã«æäœã§ããã
- å®åçãªã·ããªãªã«å¿çšããã°ãå¹ççãªããŒã¿ç®¡çãå®çŸå¯èœã

5. 泚æç¹ãšãã¹ããã©ã¯ãã£ã¹
ãON DUPLICATE KEY UPDATEããæŽ»çšããéã«ã¯ãæ£ãã䜿ããªããšäºæããªãåäœãããã©ãŒãã³ã¹ã®äœäžãæãããšããããŸãããã®ã»ã¯ã·ã§ã³ã§ã¯ã泚æãã¹ããã€ã³ããšã广çã«å©çšããããã®ãã¹ããã©ã¯ãã£ã¹ã玹ä»ããŸãã
äž»ãªæ³šæç¹
1. AUTO_INCREMENTãšã®é¢ä¿
- åé¡ç¹
ããŒãã«ã®äž»ããŒãAUTO_INCREMENT
ã®å ŽåãON DUPLICATE KEY UPDATEã䜿ããšãéè€ãçºçããªããŠãAUTO_INCREMENT
ã®å€ãå¢å ããŸãã
ããã¯ãMySQLãINSERTã®è©Šè¡æç¹ã§æ°ããIDãäºçŽããããã§ãã - 解決ç
INSERTã倱æããå Žåã§ãIDãç¡é§ã«å¢å ããªãããã«ããŠããŒã¯ããŒã掻çšããå¿ èŠã§ããã°LAST_INSERT_ID()
ãçšããŠææ°ã®IDãååŸããŸãã
INSERT INTO products (id, name, stock)
VALUES (NULL, 'Product E', 50)
ON DUPLICATE KEY UPDATE stock = stock + VALUES(stock);
2. ãããããã¯ã®ãªã¹ã¯
- åé¡ç¹
è€æ°ã®ã¹ã¬ãããåæã«åãããŒãã«ã§ON DUPLICATE KEY UPDATEãå®è¡ãããšããããããã¯ãçºçããå¯èœæ§ããããŸãã - 解決ç
- ã¯ãšãªã®å®è¡é åºãçµ±äžããã
- å¿ èŠã«å¿ããŠããŒãã«ããã¯ãå©çšããïŒãã ãããã©ãŒãã³ã¹ãžã®åœ±é¿ã«æ³šæïŒã
- ãããããã¯çºçæã®ãªãã©ã€åŠçãå®è£ ããã
3. ã€ã³ããã¯ã¹ã®é©åãªèšèš
- åé¡ç¹
ãŠããŒã¯ããŒãŸãã¯äž»ããŒããªãå ŽåãON DUPLICATE KEY UPDATEã¯åäœããŸããããŸããé©åã«ã€ã³ããã¯ã¹ãèšå®ãããŠããªããšãããã©ãŒãã³ã¹ãå€§å¹ ã«äœäžããããšããããŸãã - 解決ç
ããŒãã«ã«å¿ ãäž»ããŒãŸãã¯ãŠããŒã¯ããŒãèšå®ããé »ç¹ã«æ€çŽ¢ãæŽæ°ãããã«ã©ã ã«é©åãªã€ã³ããã¯ã¹ãèšããŸãã
ãã¹ããã©ã¯ãã£ã¹
1. äºåã«ããŒã¿ã確èªãã
- INSERTåã«
SELECT
æã䜿çšããŠãããŒã¿ãååšããã確èªããããšã§ãæå³ããªãæŽæ°ãé²ããŸãã
SELECT id FROM products WHERE id = 1;
2. ãã©ã³ã¶ã¯ã·ã§ã³ã掻çšãã
- ãã©ã³ã¶ã¯ã·ã§ã³ã䜿çšããŠãè€æ°ã®INSERTæãUPDATEæããŸãšããŠå®è¡ããŸããããã«ãããäžè²«æ§ãä¿ã¡ãªããå®å šã«ããŒã¿ãæäœã§ããŸãã
START TRANSACTION;
INSERT INTO products (id, name, stock)
VALUES (1, 'Product A', 100)
ON DUPLICATE KEY UPDATE stock = stock + 50;
COMMIT;
3. æŽæ°å¯Ÿè±¡ã«ã©ã ãæå°åãã
- æŽæ°å¯Ÿè±¡ã®ã«ã©ã ãéå®ããããšã§ãããã©ãŒãã³ã¹ã®åäžãšäžå¿ èŠãªããŒã¿å€æŽãé²ããŸãã
INSERT INTO products (id, name, stock)
VALUES (1, 'Product A', 100)
ON DUPLICATE KEY UPDATE stock = VALUES(stock);
4. ãšã©ãŒãã³ããªã³ã°ãå®è£ ãã
- ãããããã¯ãINSERT倱æã«åããŠãšã©ãŒãã³ããªã³ã°ãè¡ããé©åã«ãªãã©ã€ãããŒã«ããã¯ãå®è£ ããŸãã
å°ãŸãšã
- 泚æç¹: AUTO_INCREMENTã®å¢å ããããããã¯ãã€ã³ããã¯ã¹ã®èšèšäžåã«æ³šæãå¿ èŠã§ãã
- ãã¹ããã©ã¯ãã£ã¹: ãã©ã³ã¶ã¯ã·ã§ã³ããšã©ãŒãã³ããªã³ã°ã掻çšããå®å šãã€å¹ççã«åŠçãå®è¡ããŸãããã
6. ä»ã®ããŒã¿ããŒã¹ã«ãããé¡äŒŒæ©èœ
MySQLã®ãON DUPLICATE KEY UPDATEãã¯ãå¹ççãªããŒã¿åŠçãå¯èœãªåŒ·åãªæ©èœã§ãããã ãããã®æ©èœã¯MySQLç¹æã®ãã®ã§ããä»ã®ããŒã¿ããŒã¹ã·ã¹ãã ã«ã¯é¡äŒŒããæ©èœããããããããç°ãªãç¹æ§ãæã£ãŠããŸãããã®ã»ã¯ã·ã§ã³ã§ã¯ãPostgreSQLãšSQLiteã®é¡äŒŒæ©èœãæ¯èŒããªãã解説ããŸãã
PostgreSQL: ON CONFLICT DO UPDATE
PostgreSQLã§ã¯ããON CONFLICT DO UPDATEããšããæ§æããMySQLã®ãON DUPLICATE KEY UPDATEãã«çžåœããŸãããã®æ§æã¯ãããŒã¿ã®éè€ãçºçããå Žåã«ç¹å®ã®åŠçãå®è¡ã§ããæè»ãªä»çµã¿ãæäŸããŸãã
åºæ¬æ§æ
INSERT INTO table_name (column1, column2)
VALUES (value1, value2)
ON CONFLICT (column1) DO UPDATE
SET column2 = value2;
ON CONFLICT (column1)
: éè€ã®çºçæ¡ä»¶ãæå®ããŸãïŒãŠããŒã¯ããŒãäž»ããŒãªã©ïŒãDO UPDATE
: éè€æã«å®è¡ããæŽæ°åŠçãæå®ããŸãã
䜿çšäŸ
補åããŒãã«ã§ã補åIDãéè€ããå Žåã«åšåº«æ°ãæŽæ°ããäŸã§ãã
INSERT INTO products (id, name, stock)
VALUES (1, 'Product A', 100)
ON CONFLICT (id) DO UPDATE
SET stock = EXCLUDED.stock;
EXCLUDED.stock
: æ¿å ¥ããããšããå€ãæããŸãã
ç¹åŸŽ
- MySQLãšã®éã
PostgreSQLã§ã¯ãéè€æ¡ä»¶ãæç¢ºã«æå®ã§ãããããè€æ°ã®ãŠããŒã¯ããŒãæã€ããŒãã«ã§ãæè»ã«å¯Ÿå¿ã§ããŸãã - ã¡ãªãã
é«åºŠãªæ¡ä»¶ä»ãããžãã¯ã远å å¯èœã§ãç¹å®ã®ã«ã©ã ã ããæŽæ°ãããªã©ã®çްããå¶åŸ¡ãã§ããŸãã
SQLite: INSERT OR REPLACE / INSERT OR IGNORE
SQLiteã«ã¯ãINSERT OR REPLACEãããINSERT OR IGNOREããšããæ©èœããããŸããããããã¯MySQLãPostgreSQLã®æ§æãšã¯è¥å¹²ç°ãªããŸãã
INSERT OR REPLACE
ãINSERT OR REPLACEãã¯ãéè€ããŒã¿ãååšããå Žåã«ãæ¢åã®è¡ãåé€ããŠæ°ããè¡ãæ¿å ¥ããŸãã
åºæ¬æ§æ
INSERT OR REPLACE INTO table_name (column1, column2)
VALUES (value1, value2);
䜿çšäŸ
以äžã¯ã補åIDãéè€ããå Žåã«æ¢åããŒã¿ãåé€ããŠæ°ããããŒã¿ãæ¿å ¥ããäŸã§ãã
INSERT OR REPLACE INTO products (id, name, stock)
VALUES (1, 'Product A', 100);
ç¹åŸŽ
- åäœã®éã
MySQLãPostgreSQLã®ããã«æ¢åããŒã¿ãæŽæ°ããã®ã§ã¯ãªããæ¢åããŒã¿ãåé€ããŠããæ°ããããŒã¿ãæ¿å ¥ããŸãã - 泚æç¹
åé€ããªã¬ãŒãçºç«ãããããããªã¬ãŒãå®çŸ©ãããŠããå Žåã¯æ³šæãå¿ èŠã§ãã
INSERT OR IGNORE
ãINSERT OR IGNOREãã¯ãéè€ããŒã¿ãååšããå Žåã«ãšã©ãŒãç¡èŠããäœãããªãåäœãããŸãã
æ¯èŒè¡š
ããŒã¿ããŒã¹ | æ§æ | ç¹åŸŽ |
---|---|---|
MySQL | ON DUPLICATE KEY UPDATE | éè€æã«ç¹å®ã®ã«ã©ã ãæŽæ°ãããç°¡æœã§å¹ççã |
PostgreSQL | ON CONFLICT DO UPDATE | é«åºŠãªæ¡ä»¶ä»ãããžãã¯ã«å¯Ÿå¿ãæè»æ§ãé«ãã |
SQLite | INSERT OR REPLACE / IGNORE | REPLACEã¯åé€åŸã«æ¿å ¥ãããIGNOREã¯ãšã©ãŒãç¡èŠã |
å°ãŸãšã
- MySQLã®ãON DUPLICATE KEY UPDATEãã¯ãç°¡æœã§å¹ççã«ããŒã¿ã®æ¿å ¥ãšæŽæ°ãè¡ããç¹ãç¹åŸŽã§ãã
- PostgreSQLã®ãON CONFLICT DO UPDATEãã¯ãæè»æ§ãšé«åºŠãªå¶åŸ¡ãå¯èœã§ãè€éãªæ¡ä»¶ã«å¯Ÿå¿ã§ããŸãã
- SQLiteã®ãINSERT OR REPLACEãã¯ãæ¢åããŒã¿ãåé€ããŠæ°ããããŒã¿ãæ¿å ¥ãã仿§ã§ãããªã¬ãŒã®çºç«ã«æ³šæãå¿ èŠã§ãã
7. ãŸãšã
ãã®èšäºã§ã¯ãMySQLã®ãON DUPLICATE KEY UPDATEãã«ã€ããŠåºæ¬çãªæ§æããå¿çšäŸã泚æç¹ãä»ã®ããŒã¿ããŒã¹ãšã®æ¯èŒãŸã§å¹ åºã解説ããŸããããã®æ©èœãæ£ããçè§£ã䜿ãããªãããšã§ãããŒã¿ããŒã¹æäœãããå¹ççã«ãªããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãšä¿¡é Œæ§ãåäžãããããšãã§ããŸãã
ON DUPLICATE KEY UPDATEã®å©ç¹
- å¹ççãªããŒã¿ç®¡ç
- æ¿å ¥ãšæŽæ°ã1ã€ã®ã¯ãšãªã§å®è¡ã§ããåŠçãç°¡æœã§é«éã«ãªããŸãã
- éè€ããŒã¿åŠçã®ç°¡çŽ å
- éè€ããŒã¿ã«å¯Ÿããæç¢ºãªæåãå®çŸ©ã§ãããšã©ãŒãåé¿ãããããªããŸãã
- å¿çšåã®é«ã
- åçãªæŽæ°ãæ¡ä»¶ä»ãããžãã¯ãªã©ãæè»ãªåŠçãå®çŸããŸãã
广çãªäœ¿çšã·ããªãª
- åšåº«ç®¡çã·ã¹ãã
- ååã®åšåº«æ°ãåçã«æŽæ°ããã
- ãŠãŒã¶ãŒç®¡çã·ã¹ãã
- ãŠãŒã¶ãŒæ å ±ã远å ãŸãã¯æŽæ°ããã
- ãã€ã³ã管çã·ã¹ãã
- ãŠãŒã¶ãŒã®ãã€ã³ããå ç®ãŸãã¯æŽæ°ããã
ãããã®ã·ããªãªã§ã¯ãON DUPLICATE KEY UPDATEãæŽ»çšããããšã§ã³ãŒãéãæžãããã¡ã³ããã³ã¹æ§ãåäžãããããšãã§ããŸãã
泚æç¹ã®æ¯ãè¿ã
- AUTO_INCREMENTã®æ³šæ
- äž»ããŒã
AUTO_INCREMENT
ã®å Žåãéè€ããŠããªããŠãIDãå¢å ããããšã«æ³šæããŠãã ããã
- ãããããã¯ã®åé¿
- ã¯ãšãªã®å®è¡é åºããã©ã³ã¶ã¯ã·ã§ã³ã®èšèšãé©åã«è¡ãå¿ èŠããããŸãã
- ã€ã³ããã¯ã¹èšèšã®éèŠæ§
- äž»ããŒããŠããŒã¯ããŒãé©åã«èšèšããããšã§ããšã©ãŒãåé¿ããããã©ãŒãã³ã¹ãåäžãããŸãããã
ä»ã®ããŒã¿ããŒã¹ãšã®æ¯èŒã®ãã€ã³ã
- PostgreSQLã®ãON CONFLICT DO UPDATEãã¯æè»ãªæ¡ä»¶æå®ãå¯èœã
- SQLiteã®ãINSERT OR REPLACEãã¯åé€åŸã«æ¿å ¥ããä»çµã¿ã§ãããããå©çšæã«ã¯ããªã¬ãŒãžã®åœ±é¿ã«æ³šæãå¿ èŠã
æçµçãªæšå¥šäºé
- ã·ã³ãã«ãªæ¿å ¥ã»æŽæ°åŠçã«ã¯ãON DUPLICATE KEY UPDATEããç©æ¥µçã«æŽ»çšããŸãããã
- å€§èŠæš¡ãªããŒã¿æäœãé«åºŠãªæ¡ä»¶ä»ãããžãã¯ãå¿ èŠãªå Žåã¯ããã©ã³ã¶ã¯ã·ã§ã³ãäºåã®ããŒã¿ç¢ºèªã䜵çšããããšã§å®å šæ§ãé«ããããŸãã
ON DUPLICATE KEY UPDATEãé©åã«äœ¿çšããããšã§ãéçºã®å¹çåã ãã§ãªããã¢ããªã±ãŒã·ã§ã³ã®ä¿¡é Œæ§ãé«ããããšãå¯èœã§ãããã²ããã®èšäºã®å 容ãåèã«ããŠãããªãã®ãããžã§ã¯ãã«æŽ»çšããŠãã ããã
8. FAQ
ãã®èšäºã§ã¯ãMySQLã®ãON DUPLICATE KEY UPDATEãã«é¢ããŠå€ãã®æ å ±ãæäŸããŸããããã®ã»ã¯ã·ã§ã³ã§ã¯ããããã質åãšãã®åçããŸãšããå®éã®äœ¿çšã«åœ¹ç«ã€ç¥èãããã«æ·±ããŸãã
Q1: ON DUPLICATE KEY UPDATEã¯ã©ã®ããŒãžã§ã³ã®MySQLã§äœ¿çšã§ããŸããïŒ
- A1: MySQL 4.1.0以éã§äœ¿çšå¯èœã§ãããã ããäžéšã®æ©èœãæåã¯ããŒãžã§ã³ã«ãã£ãŠç°ãªãå Žåããããããå ¬åŒããã¥ã¡ã³ãã§äœ¿çšããŠããããŒãžã§ã³ã®è©³çްã確èªããããšããå§ãããŸãã
Q2: äž»ããŒãååšããªãå Žåã§ãON DUPLICATE KEY UPDATEã¯åäœããŸããïŒ
- A2: åäœããŸãããON DUPLICATE KEY UPDATEã¯äž»ããŒãŸãã¯ãŠããŒã¯ããŒãååšããããŒãã«ã§ã®ã¿æ©èœããŸãããã®ãããããŒãã«èšèšæã«å°ãªããšã1ã€ã®ãŠããŒã¯ããŒãŸãã¯äž»ããŒãèšå®ããŠãã ããã
Q3: ON DUPLICATE KEY UPDATEãšREPLACEæã®éãã¯äœã§ããïŒ
- A3:
- ON DUPLICATE KEY UPDATEã¯ãéè€ãæ€åºãããå Žåã«ç¹å®ã®ã«ã©ã ãæŽæ°ããŸãã
- REPLACEã¯ãæ¢åã®ã¬ã³ãŒããåé€ããŠããæ°ããã¬ã³ãŒããæ¿å ¥ããŸãããã®ãããåé€ããªã¬ãŒãçºç«ããå¯èœæ§ããããããŒã¿ããŒã¹ã®äžè²«æ§ã«åœ±é¿ãäžããå ŽåããããŸãã
Q4: ON DUPLICATE KEY UPDATEã䜿ã£ãã¯ãšãªã®ããã©ãŒãã³ã¹ãæé©åããæ¹æ³ã¯ïŒ
- A4:
- ã€ã³ããã¯ã¹ã®é©åãªèšèš: äž»ããŒããŠããŒã¯ããŒãé©åã«èšå®ããããšã§ãéè€ã®æ€åºãå¹çåãããŸãã
- æŽæ°å¯Ÿè±¡ã«ã©ã ã®æå°å: å¿ èŠãªã«ã©ã ã ããæŽæ°ããããšã§ãäœèšãªåŠçãæžãããŸãã
- ãã©ã³ã¶ã¯ã·ã§ã³ã®æŽ»çš: äžæ¬åŠçããŸãšããããšã§ãããŒã¿ããŒã¹ã®è² è·ã軜æžã§ããŸãã
Q5: éè€ããŒã¿ã®æ€åºæ¡ä»¶ã倿Žããããšã¯å¯èœã§ããïŒ
- A5: æ¡ä»¶ã倿Žããå ŽåããŠããŒã¯ããŒãŸãã¯äž»ããŒã®å®çŸ©ã倿Žããå¿ èŠããããŸããMySQLã§ã¯ãON DUPLICATE KEY UPDATEèªäœã®æåã倿Žããããšã¯ã§ããŸããã
Q6: ãDuplicate entryããšã©ãŒãçºçããåå ãšå¯ŸåŠæ³ã¯ïŒ
- A6:
- åå : ãŠããŒã¯ããŒãŸãã¯äž»ããŒã«éåããããŒã¿ãæ¿å ¥ããããšããå Žåã«çºçããŸãã
- å¯ŸåŠæ³:
- ããŒãã«ã®ã¹ããŒãã確èªããéè€ãçºçããŠããã«ã©ã ãç¹å®ããŸãã
- INSERTæãå®è¡ããåã«ãéè€ããŒã¿ãååšããã
SELECT
æã§ç¢ºèªããŸãã - ON DUPLICATE KEY UPDATEãé©åã«èšå®ããŠããšã©ãŒãåé¿ããŸãã
Q7: ããªã¬ãŒã¯ON DUPLICATE KEY UPDATEã«åœ±é¿ãäžããŸããïŒ
- A7: ã¯ãã圱é¿ãäžããŸããON DUPLICATE KEY UPDATEã䜿çšããå Žåã
INSERT
ããªã¬ãŒãšUPDATE
ããªã¬ãŒã®äž¡æ¹ãçºç«ããå¯èœæ§ããããŸãããã®æåãèæ ®ããŠãããªã¬ãŒã®åŠçå 容ãèšèšããå¿ èŠããããŸãã
Q8: ä»ã®ããŒã¿ããŒã¹ã§åãã¯ãšãªã䜿çšã§ããŸããïŒ
- A8: ä»ã®ããŒã¿ããŒã¹ã«ã¯é¡äŒŒæ©èœããããŸãããæ§æãæåãç°ãªããŸããããšãã°ïŒ
- PostgreSQL: ON CONFLICT DO UPDATE
- SQLite: INSERT OR REPLACE
䜿çšããããŒã¿ããŒã¹ã®ããã¥ã¡ã³ãã確èªããããã«å¿ãã調æŽãè¡ã£ãŠãã ããã
å°ãŸãšã
ãã®FAQã§ã¯ããON DUPLICATE KEY UPDATEãã«é¢ããå žåçãªçåã解決ããŸãããç¹ã«ããšã©ãŒã¡ãã»ãŒãžã®åå ãããã©ãŒãã³ã¹æé©åã®æ¹æ³ã¯ãå®åã§åœ¹ç«ã€æ å ±ã§ããåé¡ãçºçããå Žåã¯ããã®FAQãåèã«è§£æ±ºã詊ã¿ãŠãã ããã
ãON DUPLICATE KEY UPDATEããçè§£ããé©åã«äœ¿çšããããšã§ãå¹ççã§å®å šãªããŒã¿ããŒã¹æäœãå®çŸããŸãããïŒ