- 1 1. ãåå¿è åããMySQLã®äžæããŒãã«ãšã¯ïŒéåžžã®ããŒãã«ãšã®éã
- 2 2. ããµã³ãã«ã³ãŒãä»ããMySQLã§äžæããŒãã«ãäœæããæ¹æ³
- 2.1 ã¯ããã«
- 2.2 2-1. äžæããŒãã«ã®åºæ¬æ§æ
- 2.3 2-2. æ¢åããŒãã«ã®ããŒã¿ãå ã«äžæããŒãã«ãäœæ
- 2.4 2-3. äžæããŒãã«ã®ããŒã¿ã確èªããæ¹æ³
- 2.5 2-4. äžæããŒãã«ã«ããŒã¿ãæ¿å ¥ãã
- 2.6 2-5. äžæããŒãã«ãäœæããéã®æ³šæç¹
- 2.7 ãŸãšã
- 3 3. MySQLã®äžæããŒãã«ã§ããŒã¿ãæäœããæ¹æ³ïŒINSERTã»UPDATEã»DELETEïŒ
- 4 4. MySQLã®äžæããŒãã«ã¯èªååé€ãããïŒæåã§åé€ããæ¹æ³ã解説
- 5 5. MySQLã®äžæããŒãã«ã®æŽ»çšäŸ5éžïŒããã©ãŒãã³ã¹åäžã«ã掻çšå¯èœ
- 5.1 ã¯ããã«
- 5.2 5-1. ã¯ãšãªã®ããã©ãŒãã³ã¹ãæé©åïŒJOINã®è² è·è»œæžïŒ
- 5.3 5-2. äžæçãªããŒã¿ã®éèšåŠç
- 5.4 5-3. ãããåŠçã®äžéããŒã¿ä¿å
- 5.5 5-4. ãŠãŒã¶ãŒããšã®äžæããŒã¿ç®¡ç
- 5.6 5-5. äžæããŒãã«ãšãã¥ãŒã®äœ¿ãåã
- 5.7 ãŸãšã
- 6 6. MySQLã®äžæããŒãã«ãå®å šã«äœ¿ãããã®3ã€ã®æ³šæç¹
- 7 7. MySQLã®äžæããŒãã«ã«é¢ãããããã質å10éžïŒFAQïŒ
- 8 8. ããŸãšããMySQLã®äžæããŒãã«ã®æŽ»çšãã€ã³ã
- 8.1 ã¯ããã«
- 8.2 8-1. MySQLã®äžæããŒãã«ã®åºæ¬æŠå¿µ
- 8.3 8-2. äžæããŒãã«ã®ã¡ãªãã
- 8.4 8-3. äžæããŒãã«ã®ãã¡ãªãããšæ³šæç¹
- 8.5 8-4. äžæããŒãã«ãå®å šã«äœ¿ãããã®ãã€ã³ã
- 8.6 8-5. äžæããŒãã« vs. ä»£æ¿ææ®µïŒãã¥ãŒã»CTEïŒ
- 8.7 ãŸãšã
1. ãåå¿è åããMySQLã®äžæããŒãã«ãšã¯ïŒéåžžã®ããŒãã«ãšã®éã
ã¯ããã«
MySQLã䜿ã£ãŠããŒã¿ã管çããŠãããšãäžæçãªããŒã¿ã®ä¿åãå¿ èŠã«ãªãå Žé¢ããããŸããäŸãã°ã倧éã®ããŒã¿ãåŠçããéãäžæçã«ããŒã¿ãä¿åããªããäœæ¥ãããããšãããã§ããããããããã±ãŒã¹ã«åœ¹ç«ã€ã®ããäžæããŒãã«ïŒTemporary TableïŒãã§ãã
ãã®èšäºã§ã¯ãMySQLã®äžæããŒãã«ã®åºæ¬çãªä»çµã¿ããéåžžã®ããŒãã«ãšã®éãã«ã€ããŠè©³ãã解説ããŸãã
1-1. äžæããŒãã«ãšã¯ïŒ
äžæããŒãã«ïŒTemporary TableïŒã¯ãããŒã¿ããŒã¹ã®ã»ãã·ã§ã³ïŒæ¥ç¶ïŒäžã®ã¿ååšããç¹æ®ãªããŒãã«ã§ãã
éåžžã®ããŒãã«ãšéããã»ãã·ã§ã³ãçµäºãããšèªåçã«åé€ããããããäžæçãªããŒã¿ã®ä¿åã«æé©ã§ãã
äžæããŒãã«ã®äž»ãªç¹åŸŽ
- ã»ãã·ã§ã³ããšã«ç¬ç«ããŠãã
äžæããŒãã«ã¯äœæããã»ãã·ã§ã³å ã§ã®ã¿ã¢ã¯ã»ã¹ã§ããŸããä»ã®ã»ãã·ã§ã³ããã¯åç §ã§ããŸããã - ã»ãã·ã§ã³çµäºæã«èªååé€ããã
äžæããŒãã«ã¯ãæç€ºçã«åé€ããªããŠããã»ãã·ã§ã³ãçµäºããã°èªåçã«æ¶ããŸãã - åãååã®äžæããŒãã«ãäœæå¯èœ
éåžžã®ããŒãã«ãšã¯ç°ãªããç°ãªãã»ãã·ã§ã³å ã§åãååã®äžæããŒãã«ãäœæããããšãå¯èœã§ãã
1-2. éåžžã®ããŒãã«ãšã®éã
äžæããŒãã«ãšéåžžã®ããŒãã«ã«ã¯ã以äžã®ãããªéãããããŸãã
æ¯èŒé ç® | äžæããŒãã«ïŒTemporary TableïŒ | éåžžã®ããŒãã« |
---|---|---|
ããŒã¿ã®ä¿ææé | ã»ãã·ã§ã³äžã®ã¿æå¹ïŒèªååé€ïŒ | æ°žç¶çã«ä¿æããã |
ã¢ã¯ã»ã¹å¯èœç¯å² | äœæããã»ãã·ã§ã³å ã®ã¿ | ãã¹ãŠã®ãŠãŒã¶ãŒãã¢ã¯ã»ã¹å¯èœ |
ããŒãã«ã®ç«¶å | åãååã®äžæããŒãã«ãäœæå¯èœ | åãããŒã¿ããŒã¹ã«ååã®ããŒãã«ã¯äœæäžå¯ |
æš©éèšå® | CREATE TEMPORARY TABLES æš©éãå¿
èŠ | äžè¬çãªCREATE TABLE æš©éãå¿
èŠ |
ã€ã³ããã¯ã¹èšå® | å¯èœ | å¯èœ |
ããã©ãŒãã³ã¹ | ã¡ã¢ãªäžã«äœæãããããšãå€ããé«éåŠçãå¯èœ | ã¹ãã¬ãŒãžã«ä¿åãããããŒã¿éãå€ããšåŠçè² è·ãå¢ãã |
ã©ã¡ãã䜿ãã¹ããïŒ
- äžæçã«ããŒã¿ãæ ŒçŽããåŠçãçµããã°äžèŠã«ãªãå Žå â äžæããŒãã«
- ããŒã¿ãæ°žç¶çã«ä¿æããåå©çšãããå Žå â éåžžã®ããŒãã«
äŸãã°ãå€§èŠæš¡ãªããŒã¿åæãäžæçãªããŒã¿éèšã®ãããªäœæ¥ã§ã¯ãäžæããŒãã«ãéåžžã«æçšã§ãã
1-3. äžæããŒãã«ãå¿ èŠãªã±ãŒã¹
MySQLã®äžæããŒãã«ã¯ã次ã®ãããªå Žé¢ã§ç¹ã«åœ¹ç«ã¡ãŸãã
â ã¯ãšãªã®ããã©ãŒãã³ã¹åäž
äŸãã°ãè€éãªJOINåŠçãè¡ãå Žåãäºåã«äžæããŒãã«ãäœæããŠäžéããŒã¿ãä¿åããããšã§ãåŠçæéãççž®ã§ããŸãã
äŸïŒJOINã®è² è·ã軜æž
CREATE TEMPORARY TABLE temp_users AS
SELECT id, name FROM users WHERE status = 'active';
ãã®ããã«ããŠã察象ããŒã¿ãäžæããŒãã«ã«ä¿åããŠããJOINãå®è¡ããã°ãããã©ãŒãã³ã¹ãåäžããŸãã
â¡ äžæçãªããŒã¿æ ŒçŽ
ã¢ããªã±ãŒã·ã§ã³ã§ãäžæçãªããŒã¿ã管çããå Žåã«ãäžæããŒãã«ã¯äŸ¿å©ã§ãã
äŸãã°ããŠãŒã¶ãŒãæ€çŽ¢ããããŒã¿ãäžæããŒãã«ã«æ ŒçŽããã»ãã·ã§ã³çµäºåŸã«æ¶å»ãããªã©ã®çšéããããŸãã
⢠ãããåŠçã®äžéããŒãã«
å€§èŠæš¡ãªããŒã¿ãåŠçããéãäžæããŒãã«ãäžéããŒãã«ãšããŠäœ¿çšããããšã§ãåŠçã®å®å®æ§ãé«ããããšãã§ããŸãã
1-4. äžæããŒãã«ã®å¶çŽ
äžæããŒãã«ã¯äŸ¿å©ãªæ©èœã§ãããããã€ãã®å¶çŽããããŸãã
â ã»ãã·ã§ã³çµäºæã«åé€ããã
äžæããŒãã«ã¯ãã»ãã·ã§ã³ãçµäºãããšèªåçã«åé€ããããããæ°žç¶çãªããŒã¿ã®ä¿åã«ã¯äžåãã§ãã
â¡ ä»ã®ã»ãã·ã§ã³ããã¢ã¯ã»ã¹ã§ããªã
äžæããŒãã«ã¯äœæããã»ãã·ã§ã³å ã§ã®ã¿å©çšå¯èœãªãããå¥ã®ãŠãŒã¶ãŒãããã»ã¹ãšå ±æããããšã¯ã§ããŸããã
⢠åãååã®éåžžã®ããŒãã«ãšç«¶åããå¯èœæ§
ãããåãååã®éåžžã®ããŒãã«ãååšããå ŽåãäžæããŒãã«ãäœæãããšéåžžã®ããŒãã«ãäžæçã«èŠããªããªãã®ã§æ³šæãå¿ èŠã§ãã
CREATE TEMPORARY TABLE users (id INT, name VARCHAR(255));
SELECT * FROM users; -- ãã®ã¯ãšãªã§ã¯ãäžæããŒãã«ã®ããŒã¿ãåç
§ããã
ãã®ããã«ãäžæããŒãã«ãäœæããããšãåãååã®éåžžã®ããŒãã«ã«ã¢ã¯ã»ã¹ã§ããªããªããããååã®ä»ãæ¹ã«ã¯æ³šæãå¿ èŠã§ãã
ãŸãšã
MySQLã®äžæããŒãã«ã¯ãäžæçãªããŒã¿æ ŒçŽãã¯ãšãªã®æé©åã«åœ¹ç«ã€äŸ¿å©ãªæ©èœã§ãã
éåžžã®ããŒãã«ãšã®éããçè§£ããé©åã«äœ¿ãåããããšã§ãããå¹ççãªããŒã¿åŠçãå¯èœã«ãªããŸãã
â ãããã
- äžæããŒãã«ã¯ã»ãã·ã§ã³çµäºæã«èªååé€ããã
- éåžžã®ããŒãã«ãšã¯ç°ãªããã»ãã·ã§ã³ããšã«ç¬ç«
- äžæçãªããŒã¿ä¿åãã¯ãšãªã®ããã©ãŒãã³ã¹åäžã«æé©
- ã»ãã·ã§ã³ãçµäºãããšããŒã¿ãæ¶ãããããæ°žç¶çãªããŒã¿ä¿åã«ã¯äžåã
- ä»ã®ã»ãã·ã§ã³ããã¢ã¯ã»ã¹äžå¯ãååã®éåžžããŒãã«ãšç«¶åããå¯èœæ§ãã
2. ããµã³ãã«ã³ãŒãä»ããMySQLã§äžæããŒãã«ãäœæããæ¹æ³
ã¯ããã«
ååã®èšäºã§ã¯ãäžæããŒãã«ïŒTemporary TableïŒã®åºæ¬æŠå¿µãéåžžã®ããŒãã«ãšã®éãã«ã€ããŠè§£èª¬ããŸããã
ä»åã¯ãå®éã«äžæããŒãã«ãäœæããããŒã¿ãæäœããæ¹æ³ã«ã€ããŠè©³ãã説æããŸãã
äžæããŒãã«ã®äœææ¹æ³ã¯ã·ã³ãã«ã§ãããé©åãªæ§æã䜿ããªããšæåŸ ããåäœãããªãå ŽåããããŸãããã®èšäºã§ã¯ããåºæ¬æ§æããæ¢åããŒãã«ãåºã«ããäœæããäžæããŒãã«ã®ç¢ºèªæ¹æ³ã ãªã©ã詳ãã解説ããŸãã
2-1. äžæããŒãã«ã®åºæ¬æ§æ
äžæããŒãã«ãäœæããã«ã¯ãCREATE TEMPORARY TABLE
æã䜿çšããŸãã
åºæ¬æ§æ
CREATE TEMPORARY TABLE ããŒãã«å (
ã«ã©ã å ããŒã¿å [å¶çŽ],
ã«ã©ã å ããŒã¿å [å¶çŽ],
...
);
éåžžã® CREATE TABLE
ãšã»ãŒåãæ§æã§ãããTEMPORARY
ã远å ããããšã§äžæããŒãã«ã«ãªããŸãã
äŸïŒãŠãŒã¶ãŒæ å ±ãäžæããŒãã«ã«ä¿å
CREATE TEMPORARY TABLE temp_users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
email VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
ãã® temp_users
ããŒãã«ã¯ãçŸåšã®ã»ãã·ã§ã³ã§ã®ã¿æå¹ ã§ãããã»ãã·ã§ã³ãçµäºãããšèªåçã«åé€ãããŸãã
2-2. æ¢åããŒãã«ã®ããŒã¿ãå ã«äžæããŒãã«ãäœæ
æ¢åã®ããŒãã«ã®ããŒã¿ãåºã«ãäžæããŒãã«ãäœæããããšãå¯èœã§ãã
æ§æ
CREATE TEMPORARY TABLE äžæããŒãã«å AS
SELECT * FROM æ¢åã®ããŒãã« WHERE æ¡ä»¶;
äŸïŒã¢ã¯ãã£ããªãŠãŒã¶ãŒã®ã¿ãäžæããŒãã«ã«ä¿å
CREATE TEMPORARY TABLE active_users AS
SELECT id, name, email FROM users WHERE status = 'active';
ãã®æ¹æ³ã䜿ããšãusers
ããŒãã«ãã status = 'active'
ã®ãŠãŒã¶ãŒã ããæœåºããæ°ããäžæããŒãã« active_users
ã«æ ŒçŽã§ããŸãã
ãã€ã³ã
- æ¢åã®ããŒãã«ã®ããŒã¿ããã®ãŸãŸã³ã㌠ã§ãã
- ã«ã©ã ã®ããŒã¿åãèªåã§èšå®ããã
- ã€ã³ããã¯ã¹ã¯ã³ããŒãããªã ã®ã§ãå¿ èŠãªãæç€ºçã«è¿œå ãã
2-3. äžæããŒãã«ã®ããŒã¿ã確èªããæ¹æ³
äžæããŒãã«ã®äžèЧã確èª
SHOW TABLES;
ãã ããéåžžã® SHOW TABLES
ã§ã¯ãäžæããŒãã«ã¯ãªã¹ãã«è¡šç€ºãããŸããã
äžæããŒãã«ã®æ§é ã確èª
DESC temp_users;
ãŸãã¯
SHOW CREATE TABLE temp_users;
ããã«ãããäžæããŒãã«ã®ã«ã©ã æ§é ãå¶çŽã確èªã§ããŸãã
2-4. äžæããŒãã«ã«ããŒã¿ãæ¿å ¥ãã
äœæããäžæããŒãã«ã«ããŒã¿ã远å ããæ¹æ³ã¯ãéåžžã®ããŒãã«ãšåãã§ãã
ããŒã¿ã®æ¿å ¥
INSERT INTO temp_users (name, email) VALUES
('ç°äž 倪é', 'tanaka@example.com'),
('äœè€ è±å', 'sato@example.com');
ããŒã¿ã®ç¢ºèª
SELECT * FROM temp_users;
ããã«ãããäžæããŒãã«ã«ããŒã¿ãæ ŒçŽãããŠããããšã確èªã§ããŸãã
2-5. äžæããŒãã«ãäœæããéã®æ³šæç¹
â ããŒãã«åã®ç«¶åã«æ³šæ
éåžžã®ããŒãã«ãšåãååã®äžæããŒãã«ãäœæãããšãäžæããŒãã«ãåªå ããã ãããéåžžã®ããŒãã«ãäžæçã«åç §ã§ããªããªããŸãã
CREATE TEMPORARY TABLE users (id INT, name VARCHAR(50));
SELECT * FROM users; -- ããã§ã¯äžæããŒãã«ã®ããŒã¿ãååŸããã
ãã®ãããäžæããŒãã«ã®ååã«ã¯“temp_” ãªã©ã®ãã¬ãã£ãã¯ã¹ãä»ããããšãæšå¥šããŸãã
â¡ ã€ã³ããã¯ã¹ã¯èªåã§åŒãç¶ãããªã
æ¢åããŒãã«ã®ããŒã¿ãã³ããŒããå Žåãã€ã³ããã¯ã¹ã¯èªåçã«é©çšãããŸããã
å¿
èŠã«å¿ããŠãæç€ºçã«ã€ã³ããã¯ã¹ã远å ããå¿
èŠããããŸãã
ALTER TABLE temp_users ADD INDEX (email);
⢠TEMPORARY TABLE
ãäœæããæš©éãå¿
èŠ
äžæããŒãã«ãäœæããã«ã¯ãCREATE TEMPORARY TABLES
æš©éãå¿
èŠã§ãã
GRANT CREATE TEMPORARY TABLES ON database_name.* TO 'user'@'localhost';
ãã®æš©éããªããšãäžæããŒãã«ã®äœæã¯ã§ããŸããã
ãŸãšã
ä»åã¯ãäžæããŒãã«ã®äœææ¹æ³ã«ã€ããŠè§£èª¬ããŸããã
â ãããã
CREATE TEMPORARY TABLE
ã䜿ã£ãŠäžæããŒãã«ãäœæ- æ¢åã®ããŒãã«ããããŒã¿ãã³ããŒããŠäœæãå¯èœ
- ã»ãã·ã§ã³çµäºæã«èªååé€ããã
- ã€ã³ããã¯ã¹ã¯èªåé©çšãããªãããæ³šæ
- ããŒãã«åã®ç«¶åãé¿ãããããtemp_ãã®ãããªãã¬ãã£ãã¯ã¹ãæšå¥š
- é©åãªæš©é (
CREATE TEMPORARY TABLES
) ãå¿ èŠ
3. MySQLã®äžæããŒãã«ã§ããŒã¿ãæäœããæ¹æ³ïŒINSERTã»UPDATEã»DELETEïŒ
ã¯ããã«
ååã®èšäºã§ã¯ãMySQLã§äžæããŒãã«ãäœæããæ¹æ³ã解説ããŸããã
ä»åã¯ãäžæããŒãã«ã«ããŒã¿ã远å ãæŽæ°ãåé€ããæ¹æ³ãå
·äœçãªSQLã³ãã³ãã䜿ããªãã説æããŸãã
äžæããŒãã«ã¯éåžžã®ããŒãã«ãšåãããã«ããŒã¿æäœãå¯èœã§ããã
ããã€ãã®æ³šæç¹ãããããããããã«ã€ããŠã詳ãã解説ããŸãã
3-1. äžæããŒãã«ã«ããŒã¿ã远å ïŒINSERTïŒ
äžæããŒãã«ãžã®ããŒã¿ã®è¿œå ã¯ãéåžžã®ããŒãã«ãšåãããã« INSERT INTO
æã䜿çšããŸãã
åºæ¬æ§æ
INSERT INTO äžæããŒãã«å (ã«ã©ã 1, ã«ã©ã 2, ...)
VALUES (å€1, å€2, ...);
äŸïŒãŠãŒã¶ãŒæ å ±ã远å
CREATE TEMPORARY TABLE temp_users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
email VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO temp_users (name, email)
VALUES
('ç°äž 倪é', 'tanaka@example.com'),
('äœè€ è±å', 'sato@example.com');
INSERTâŠSELECT ã䜿ã£ãŠæ¢åããŒã¿ã远å
æ¢åã®ããŒãã«ããããŒã¿ãååŸããŠäžæããŒãã«ã«æ¿å ¥ããããšãã§ããŸãã
INSERT INTO temp_users (id, name, email)
SELECT id, name, email FROM users WHERE status = 'active';
ãã®æ¹æ³ã䜿ãã°ãã¢ã¯ãã£ããªãŠãŒã¶ãŒã®ã¿ãäžæããŒãã«ã«ä¿åã§ããŸãã
3-2. äžæããŒãã«ã®ããŒã¿ãæŽæ°ïŒUPDATEïŒ
äžæããŒãã«å
ã®ããŒã¿ã倿Žããã«ã¯ãUPDATE
æã䜿çšããŸãã
åºæ¬æ§æ
UPDATE äžæããŒãã«å
SET ã«ã©ã å = å€
WHERE æ¡ä»¶;
äŸïŒãŠãŒã¶ãŒã®ååãæŽæ°
UPDATE temp_users
SET name = 'ç°äž äžé'
WHERE email = 'tanaka@example.com';
ç¹å®æ¡ä»¶ã®ããŒã¿ãäžæ¬æŽæ°
äŸãã°ãç¹å®ã®ãã¡ã€ã³ã®ã¡ãŒã«ã¢ãã¬ã¹ã example.jp
ã«å€æŽãããå Žåãæ¬¡ã®ããã«èšè¿°ã§ããŸãã
UPDATE temp_users
SET email = REPLACE(email, 'example.com', 'example.jp')
WHERE email LIKE '%@example.com';
3-3. äžæããŒãã«ã®ããŒã¿ãåé€ïŒDELETEïŒ
ããŒã¿ãåé€ããã«ã¯ãDELETE
æã䜿çšããŸãã
åºæ¬æ§æ
DELETE FROM äžæããŒãã«å WHERE æ¡ä»¶;
äŸïŒç¹å®ã®ãŠãŒã¶ãŒããŒã¿ãåé€
DELETE FROM temp_users WHERE email = 'tanaka@example.com';
å šããŒã¿ãåé€ïŒTRUNCATE ãšã®éãïŒ
ãã¹ãŠã®ããŒã¿ãåé€ãããå Žåã¯ã以äžã®ããã«èšè¿°ã§ããŸãã
DELETE FROM temp_users;
äžæ¹ãéåžžã®ããŒãã«ã§ã¯ TRUNCATE TABLE
ã䜿ãããšã§é«éã«ããŒã¿ãåé€ã§ããŸãããäžæããŒãã«ã§ã¯ TRUNCATE
ã䜿ããŸããã
TRUNCATE TABLE temp_users; -- ãšã©ãŒïŒMySQLã§ã¯äžæããŒãã«ã«ã¯äœ¿çšäžå¯ïŒ
ãããã£ãŠãäžæããŒãã«ã®ããŒã¿ãå
šåé€ããé㯠DELETE
ã䜿ãå¿
èŠããããŸãã
3-4. äžæããŒãã«ã®ããŒã¿æäœæã®æ³šæç¹
â ã»ãã·ã§ã³ãçµäºãããšããŒã¿ãæ¶ãã
äžæããŒãã«ã¯ãã»ãã·ã§ã³ïŒæ¥ç¶ïŒãçµäºãããšèªåã§åé€ããã ããã
ããŒã¿ãæ°žç¶çã«ä¿æããçšéã«ã¯é©ããŠããŸããã
â¡ ä»ã®ã»ãã·ã§ã³ããã¯åç §ã§ããªã
äžæããŒãã«ã¯ãäœæããã»ãã·ã§ã³å ã§ã®ã¿æå¹ã§ãä»ã®ã»ãã·ã§ã³ããã¯ã¢ã¯ã»ã¹ã§ããŸããã
SELECT * FROM temp_users;
ããå¥ã®ã»ãã·ã§ã³ã§ãã®SQLãå®è¡ãããšããTable ‘temp_users’ doesn’t existã ã®ãšã©ãŒãçºçããŸãã
â¢ äžæããŒãã«ã®ã€ã³ããã¯ã¹ã¯èªåé©çšãããªã
CREATE TEMPORARY TABLE ... AS SELECT ...
ã§ããŒãã«ãäœæããå Žåã
å
ã®ããŒãã«ã®ã€ã³ããã¯ã¹ã¯åŒãç¶ãããŸããã å¿
èŠãªã ALTER TABLE
ã䜿ã£ãŠã€ã³ããã¯ã¹ãæåã§è¿œå ããŠãã ããã
ALTER TABLE temp_users ADD INDEX (email);
ãŸãšã
ä»åã¯ãäžæããŒãã«ã®ããŒã¿æäœïŒINSERTã»UPDATEã»DELETEïŒã«ã€ããŠè§£èª¬ããŸããã
â ãããã
- INSERT ã§ããŒã¿ã远å ïŒ
INSERT INTO ... VALUES
/INSERT INTO ... SELECT
ïŒ - UPDATE ã§ããŒã¿ãæŽæ°ïŒç¹å®ã®æ¡ä»¶ã§ã®æŽæ°ã
REPLACE()
ã®æŽ»çšïŒ - DELETE ã§ããŒã¿ãåé€ïŒ
DELETE FROM ... WHERE
ãTRUNCATE
ã¯äœ¿çšäžå¯ïŒ - ã»ãã·ã§ã³ãçµäºãããšäžæããŒãã«ãåé€ããã
- ä»ã®ã»ãã·ã§ã³ããã¯ã¢ã¯ã»ã¹äžå¯
- ã€ã³ããã¯ã¹ã¯èªåé©çšãããªããããæåã§è¿œå ãå¿ èŠ
4. MySQLã®äžæããŒãã«ã¯èªååé€ãããïŒæåã§åé€ããæ¹æ³ã解説
ã¯ããã«
MySQLã®äžæããŒãã«ïŒTemporary TableïŒã¯ãéåžžã®ããŒãã«ãšç°ãªããã»ãã·ã§ã³ãçµäºãããšèªåçã«åé€ ãããç¹åŸŽããããŸããããããå Žåã«ãã£ãŠã¯æåã§åé€ããå¿ èŠããã å Žé¢ããããŸãã
æ¬èšäºã§ã¯ãäžæããŒãã«ã®èªååé€ã®ä»çµã¿ ã æåã§åé€ããæ¹æ³ ã«ã€ããŠè©³ãã解説ããŸãã
4-1. äžæããŒãã«ã®èªååé€ã®ä»çµã¿
â ã»ãã·ã§ã³çµäºæã«èªååé€ããã
MySQLã®äžæããŒãã«ã¯ãããŒãã«ãäœæããã»ãã·ã§ã³ïŒããŒã¿ããŒã¹ãžã®æ¥ç¶ïŒãçµäºãããšãèªåçã«åé€ãããŸãã
ãã®ãããæåã§åé€ããªããŠãåºæ¬çã«ã¯åé¡ãããŸããã
äŸïŒã»ãã·ã§ã³çµäºæã®èªååé€
-- æ°ããã»ãã·ã§ã³ã§äžæããŒãã«ãäœæ
CREATE TEMPORARY TABLE temp_users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
email VARCHAR(100)
);
-- ããŒã¿ãæ¿å
¥
INSERT INTO temp_users (name, email) VALUES ('ç°äž 倪é', 'tanaka@example.com');
-- ã»ãã·ã§ã³ãçµäºïŒMySQLã¯ã©ã€ã¢ã³ãã®æ¥ç¶ãåãïŒ
EXIT;
ãã®æãäžæããŒãã« temp_users
ã¯èªåçã«åé€ãããŸãã
â¡ ãã ããã»ãã·ã§ã³ãç¶ç¶ããéãäžæããŒãã«ã¯æ®ã
äžæããŒãã«ã¯ã»ãã·ã§ã³ããšã«ç®¡çããããããã»ãã·ã§ã³ãç¶ç¶ããéãåé€ãããŸããã
SELECT * FROM temp_users; -- ã»ãã·ã§ã³ãç¶ããŠããã°ããŒã¿ãååŸå¯èœ
ã€ãŸããMySQLã¯ã©ã€ã¢ã³ãïŒãŸãã¯ããã°ã©ã ïŒãéãããŸã§ãäžæããŒãã«ã¯ã¡ã¢ãªäžã«æ®ã ãšããããšã§ãã
4-2. æåã§äžæããŒãã«ãåé€ããæ¹æ³
äžæããŒãã«ã¯æåã§åé€ããããšãå¯èœã§ãã
MySQLã§ã¯ãDROP TEMPORARY TABLE
ã䜿çšããŠäžæããŒãã«ãåé€ã§ããŸãã
â DROP TEMPORARY TABLE ã䜿ã
DROP TEMPORARY TABLE temp_users;
ããã«ãããäžæããŒãã« temp_users
ãå³åº§ã«åé€ãããŸãã
â¡ IF EXISTS ãã€ããŠãšã©ãŒãé²ã
åé€ããããŒãã«ãååšããªãå Žåããšã©ãŒãé²ãããã« IF EXISTS
ã䜿çšã§ããŸãã
DROP TEMPORARY TABLE IF EXISTS temp_users;
ãã®æ§æã䜿ãããšã§ãåé€ããããŒãã«ãååšããªãå Žåã§ããšã©ãŒãåé¿ã§ããŸãã
⢠éåžžã® DROP TABLE ãšã¯ç°ãªã
éåžžã® DROP TABLE
ã䜿ã£ãŠäžæããŒãã«ãåé€ããããšãããšã以äžã®ãšã©ãŒãçºçããããšããããŸãã
DROP TABLE temp_users;
ãšã©ãŒ:
ERROR 1051 (42S02): Unknown table 'temp_users'
MySQLã¯éåžžã®ããŒãã«ãšäžæããŒãã«ãå¥ã
ã«ç®¡çããŠãããããäžæããŒãã«ãåé€ããå Žåã¯å¿
ã DROP TEMPORARY TABLE
ã䜿çšããå¿
èŠããããŸãã
4-3. äžæããŒãã«ã®åé€ã確èªããæ¹æ³
â SHOW TABLES ã§ã¯ç¢ºèªã§ããªã
éåžžã® SHOW TABLES
ã§ã¯ãäžæããŒãã«ã®äžèЧã¯è¡šç€ºãããŸããã
SHOW TABLES;
â äžæããŒãã«ã¯ãªã¹ãã«è¡šç€ºãããªã
â¡ INFORMATION_SCHEMA ã§ç¢ºèªãã
MySQLã® INFORMATION_SCHEMA
ã䜿çšãããšãäžæããŒãã«ãååšããŠãããã©ããã確èªã§ããŸãã
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'temp_users';
ãã®ã¯ãšãªãå®è¡ããŠçµæãè¿ã£ãŠããå ŽåãäžæããŒãã«ãååšããŠããããšãæå³ããŸãã
4-4. äžæããŒãã«åé€æã®æ³šæç¹
â ã»ãã·ã§ã³ããšã«ç°ãªãäžæããŒãã«ãååšãã
åãååã®äžæããŒãã«ãè€æ°ã®ã»ãã·ã§ã³ã§äœæããããšãã§ããŸãã
å¥ã®ã»ãã·ã§ã³ãäœæããäžæããŒãã«ã¯åé€ã§ããŸããã
äŸ
-- ã»ãã·ã§ã³Aã§äœæ
CREATE TEMPORARY TABLE temp_data (id INT);
-- ã»ãã·ã§ã³Bã§åé€ã詊ã¿ã
DROP TEMPORARY TABLE temp_data;
ãšã©ãŒãçºçïŒ
ERROR 1051 (42S02): Unknown table 'temp_data'
äžæããŒãã«ã¯äœæããã»ãã·ã§ã³ã§ã®ã¿åé€å¯èœã§ãã
â¡ åãååã®éåžžããŒãã«ãšç«¶åããå¯èœæ§
äžæããŒãã«ã®ååãéåžžã®ããŒãã«ãšåãå Žåã
äžæããŒãã«ãåªå
ãããéåžžã®ããŒãã«ãèŠããªããªããŸãã
äŸ
-- éåžžã®ããŒãã«ïŒusersïŒãååš
SELECT * FROM users;
-- åãååã®äžæããŒãã«ãäœæ
CREATE TEMPORARY TABLE users (id INT, name VARCHAR(50));
-- ããã§å®è¡ãããšãäžæããŒãã«ã® users ãåç
§ããã
SELECT * FROM users;
解決ç:
- äžæããŒãã«ã«ã¯
temp_
ã®ãããªãã¬ãã£ãã¯ã¹ãä»ãã ããšã§ãååã®ç«¶åãé²ãã
ãŸãšã
ä»åã¯ãäžæããŒãã«ã®åé€ã«é¢ããä»çµã¿ã𿹿³ã解説ããŸããã
â ãããã
- äžæããŒãã«ã¯ã»ãã·ã§ã³çµäºæã«èªååé€ããã
- ã»ãã·ã§ã³ãç¶ããŠããéããäžæããŒãã«ã¯æ®ã
- æåã§åé€ããå Žåã¯
DROP TEMPORARY TABLE
ãäœ¿çš IF EXISTS
ãã€ãããšãšã©ãŒãé²ããSHOW TABLES
ã§ã¯äžæããŒãã«ã¯è¡šç€ºãããªã- åé€ã§ããã®ã¯äœæããã»ãã·ã§ã³ã®ã¿
- éåžžã®ããŒãã«ãšååãç«¶åãããšãéåžžã®ããŒãã«ãèŠããªããªããããååã«ãã¬ãã£ãã¯ã¹ãä»ãã
5. MySQLã®äžæããŒãã«ã®æŽ»çšäŸ5éžïŒããã©ãŒãã³ã¹åäžã«ã掻çšå¯èœ
ã¯ããã«
MySQLã®äžæããŒãã«ïŒTemporary TableïŒã¯ãäžæçãªããŒã¿ãä¿åããªããè€éãªã¯ãšãªãç°¡çŽ åããããŒã¿ããŒã¹ã®ããã©ãŒãã³ã¹ãåäžããã ããšãã§ããŸãã
æ¬èšäºã§ã¯ãäžæããŒãã«ã®å
·äœçãªæŽ»çšäŸã5〠玹ä»ããŸãã
å®éã®æ¥åã§ã©ã®ããã«åœ¹ç«ã€ã®ãããµã³ãã«SQLãšãšãã«è§£èª¬ããŸãã
5-1. ã¯ãšãªã®ããã©ãŒãã³ã¹ãæé©åïŒJOINã®è² è·è»œæžïŒ
åé¡ç¹
å€§èŠæš¡ãªããŒã¿ãåŠçããéãããŒãã«éã® JOIN
ããã®ãŸãŸå®è¡ãããšãããã©ãŒãã³ã¹ãäœäžããå¯èœæ§ããããŸãã
解決ç
äžæããŒãã«ãå©çšããŠã察象ããŒã¿ããããããçµã蟌ãã§ããããšã§ãJOINã®è² è·ã軜æžã§ããŸãã
äŸïŒã¢ã¯ãã£ããªãŠãŒã¶ãŒã®æ³šæããŒã¿ãååŸ
-- ãŸãã¢ã¯ãã£ããªãŠãŒã¶ãŒã ããäžæããŒãã«ã«æ ŒçŽ
CREATE TEMPORARY TABLE temp_active_users AS
SELECT id, name FROM users WHERE status = 'active';
-- äžæããŒãã«ãå©çšããŠJOINãå®è¡
SELECT o.order_id, t.name, o.total_price
FROM orders o
JOIN temp_active_users t ON o.customer_id = t.id;
ã¡ãªãã
users
ããŒãã«å šäœã§ã¯ãªãããã¢ã¯ãã£ããªãŠãŒã¶ãŒã®ã¿ã ã察象ã«ããããšã§ãJOINåŠçã®è² è·ã軜æž- ã¡ã€ã³ã¯ãšãªã®ã·ã³ãã«å ã«ããå¯èªæ§åäž
5-2. äžæçãªããŒã¿ã®éèšåŠç
åé¡ç¹
åãéèšåŠçãè€æ°åå®è¡ãããšãããã©ãŒãã³ã¹ãäœäžããã
解決ç
äžæããŒãã«ã䜿ã£ãŠãäžåºŠéèšçµæãä¿åããããšã§ãäžèŠãªèšç®ã®ç¹°ãè¿ããé²ãã
äŸïŒæå¥ã®å£²äžããŒã¿ãäžæããŒãã«ã«ä¿å
-- æå¥ã®å£²äžåèšãèšç®ããäžæããŒãã«ã«ä¿å
CREATE TEMPORARY TABLE temp_monthly_sales AS
SELECT DATE_FORMAT(order_date, '%Y-%m') AS month, SUM(total_price) AS total_sales
FROM orders
GROUP BY month;
-- äžæããŒãã«ãå©çšããŠéèšçµæãååŸ
SELECT * FROM temp_monthly_sales WHERE total_sales > 100000;
ã¡ãªãã
- äžæããŒãã«ã«ä¿åããéèšããŒã¿ãäœåºŠã§ãå©çšå¯èœ
- äžèŠãªèšç®ã®ç¹°ãè¿ããé²ããããã©ãŒãã³ã¹ãåäž
5-3. ãããåŠçã®äžéããŒã¿ä¿å
åé¡ç¹
ããŒã¿ã®äžæ¬æŽæ°ãåé€ãè¡ãéãåŠçéäžã§ãšã©ãŒãçºçãããšãããŒã¿ãäžå®å šãªç¶æ ã«ãªãã
解決ç
äžæããŒãã«ãå©çšããŠäžéããŒã¿ãä¿åããããŒã¿ã®äžè²«æ§ãç¢ºä¿ ããã
äŸïŒç¹å®ã®æ¡ä»¶ã§æ³šæããŒã¿ãæŽæ°
-- æŽæ°å¯Ÿè±¡ã®ããŒã¿ãäžæããŒãã«ã«ä¿å
CREATE TEMPORARY TABLE temp_orders AS
SELECT order_id, total_price FROM orders WHERE status = 'pending';
-- äžæããŒãã«ãåºã«æŽæ°åŠçãå®è¡
UPDATE orders o
JOIN temp_orders t ON o.order_id = t.order_id
SET o.total_price = t.total_price * 1.1; -- 10%å€äžã
ã¡ãªãã
- åŠç察象ããŒã¿ãäžæããŒãã«ã«ä¿åããå®å šã«æŽæ°å¯èœ
- æŽæ°åŸã®ããŒã¿ãã§ãã¯ã容æ
5-4. ãŠãŒã¶ãŒããšã®äžæããŒã¿ç®¡ç
åé¡ç¹
äžæçãªãŠãŒã¶ãŒããŒã¿ãã»ãã·ã§ã³ããšã«ç®¡çããå¿ èŠãããå Žåãéåžžã®ããŒãã«ã§ã¯äžèŠãªããŒã¿ãæºãŸããããã
解決ç
äžæããŒãã«ã䜿ãã°ãã»ãã·ã§ã³ãçµäºãããšããŒã¿ãèªååé€ããããããã¡ã³ããã³ã¹ã®æéãäžèŠã
äŸïŒæ€çŽ¢æ¡ä»¶ãäžæããŒãã«ã«ä¿å
-- ãŠãŒã¶ãŒããšã®æ€çŽ¢çµæãäžæããŒãã«ã«ä¿å
CREATE TEMPORARY TABLE temp_search_results AS
SELECT * FROM products WHERE category = 'electronics';
-- æ€çŽ¢çµæã衚瀺
SELECT * FROM temp_search_results;
ã¡ãªãã
- ã»ãã·ã§ã³ãçµäºããã°ããŒã¿ãèªååé€
- äžæçãªæ€çŽ¢çµæãä¿åããç¹°ãè¿ãå©çšå¯èœ
5-5. äžæããŒãã«ãšãã¥ãŒã®äœ¿ãåã
åé¡ç¹
é »ç¹ã«å®è¡ããã¯ãšãªã®ããã©ãŒãã³ã¹ãæé©åãããããäžæçãªããŒã¿ãä¿æãããå Žåããã¥ãŒïŒVIEW
ïŒãšã©ã¡ãã䜿ãã¹ããè¿·ãã
解決ç
- ããŒã¿ãå€åããªãå Žå â ãã¥ãŒïŒVIEWïŒã䜿çš
- ããŒã¿ãé »ç¹ã«å€ããå Žå â äžæããŒãã«ã䜿çš
äŸïŒäžæããŒãã«ã䜿ã£ãã±ãŒã¹
CREATE TEMPORARY TABLE temp_high_value_customers AS
SELECT customer_id, SUM(total_price) AS total_spent
FROM orders
GROUP BY customer_id
HAVING total_spent > 50000;
SELECT * FROM temp_high_value_customers;
äŸïŒãã¥ãŒã䜿ã£ãã±ãŒã¹
CREATE VIEW high_value_customers AS
SELECT customer_id, SUM(total_price) AS total_spent
FROM orders
GROUP BY customer_id
HAVING total_spent > 50000;
ã¡ãªãã
- äžæããŒãã«ã¯ããŒã¿ãæ ŒçŽãããããããã©ãŒãã³ã¹åäž
- ãã¥ãŒã¯ã¯ãšãªã®åå©çšã«äŸ¿å©ã ããããŒã¿éãå€ãå Žåã¯ããã©ãŒãã³ã¹ãäœäžããå¯èœæ§ãã
ãŸãšã
ä»åã¯ãMySQLã®äžæããŒãã«ã®æŽ»çšäŸã5ã€ç޹ä»ããŸããã
â ãããã
- ã¯ãšãªã®ããã©ãŒãã³ã¹æé©åïŒJOINã®è² è·è»œæžïŒ
â JOINããåã«å¿ èŠãªããŒã¿ã ããäžæããŒãã«ã«ä¿å - äžæçãªããŒã¿ã®éèšåŠç
â äœåºŠãåãèšç®ãããªããããäžæããŒãã«ã«éèšçµæãä¿å - ãããåŠçã®äžéããŒã¿ä¿å
â 倧éã®ããŒã¿æŽæ°æã«ãäžæããŒãã«ã§å®å šã«åŠç - ãŠãŒã¶ãŒããšã®äžæããŒã¿ç®¡ç
â äžæããŒãã«ãªãã»ãã·ã§ã³çµäºæã«èªååé€ãããäžèŠãªããŒã¿ãæ®ããªã - äžæããŒãã«ãšãã¥ãŒã®äœ¿ãåã
â ããŒã¿ãå€ãããªãäžæããŒãã«ãå€ãããªããªããã¥ãŒãå©çš
6. MySQLã®äžæããŒãã«ãå®å šã«äœ¿ãããã®3ã€ã®æ³šæç¹
ã¯ããã«
MySQLã®äžæããŒãã«ïŒTemporary TableïŒã¯ãã»ãã·ã§ã³ããšã«ç¬ç«ããŠåäœããäžå®ã®æ¡ä»¶äžã§èªåçã«åé€ããã䟿å©ãªæ©èœ ã§ããããããäœ¿ãæ¹ã誀ããšãããŒã¿ããŒã¹ã®ããã©ãŒãã³ã¹äœäžãäºæããªããšã©ãŒã«ã€ãªããããšããããŸãã
æ¬èšäºã§ã¯ãäžæããŒãã«ãå®å šã«äœ¿ãããã«æ°ãã€ããã¹ã 3ã€ã®æ³šæç¹ ã«ã€ããŠè§£èª¬ããŸãã
6-1. 泚æç¹â ã»ãã·ã§ã³çµäºæã®èªååé€ã«äŸåããããªã
åé¡ç¹
MySQLã®äžæããŒãã«ã¯ ã»ãã·ã§ã³ãçµäºãããšèªåçã«åé€ ãããŸãããã®ãããæç€ºçã«åé€ããªããŠãåé¡ãªãããã«æãããã¡ã§ãããå Žåã«ãã£ãŠã¯æå³ããªããã©ãã«ãæãå¯èœæ§ããããŸãã
ãã©ãã«ã®äŸ
- æ¥ç¶ãé·æéç¶ããšã¡ã¢ãªãæ¶è²»ãç¶ãã
- ã»ãã·ã§ã³ãéãã£ã±ãªãã®å ŽåãäžæããŒãã«ã¯åé€ããããããŒã¿ããŒã¹ã®ãªãœãŒã¹ãæ¶è²»ãç¶ããã
- æç€ºçã«åé€ããªããšãããã°ã©ã ã®èšèšãã¹ãåŒãèµ·ãã
- ãããåŠçã®éäžã§äºæããªã忥ç¶ãçºçãããšãäžæããŒãã«ãæ¶ããŠãšã©ãŒã«ãªãã
解決ç
- äžèŠã«ãªã£ãäžæããŒãã«ã¯
DROP TEMPORARY TABLE
ã§æç€ºçã«åé€ - ãããåŠçãªã©é·æéæ¥ç¶ãç¶ãã±ãŒã¹ã§ã¯ã宿çã«äžæããŒãã«ãåé€
äŸïŒæç€ºçã«äžæããŒãã«ãåé€
DROP TEMPORARY TABLE IF EXISTS temp_users;
ãã€ã³ã
IF EXISTS
ãã€ããããšã§ãããŒãã«ãååšããªãå Žåã§ããšã©ãŒãé²ããã
6-2. 泚æç¹â¡ éåžžã®ããŒãã«ãšååãç«¶åããå¯èœæ§
åé¡ç¹
äžæããŒãã«ã¯ãéåžžã®ããŒãã«ãšåãååã§äœæããããšãã§ããŸããããããäžæããŒãã«ãäœæãããšãååã®éåžžã®ããŒãã«ãäžæçã«èŠããªããªã ãšããåé¡ãçºçããŸãã
ãã©ãã«ã®äŸ
-- éåžžã® users ããŒãã«ãååšãã
SELECT * FROM users;
-- åãååã®äžæããŒãã«ãäœæ
CREATE TEMPORARY TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50)
);
-- ããã§å®è¡ãããšãéåžžã®ããŒãã«ã§ã¯ãªããäžæããŒãã«ã®ããŒã¿ãååŸããã
SELECT * FROM users;
ãã®ããã«ãäžæããŒãã«ãååšããéã¯ãåãååã®éåžžã®ããŒãã«ãèŠããªããªã ãããäºæããªãããŒã¿ã®ååŸãã¹ãçºçããå¯èœæ§ããããŸãã
解決ç
- äžæããŒãã«ã®ååã«ã¯ãtemp_ããªã©ã®ãã¬ãã£ãã¯ã¹ãã€ãã
- éåžžã®ããŒãã«ãšäžæããŒãã«ãåºå¥ããããåœåèŠåãæ¡çšãã
äŸïŒå®å šãªäžæããŒãã«ã®äœæ
CREATE TEMPORARY TABLE temp_users (
id INT PRIMARY KEY,
name VARCHAR(50)
);
ã¡ãªãã
temp_
ãã€ããããšã§ãéåžžã®users
ããŒãã«ãšã®ç«¶åãé²ããã- ããã°ã©ã å ã§æç¢ºã«åºå¥ãããããªãã
6-3. 泚æç¹â¢ ã€ã³ããã¯ã¹ãå¶çŽãèªåã§åŒãç¶ãããªã
åé¡ç¹
CREATE TEMPORARY TABLE ... AS SELECT ...
ã§ããŒãã«ãäœæããå Žåãå
ã®ããŒãã«ã®ã€ã³ããã¯ã¹ãå¶çŽãåŒãç¶ãããªã ãããããã©ãŒãã³ã¹ãäœäžããå¯èœæ§ããããŸãã
ãã©ãã«ã®äŸ
-- éåžžã® users ããŒãã«ïŒã€ã³ããã¯ã¹ããïŒ
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(100) UNIQUE,
name VARCHAR(50)
);
-- äžæããŒãã«ãäœæïŒãã®æãã€ã³ããã¯ã¹ã¯åŒãç¶ãããªãïŒ
CREATE TEMPORARY TABLE temp_users AS
SELECT id, email, name FROM users;
ãã®å Žåãtemp_users
ã«ã¯ PRIMARY KEY
ã UNIQUE
å¶çŽãåŒãç¶ãããªã ãããæ€çŽ¢é床ãäœäžããããŒã¿ã®éè€ãçºçãããããªããŸãã
解決ç
- äžæããŒãã«äœæåŸã«æç€ºçã«ã€ã³ããã¯ã¹ã远å
CREATE TEMPORARY TABLE
ã§çŽæ¥ã«ã©ã ãå®çŸ©ããå Žåã¯ãäºåã«ã€ã³ããã¯ã¹ãæå®
äŸïŒæåã§ã€ã³ããã¯ã¹ã远å
CREATE TEMPORARY TABLE temp_users (
id INT PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(100) UNIQUE,
name VARCHAR(50)
);
ALTER TABLE temp_users ADD INDEX idx_email (email);
ãã®æ¹æ³ã䜿ãããšã§ãå ã®ããŒãã«ãšåæ§ã®ã€ã³ããã¯ã¹ãæã€äžæããŒãã«ãäœæå¯èœ ã§ãã
ãŸãšã
ä»åã¯ãäžæããŒãã«ãå®å šã«äœ¿ãããã®3ã€ã®æ³šæç¹ã解説ããŸããã
â ãããã
- ã»ãã·ã§ã³çµäºæã®èªååé€ã«äŸåããããªã
- äžèŠã«ãªã£ãäžæããŒãã«ã¯
DROP TEMPORARY TABLE
ã§æç€ºçã«åé€ - 鷿鿥ç¶ãç¶ãå Žåã¯ã宿çã«åé€ãã
- éåžžã®ããŒãã«ãšååãç«¶åããå¯èœæ§
- ååã®éåžžã®ããŒãã«ããããšãäžæããŒãã«ãåªå ãããŠããŸã
temp_
ãªã©ã®ãã¬ãã£ãã¯ã¹ãã€ããŠæç¢ºã«åºå¥ãã
- ã€ã³ããã¯ã¹ãå¶çŽãèªåã§åŒãç¶ãããªã
CREATE TEMPORARY TABLE ... AS SELECT ...
ã§ã¯ãã€ã³ããã¯ã¹ãæ¶ãã- äœæåŸã«æåã§ã€ã³ããã¯ã¹ã远å ãã
ãããã®ãã€ã³ããæŒãããŠããããšã§ãMySQLã®äžæããŒãã«ãå®å šã«æŽ»çšããªãããããŒã¿ããŒã¹ã®ããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãïŒ
7. MySQLã®äžæããŒãã«ã«é¢ãããããã質å10éžïŒFAQïŒ
ã¯ããã«
MySQLã®äžæããŒãã«ïŒTemporary TableïŒã«ã€ããŠãå®éã®éçšã®äžã§ããããçåã 10åã®FAQåœ¢åŒ ã§è§£èª¬ããŸãã
åäœã®ä»çµã¿ãå¶çŽãããã©ãŒãã³ã¹ã®åé¡ããã©ãã«ã·ã¥ãŒãã£ã³ã° ãŸã§ãå¹
åºã質åã«çããŠãããŸãã
7-1. åºæ¬çãªä»æ§ã«é¢ãã質å
Q1. äžæããŒãã«ã¯ä»ã®ã»ãã·ã§ã³ããåç §ã§ããŸããïŒ
A. ããããåç
§ã§ããŸããã
äžæããŒãã«ã¯äœæããã»ãã·ã§ã³å
ã®ã¿ã§æå¹ ã§ãããä»ã®ã»ãã·ã§ã³ããã¯ã¢ã¯ã»ã¹ã§ããŸããã
-- ã»ãã·ã§ã³Aã§äœæ
CREATE TEMPORARY TABLE temp_users (
id INT PRIMARY KEY,
name VARCHAR(50)
);
-- ã»ãã·ã§ã³Bã§ã¢ã¯ã»ã¹ã詊ã¿ãïŒãšã©ãŒã«ãªãïŒ
SELECT * FROM temp_users;
ãšã©ãŒ:
ERROR 1146 (42S02): Table 'temp_users' doesn't exist
解決çãšããŠãä»ã®ã»ãã·ã§ã³ãããããŒã¿ãå ±æãããå Žåã¯ãéåžžã®ããŒãã«ãäœ¿çš ããå¿ èŠããããŸãã
Q2. äžæããŒãã«ã¯ãã£ã¹ã¯ã«ä¿åãããŸããïŒ
A. äžè¬çã«ã¯ã¡ã¢ãªã«ä¿åãããŸãããæ¡ä»¶ã«ãã£ãŠãã£ã¹ã¯ã«ç§»åããããšããããŸãã
MySQLã® tmp_table_size
ãŸã㯠max_heap_table_size
ãè¶
ãããšããã£ã¹ã¯äžã® InnoDB
ã MyISAM
圢åŒã§äžæããŒãã«ãäœæãããããšããããŸãã
SHOW VARIABLES LIKE 'tmp_table_size';
ããã©ãŒãã³ã¹ãåäžãããããã«ã¯ãtmp_table_size
ãé©åã«èšå®ããããšãéèŠã§ãã
Q3. äžæããŒãã«ã«ã€ã³ããã¯ã¹ãèšå®ã§ããŸããïŒ
A. ã¯ããèšå®ã§ããŸãã
éåžžã®ããŒãã«ãšåãããã« PRIMARY KEY
ã INDEX
ãèšå®ã§ããŸãã
CREATE TEMPORARY TABLE temp_users (
id INT PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(100) UNIQUE,
name VARCHAR(50)
);
ALTER TABLE temp_users ADD INDEX idx_email (email);
ãã ããCREATE TEMPORARY TABLE ... AS SELECT ...
ã䜿ãå Žåãã€ã³ããã¯ã¹ã¯åŒãç¶ãããŸãã ã®ã§ãæåã§è¿œå ããå¿
èŠããããŸãã
7-2. ããã©ãŒãã³ã¹ã»åäœã«é¢ãã質å
Q4. MySQL 8.0ã§ã®äžæããŒãã«ã®ä»æ§å€æŽã¯ãããŸããïŒ
A. MySQL 8.0ã§ã¯ WITH
å¥ã䜿ã£ãCommon Table ExpressionsïŒCTEïŒãç»å ŽããŸããã
MySQL 8.0 以éã§ã¯ãäžæããŒãã«ã䜿ããªããŠã WITH
å¥ã䜿ã£ãŠäžæçãªããŒã¿ãåŠçã§ããŸãã
WITH temp_users AS (
SELECT id, name FROM users WHERE status = 'active'
)
SELECT * FROM temp_users;
äžæããŒãã«ã®ä»£ãããšããŠCTEã䜿ãããšã§ãã¯ãšãªã®ç°¡çŽ åãã¡ã¢ãªã®ç¯çŽãå¯èœã§ãã
Q5. MySQLã® MEMORY
ããŒãã«ãšã®éãã¯ïŒ
A. MEMORY
ããŒãã«ã¯ãã»ãã·ã§ã³ãè¶
ããŠãããŒã¿ãä¿æãããã®ãéãã§ãã
äžæããŒãã«ã¯ã»ãã·ã§ã³ãçµäºãããšåé€ãããŸãããMEMORY
ããŒãã«ã¯ãµãŒããŒãåèµ·åãããŸã§ããŒã¿ãä¿æãããŸãã
CREATE TABLE memory_table (
id INT PRIMARY KEY,
name VARCHAR(50)
) ENGINE=MEMORY;
䜿ãåãã®ãã€ã³ã
- çæéã®ããŒã¿åŠçã«ã¯äžæããŒãã«
- é«éã¢ã¯ã»ã¹ãå¿ èŠãªå Žåã¯MEMORYããŒãã«
7-3. åé€ã»ãã©ãã«ã·ã¥ãŒãã£ã³ã°ã«é¢ãã質å
Q6. DROP TABLE
ã§äžæããŒãã«ãåé€ã§ããŸããïŒ
A. ããããDROP TEMPORARY TABLE
ã䜿ãå¿
èŠããããŸãã
äžæããŒãã«ãåé€ããéã¯ãå¿
ã DROP TEMPORARY TABLE
ãäœ¿çš ããŠãã ããã
DROP TEMPORARY TABLE temp_users;
éåžžã® DROP TABLE
ã䜿çšãããšãšã©ãŒã«ãªãããšããããŸãã
Q7. SHOW TABLES
ã«äžæããŒãã«ã衚瀺ãããªãã®ã¯ãªãïŒ
A. SHOW TABLES
ã§ã¯äžæããŒãã«ã¯è¡šç€ºãããŸããã
äžæããŒãã«ã確èªããã«ã¯ãINFORMATION_SCHEMA
ã䜿çšããŸãã
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'temp_users';
ãã INFORMATION_SCHEMA.TABLES
ã§ããŒãã«ã衚瀺ãããªããã°ããã§ã«åé€ãããŠããå¯èœæ§ ããããŸãã
ãŸãšã
ä»åã¯ãMySQLã®äžæããŒãã«ã«é¢ãã ãããã質å10éž ã玹ä»ããŸããã
â ãããã
- äžæããŒãã«ã¯ä»ã®ã»ãã·ã§ã³ããåç §äžå¯
- ã¡ã¢ãªäžã«äœæããããã倧ãããªããšãã£ã¹ã¯ã«ç§»å
- ã€ã³ããã¯ã¹ã¯æåã§èšå®ãå¿ èŠ
- MySQL 8.0以éã§ã¯CTEïŒ
WITH
å¥ïŒã掻çšå¯èœ - MEMORYããŒãã«ãšã¯ç°ãªããã»ãã·ã§ã³ãçµãããšæ¶ãã
DROP TEMPORARY TABLE
ã§åé€ãå¿ èŠSHOW TABLES
ã§ã¯äžæããŒãã«ã¯ç¢ºèªã§ããªã
8. ããŸãšããMySQLã®äžæããŒãã«ã®æŽ»çšãã€ã³ã
ã¯ããã«
MySQLã®äžæããŒãã«ïŒTemporary TableïŒã¯ãäžæçãªããŒã¿ãä¿åããã¯ãšãªã®ããã©ãŒãã³ã¹ãæé©åããããã®åŒ·åãªããŒã« ã§ãã
ãããŸã§ã®è§£èª¬ãç·æ¬ããäžæããŒãã«ã掻çšããããã®éèŠãªãã€ã³ããæŽçããŸãã
8-1. MySQLã®äžæããŒãã«ã®åºæ¬æŠå¿µ
äžæããŒãã«ãšã¯ïŒ
- ã»ãã·ã§ã³ããšã«ç¬ç«ããŠååšããããŒãã«
- ã»ãã·ã§ã³ãçµäºãããšèªåçã«åé€
- éåžžã®ããŒãã«ãšåãããã«
INSERT
,UPDATE
,DELETE
ãå¯èœ
åºæ¬çãªäœææ¹æ³
CREATE TEMPORARY TABLE temp_users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
email VARCHAR(100)
);
äž»ãªçšé
- äžæçãªããŒã¿æ ŒçŽ
- ã¯ãšãªã®ããã©ãŒãã³ã¹åäž
- ãããåŠçã®äžéããŒãã«
- ãŠãŒã¶ãŒããšã®äžæããŒã¿ç®¡ç
8-2. äžæããŒãã«ã®ã¡ãªãã
â ã¯ãšãªã®ããã©ãŒãã³ã¹åäž
- JOINã®è² è·ã軜æžã§ãã
- éèšåŠçãäºåã«è¡ãããšã§äžèŠãªèšç®ãæžããã
- äžèŠãªããŒã¿ãçããããã·ã³ãã«ãªã¯ãšãªãå¯èœ
äŸïŒJOINã®è² è·è»œæž
CREATE TEMPORARY TABLE temp_active_users AS
SELECT id, name FROM users WHERE status = 'active';
SELECT o.order_id, t.name, o.total_price
FROM orders o
JOIN temp_active_users t ON o.customer_id = t.id;
â¡ ããŒã¿ã®äžæä¿åãšã»ãã·ã§ã³ç®¡ç
- ã»ãã·ã§ã³ãçµäºãããšèªååé€
- é·æéã®ä¿åã¯äžèŠãªããŒã¿ã«æé©
- ãã©ã³ã¶ã¯ã·ã§ã³ã®åœ±é¿ãåãããç¬ç«ããããŒã¿æäœãå¯èœ
äŸïŒæ€çŽ¢çµæã®äžæä¿å
CREATE TEMPORARY TABLE temp_search_results AS
SELECT * FROM products WHERE category = 'electronics';
SELECT * FROM temp_search_results;
⢠å®å šãªããŒã¿æŽæ°
- ãããåŠçã®äžéããŒãã«ãšããŠäœ¿çšå¯èœ
- ããŒã¿æŽæ°æã®ããã¯ã¢ãããšããŠãå©çšã§ãã
- ãã¹ãããŒã¿ã®äœæã«ãæå¹
äŸïŒå®å šãªããŒã¿æŽæ°
CREATE TEMPORARY TABLE temp_orders AS
SELECT order_id, total_price FROM orders WHERE status = 'pending';
UPDATE orders o
JOIN temp_orders t ON o.order_id = t.order_id
SET o.total_price = t.total_price * 1.1;
8-3. äžæããŒãã«ã®ãã¡ãªãããšæ³šæç¹
â ã»ãã·ã§ã³ãçµäºãããšããŒã¿ãæ¶ãã
- æ°žç¶çãªããŒã¿ä¿åã«ã¯åããªã
- ã»ãã·ã§ã³ãåãããšããŒã¿ã倱ããããããé·æä¿åã«ã¯éåžžã®ããŒãã«ã䜿çš
â¡ ä»ã®ã»ãã·ã§ã³ãšå ±æã§ããªã
- å¥ã®æ¥ç¶ïŒã»ãã·ã§ã³ïŒããã¯ã¢ã¯ã»ã¹ã§ããªã
- è€æ°ã®ãŠãŒã¶ãŒã§ããŒã¿ãå ±æããå Žåã¯éåžžã®ããŒãã«ã䜿çšãã
⢠ã€ã³ããã¯ã¹ãå¶çŽãèªåã§åŒãç¶ãããªã
CREATE TEMPORARY TABLE ... AS SELECT ...
ã§ã¯ã€ã³ããã¯ã¹ãäœæãããªã- æåã§ã€ã³ããã¯ã¹ã远å ããå¿ èŠããã
ALTER TABLE temp_users ADD INDEX idx_email (email);
8-4. äžæããŒãã«ãå®å šã«äœ¿ãããã®ãã€ã³ã
â äžèŠã«ãªã£ããæç€ºçã«åé€
DROP TEMPORARY TABLE IF EXISTS temp_users;
â éåžžã®ããŒãã«ãšååãç«¶åããªãããã«ãã
temp_
ãã¬ãã£ãã¯ã¹ãã€ãã
CREATE TEMPORARY TABLE temp_users (...);
â ããã©ãŒãã³ã¹ãèæ ®ããèšèš
- ãµã€ãºã倧ãããªããšãã£ã¹ã¯ã«ç§»åããå¯èœæ§ãããããã
tmp_table_size
ã®èª¿æŽãæ€èš
SHOW VARIABLES LIKE 'tmp_table_size';
8-5. äžæããŒãã« vs. ä»£æ¿ææ®µïŒãã¥ãŒã»CTEïŒ
äžæããŒãã«ãš ãã¥ãŒïŒVIEWïŒãCTEïŒCommon Table ExpressionsïŒ ã®äœ¿ãåããèããããšãéèŠã§ãã
ææ³ | ç¹åŸŽ | 䜿ãã¹ãã±ãŒã¹ |
---|---|---|
äžæããŒãã« | ã»ãã·ã§ã³çµäºæã«åé€ããã | äžæçãªããŒã¿ãä¿åãããå Žå |
ãã¥ãŒïŒVIEWïŒ | ããŒã¿ã¯ãªã¢ã«ã¿ã€ã ã§ååŸãããããããã©ãŒãã³ã¹ãäœäžããå¯èœæ§ãã | é »ç¹ã«åç §ããã¯ãšãªãä¿å |
CTEïŒWITHå¥ïŒ | ã¯ãšãªå ã§ã®ã¿æå¹ãªä»®æ³ããŒãã« | äžæããŒãã«ãäœæããã«äžæçãªããŒã¿ãæ±ãããå Žå |
ãŸãšã
ä»åã¯ãMySQLã®äžæããŒãã«ã®æŽ»çšãã€ã³ããç·ãŸãšãããŸããã
â ãããã
- MySQLã®äžæããŒãã«ã¯ãã»ãã·ã§ã³ãçµäºãããšèªåçã«åé€
- ããã©ãŒãã³ã¹æé©åã«åœ¹ç«ã¡ãJOINãéèšåŠçã®è² è·ã軜æžã§ãã
- ãããåŠçã®äžéããŒã¿ä¿åãæ€çŽ¢çµæã®äžæä¿åããã¹ãããŒã¿äœæã«æŽ»çšã§ãã
- ãã ããä»ã®ã»ãã·ã§ã³ãšå ±æã§ãããã€ã³ããã¯ã¹ã¯æåã§è¿œå ããå¿ èŠããã
- ãã¥ãŒïŒVIEWïŒãCTEïŒWITHå¥ïŒãšäœ¿ãåããããšã§ãããæè»ãªããŒã¿ç®¡çãå¯èœ
ããã§ãMySQLã®äžæããŒãã«ã«é¢ããèšäºã®å
šã»ã¯ã·ã§ã³ãå®äºããŸããïŒ ð
ãã®èšäºãåèã«ãMySQLã®äžæããŒãã«ã广çã«æŽ»çšããŠãã ããã