
ãæ¬¡äžä»£é«éRDBå"Tsurugi"ãDDL/DML ã®åæå®è¡å¶åŸ¡
Tsurugi ã¯ã¡ããŒã³ã¢ããŒããŠã§ã¢ãæå€§éã«æŽ»çšããããšãèšèšç®æšãšããOLTPããŒã¿ããŒã¹ã§ããSQLã§ããŒã¿æäœãè¡ã DML (data manipulation language) éã®åæå®è¡å¶åŸ¡ã¯ãã®äžæ žæ©èœã§ãããããŒã¿å®çŸ©ãè¡ã DDL (data definition language) ãš DML éã®æä»å¶åŸ¡ã¯ããŸãåãäžããããããšããããŸãããæ¬çš¿ã§ã¯ãDDL ãš DML ãåäžããŒã¿ããŒã¹ã«å¯ŸããŠäžŠè¡ããŠçºè¡ãããå Žåã«ãTsurugi ãã©ã®ãããªæä»å¶åŸ¡ãè¡ããã«ã€ããŠè§£èª¬ããŸãã
察象ãšããæäœç¯å²
Tsurugi ã«ãããŠãæ¬å¶åŸ¡ã®å¯Ÿè±¡ãšãªã DDL ã¯Â CREATE TABLE , DROP TABLE , CREATE INDEX , DROP INDEX ã«å ããGRANT , REVOKE ãªã©ã®ã¢ã¯ã»ã¹å¶åŸ¡ç³»æãå«ã¿ãŸãã
DML ã¯Â SELECT , INSERT , UPDATE , DELETE ã察象ã§ãã
DDL ãš DML ã®æ§è³ªã®éã
DDL ã¯ããŒãã«ãã€ã³ããã¯ã¹ãšãã£ãã¡ã¿ããŒã¿ã®è¿œå ã»å€æŽã»åé€ãè¡ãæäœã§ãããDML ã®ããã«ããŒã¿ãã®ãã®ãæ±ããã®ã§ã¯ãããŸãããå®è¡é »åºŠã䜿çšãã¿ãŒã³ã倧ããç°ãªããŸããDML ã¯ã¢ããªã±ãŒã·ã§ã³ã®éåžžåŠçã®äžã§é »ç¹ã«çºè¡ãããã®ã«å¯ŸããDDL ã¯ã¹ããŒã倿Žãã¡ã³ããã³ã¹äœæ¥ãšããŠäœé »åºŠãã€èšç»çã«å®è¡ãããã®ãäžè¬çã§ãã
ãã®æ§è³ªã®éããããTsurugi ã§ã¯ DDL ãš DML ãç«¶åãããããªç¶æ³ã«ãããŠãæä»å¶åŸ¡ãé§äœ¿ããŠäž¡æ¹ãæåãããããšã¯æ³å®ããŠããŸãããäž¡è ãåäžããŒãã«ã«å¯ŸããŠéãªãå®è¡åºéãæã€ããšãæ€åºããå Žåã¯ãåŸããæ¥ãåŽã«ãšã©ãŒãè¿ãããšãåºæ¬æ¹éãšããŠããŸãã
ãŸããDDL ã¯ãã©ã³ã¶ã¯ã·ã§ã³ãçšããŠçºè¡ãããŸããããã©ã³ã¶ã¯ã·ã§ãã«ãªæäœã§ã¯ãªãããã©ã³ã¶ã¯ã·ã§ã³ã®ã¢ããŒãæã«ããŒã«ããã¯å¯Ÿè±¡ã«ã¯ãªããŸãããDDL ãå®è¡ãããã©ã³ã¶ã¯ã·ã§ã³ã¯ãã®å®äºãŸã§å¯Ÿè±¡ããŒãã«ãæä»çã«åãæ±ãå¿ èŠãçããããã察象ããŒãã«ãžã® DML ã¯æåãããšã©ãŒã«ãªããŸããDDL ãå«ããã©ã³ã¶ã¯ã·ã§ã³ã¯ãçºè¡åŸéããã«ã³ãããããããšãæšå¥šãããŸãã
æä»å¶åŸ¡ãªãã«çãããåé¡
DDL ãš DML ãåäžããŒãã«ã«å¯ŸããŠåæã«çºè¡ãããå Žåããã Tsurugi ãé©åãªå¶åŸ¡ãè¡ããªããšæ¬¡ã®ãããªåé¡ãçãããŸãã
DROP TABLE ã®å®è¡äžãŸãã¯å®è¡åŸããã®ãã©ã³ã¶ã¯ã·ã§ã³ã®ã³ãããåã«ãå¥ãã©ã³ã¶ã¯ã·ã§ã³ãåãããŒãã«ã« INSERT ããããšããã
INSERT ãªã©ã® DML ã¹ããŒãã¡ã³ãã®å®è¡å®äºåŸããã®ãã©ã³ã¶ã¯ã·ã§ã³ã®ã³ãããåã«ãå¥ãã©ã³ã¶ã¯ã·ã§ã³ãåãããŒãã«ã DROP TABLE ããããšããã
ãããã®ç¶æ³ã«ãããŠããã¡ã¿ããŒã¿ãåé€ãããããšããŠããé åäžã§ INSERT åŠçãã³ãããæ€èšŒåŠçãå®è¡ãããããšã§äžæ£ãªã¡ã¢ãªé åã®ã¢ã¯ã»ã¹ãšãªãå¯èœæ§ããããŸããå®è¡äžã® DDL ãš DML ãéãªãåé¡ã«ã¯ããŒãã«éå¡ïŒDDL ãš DML ã®å®è¡åºéãæä»ããä»çµã¿ïŒã§å¯ŸåŠããŸããDML ã®ã¹ããŒãã¡ã³ãå®äºåŸãããã®ãã©ã³ã¶ã¯ã·ã§ã³ãå éšçã«ããŒãã«ã®å®äœãåç §ãç¶ããåé¡ã«ã¯ãã¹ãã¬ãŒãžé å»¶åé€ïŒDML ã䜿çšäžã®ã¹ãã¬ãŒãžã DDL ãåé€ããªãããã«ããä»çµã¿ïŒã§å¯ŸåŠããŸãã
ããŒãã«éå¡
Tsurugi ã§ã¯ããŒãã«ã«å¯Ÿããã¢ã¯ã»ã¹ãéå¡ããããšã«ãã£ãŠ DDL ãš DML ã®å®è¡åºéãæä»å¶åŸ¡ããŸãã
ãããããŒãã«éå¡ãšåŒã³ãŸãïŒTsurugi ã®ç¬èªæ©æ§ã§ãïŒã
ããŒãã«éå¡ã¯ãããŒãã«ã«ã¢ã¯ã»ã¹ããã¹ããŒãã¡ã³ãããã©ã³ã¶ã¯ã·ã§ã³ãå
±æããã¯ã»æä»ããã¯ãååŸãããããªãµããŸããšããŠèгå¯ãããŸããéå¡ã®çš®å¥ãšä¿ææéã¯æ¬¡ã®éãã§ãã

ç«¶åã®èãæ¹
å ±æããã¯å士ã¯ç«¶åããªã : è€æ° DML ãåãããŒãã«ã察象ãšããå Žåã¯äºãã«ãããã¯ããªã
æä»ããã¯ã¯å ±æããã¯ãšç«¶åãã : DDL å®è¡äžã¯ã察象ããŒãã«ãžã®æ°èŠ DML ã®éå§ã黿¢ãã
å ±æããã¯ã¯æä»ããã¯ãšç«¶åãã : DML å®è¡äžã¯ã察象ããŒãã«ãžã® DDL ã®éå§ã黿¢ãã
ãã®ä»çµã¿ã«ãããå±éºãªæäœã®çµã¿åãããå®è¡åºéãšããŠéãªãããšãé²ããŸãã
åäœäŸ
ã±ãŒã¹1ïŒDDL å®è¡äžã« DML ãéå§ããããšããå Žå
TX-A ã CREATE TABLE ãå®è¡ããŠã³ãããããŠããªãç¶æ ã§ãTX-B ãåãããŒãã«ã« SELECT ãçºè¡ããŸãã
[ã»ãã·ã§ã³ A]
tgsql> BEGIN TRANSACTION;
transaction started.
tgsql> CREATE TABLE products (id INT PRIMARY KEY, name VARCHAR(100));
execute succeeded
ïŒã³ãããããã«ä¿çäžïŒ[ã»ãã·ã§ã³ B]
tgsql> SELECT * FROM products;
[id: INT, name: VARCHAR(100)]
SQL_EXECUTION_EXCEPTION (SQL-02000: DML operation was blocked by DDL operation)TX-A ã®ãã©ã³ã¶ã¯ã·ã§ã³ãã³ããããŸãã¯ã¢ããŒããããŸã§ãTX-B ã¯ãã®ããŒãã«ã«ã¢ã¯ã»ã¹ã§ããŸããã
ã±ãŒã¹2ïŒDML å®è¡äžã« DDL ãéå§ããããšããå Žå
ã»ãã·ã§ã³ A ãš B ãã»ãŒåæã«å®è¡ããŸããTX-A ã DML ã¹ããŒãã¡ã³ããå®è¡ããŠããæäžã« TX-B ãåãããŒãã«ã« DROP TABLE ãçºè¡ãããšãããŒãã«éå¡ã®ç«¶åãæ€åºãã TX-B ã¯ãšã©ãŒãåãåããŸãã
次ã®äŸã§ã¯ãã»ãã·ã§ã³ A ã® INSERT ããŸã å®äºããŠããªãæç¹ã§ãã»ãã·ã§ã³ B ã DROP TABLE ãçºè¡ãããã®ãšããŸãã
[ã»ãã·ã§ã³ A]
tgsql> INSERT INTO orders VALUES (1, 'apple');
ïŒå®è¡äžïŒ[ã»ãã·ã§ã³ B]
tgsql> DROP TABLE orders;
SQL_EXECUTION_EXCEPTION (SQL-02000: DDL operation was blocked by other DML operation. table:"orders")TX-A ã® INSERT ã¹ããŒãã¡ã³ããå®äºããåŸã§ããã°ãTX-B ã¯æ¹ã㊠DROP TABLE ã詊ã¿ãããšãã§ããŸãã
ã±ãŒã¹3ïŒåäžãã©ã³ã¶ã¯ã·ã§ã³å ã§ DDL ã®åŸã« DML ãå®è¡ããå Žå
æä»ããã¯ã¯å ±æããã¯ããã匷ãå¶åŸ¡ã§ãããåäžãã©ã³ã¶ã¯ã·ã§ã³å ã® DML ã¯ãã®é äžãšããŠåäœããŸãã
tgsql> BEGIN TRANSACTION;
transaction started.
tgsql> CREATE TABLE products (id INT PRIMARY KEY, name VARCHAR(100));
execute succeeded
tgsql> INSERT INTO products VALUES (1, 'apple');
(1 row inserted)
tgsql> COMMIT;
transaction commit(DEFAULT) finished.ãã ãããã®ãã¿ãŒã³ã¯ãã¹ããéçºæã®ã»ããã¢ããã«ã¯æå¹ã§ãããæ¬çªã³ãŒãã§ã®äœ¿çšã¯æšå¥šããŸãããDDL ã¯ããŒã«ããã¯é察å¿ã§ããããããã©ã³ã¶ã¯ã·ã§ã³ãã¢ããŒãããå Žåã« DDL ã®å¹æã¯æ®ã£ããŸãŸ DML ã®ã¿ãåãæ¶ãããŸãããã®æåãæ£ããæ±ãã«ã¯äŸå€åŠçãè€éåãããããDDL ãš DML ã¯å¥ã ã®ãã©ã³ã¶ã¯ã·ã§ã³ã§å®è¡ããããšãæšå¥šããŸãã
ç«¶åæã¯åŸ æ©ããªã
ããŒãã«éå¡ãç«¶åããå ŽåãTsurugi ã¯åŸ æ©ããã«ãšã©ãŒãè¿ããŸãã
ãã®èšèšã«ã¯æ¬¡ã®ãããªæå³ããããŸãã
ãããããã¯ã®ãªã¹ã¯ãé¿ããïŒåŸ æ©ããèšèšã§ã¯ãã©ã³ã¶ã¯ã·ã§ã³å士ãäºãã«åŸ ã¡ç¶ãããããããã¯ãçããã
äºæž¬å¯èœãªåäœïŒã¢ããªã±ãŒã·ã§ã³åŽããšã©ãŒãåãåãããªãã©ã€ãªã©ã®å¶åŸ¡ãæç€ºçã«è¡ãã
ãã ããå©äŸ¿æ§ã®ããã«å°æ¥çã«ã¯éå®çãªåŸ æ©æ©èœãæ€èšããå¯èœæ§ããããŸãã
éå¡ã®ç²åºŠ
Tsurugi ã®ããŒãã«éå¡ã¯ããŒãã«åäœã§ããå ±éã®ããŒãã«ãæããªãæäœå士ã¯äºãã«åœ±é¿ããŸããã
TX-A: INSERT INTO orders ... â orders ããŒãã«ãéå¡äž
TX-B: DROP TABLE customers â customers ããŒãã«ãéå¡ããããšãã
â å¥ããŒãã«ãªã®ã§éå¡ã¯ç«¶åãããTX-B ã¯ãšã©ãŒãªãå®è¡ã§ããã¹ãã¬ãŒãžé å»¶åé€
ããŒãã«éå¡ã¯ãDDLïŒäŸãã° DROP TABLEïŒã®å®è¡éå§ããDML 䜿çšäžã¯é»æ¢ããããšããä¿è·ãæäŸããŸããããããä¿è·ãå¿ èŠãªå Žé¢ã¯ããã ãã§ã¯ãããŸããã
DML ã«ããããŒãã«éå¡ã¯ã¹ããŒãã¡ã³ãå®äºæã«è§£é€ãããŸãããã®ãããDML ã¹ããŒãã¡ã³ããå®äºããåŸã§ããã°ãåãããŒãã«ã«å¯Ÿãã DROP TABLE ãåãä»ããããå ŽåããããŸãã
äžæ¹ã§ãDROP TABLE ãåãä»ãããããããšãã£ãŠãããŒãã«ã®å®äœãããã«ç©çåé€ã§ãããšã¯éããŸãããDML ãå®è¡ãããã©ã³ã¶ã¯ã·ã§ã³ããŸã ã³ãããã»ã¢ããŒãã«è³ã£ãŠããªãå Žåããã©ã³ã¶ã¯ã·ã§ã³ãšã³ãžã³ïŒshirakamiïŒå éšã§ã¯ããã®ããŒãã«ã®å®äœãåç §ãç¶ããããšããããŸãããã®ç¶æ ã§ç©çåé€ããŠããŸããšå®å šã§ã¯ãããŸããã
ãã®åé¡ã«å¯Ÿå¿ãããããTsurugi 㯠DROP TABLE/INDEX ãåãä»ããéã«ã¹ãã¬ãŒãžã®ç©çåé€ãå³åº§ã«è¡ãããåç §ã«ãŠã³ã¿ã 0 ã«ãªããŸã§é å»¶ãããèšèšãæ¡çšããŠããŸãã
DROP DDL å®è¡æã®åäœ
å©çšè ããèŠããšãDROP TABLE åŸã¯ãã®ããŒãã«ã«æ°ããã¢ã¯ã»ã¹ã§ããªããªããŸãããã ãããã§ã«ãã®ããŒãã«ã䜿ã£ãŠãããã©ã³ã¶ã¯ã·ã§ã³ãæ®ã£ãŠããå Žåãå éšã®å®äœåé€ã¯ãã®ãã©ã³ã¶ã¯ã·ã§ã³ã®çµäºåŸãŸã§é ããŸãã
DROP TABLE ãçºè¡ããããšãTsurugi ã® SQL å®è¡ãšã³ãžã³ã¯æ¬¡ã®2段éã®åŠçãè¡ããŸãã
1. è«çåé€ïŒå³æïŒ
ã¹ãã¬ãŒãžãååæ€çŽ¢ã®ãããããé€å€ããæ°èŠ DML ããã¯ãã®ããŒãã«ãèŠããªããªã
ã¹ãã¬ãŒãžãšã³ããªã«åé€äºçŽãã©ã°ãèšå®ããæ°žç¶åãã
2. ç©çåé€ïŒé å»¶ïŒ
ã¹ãã¬ãŒãžãšã³ããªèªäœã¯ã¡ã¢ãªäžã«æ®ããåç §ã«ãŠã³ã¿ã®ç®¡ç察象ãšãªã
ç©çåé€ã¯ã¡ã³ããã³ã¹ã¹ã¬ãããåç §ã«ãŠã³ã¿ã 0 ã«ãªã£ãããšã確èªããŠããå®è¡ãã
DROP TABLE orders ãçºè¡ãããç¬éïŒ
orders ã¯ååæ€çŽ¢ããé€å€ãããïŒæ°èŠDMLã¯ã¢ã¯ã»ã¹äžå¯ïŒ
åé€äºçŽãã©ã°ãèšå®ããã
æ¢åã®ãã©ã³ã¶ã¯ã·ã§ã³ã¯ãŸã orders ã®ã¹ãã¬ãŒãžãåç
§äž
åç
§ã«ãŠã³ã¿ã 0 ã«ãªã£ãæç¹ïŒå
šãã©ã³ã¶ã¯ã·ã§ã³ãå®äºïŒïŒ
ã¡ã³ããã³ã¹ã¹ã¬ãããã¹ãã¬ãŒãžåé€APIãå®è¡
ã¹ãã¬ãŒãžãç©ççã«åé€ããããŸãšã
Tsurugi ã® DDL/DML åæå®è¡å¶åŸ¡ã¯ã2ã€ã®å±€ã§æ§æãããŠããŸãã
å©çšè ã®èгç¹ã§ã¯ãDML åŠçäžã«ãã®ããŒãã«å®çŸ©çã DDL ã§å€æŽããããšããªãããšãDDL ãçºè¡ãããã©ã³ã¶ã¯ã·ã§ã³ã¯éããã«ã³ãããããããšãç«¶åãšã©ãŒãåãåã£ãå Žåã¯å®è¡ã¿ã€ãã³ã°ã®èª¿æŽããªãã©ã€ãæ€èšããããšãéèŠã§ãã
ããŒãã«éå¡
DDLïŒå¯Ÿè±¡ããŒãã«ãæä»çã«éå¡ãããã©ã³ã¶ã¯ã·ã§ã³å®äºãŸã§ç¶æ
DMLïŒå¯Ÿè±¡ããŒãã«ãå ±æçã«éå¡ããã¹ããŒãã¡ã³ãå®äºãŸã§ç¶æ
éå¡ãç«¶åããå Žåã¯ãšã©ãŒãå³è¿åŽïŒåŸ æ©ããªãïŒ
ã¹ãã¬ãŒãžé å»¶åé€
DROP DDL ã¯ã¹ãã¬ãŒãžã峿ã«è«çåé€ïŒååæ€çŽ¢ããé€å€ïŒããããç©çåé€ã¯é å»¶ããã
åç §ã«ãŠã³ã¿ã 0 ã«ãªã£ãæç¹ã§ã¡ã³ããã³ã¹ã¹ã¬ãããç©çåé€ãå®è¡ãã
2ã€ã®ä»çµã¿ãçµã¿åãããããšã§ãDDL ãš DML ã®åæçºè¡ãå®å šã«å¶åŸ¡ããŠããŸãã
ãã®ä»ã®å"Tsurugi"ã䜿ãéã«åœ¹ç«ã€Tipséã¯ã³
次äžä»£é«éRDBå"Tsurugi"ã¯ããªãŒãã³ãœãŒã¹ã§å
¬éäžã§ãã
ãã²ããŠã³ããŒãããŠã¿ãŠãè§Šã£ãŠã¿ãŠãã ããã