
Node.jsã§æžããŠMySQLã䜿çšããŠãã人ãªã誰ã§ãã3幎åã«èŠªåã®
FelixGeisendörferãè±éçã§ç¡ç§ã®åæ¥ãæãéããããšãç¥ã£ãŠããŸãã圌ã ããMySQLã«æ¥ç¶ããããã®éåžžã«
é«å質ã®ãã©ã€ããŒãéçºããJavaScript
ã§ãã®DBMSã®
ãã€ããªãããã³ã«ããã€ãã£ãã«å®è£
ããŸãã ã ãã®åŸãä»ã®å°æ¬ãããåå¿ããããžã§ã¯ãã«åå ããæ¥ç¶ããŒã«ãã¯ã©ã¹ã¿ãŒããã©ã³ã¶ã¯ã·ã§ã³ã®ãµããŒããäžæçãªæ¥ç¶ã®åªå€±ã䌎ã埩å
ãå®è£
ãããŸããã çŸåšããã®
ãã©ã€ããŒã¯ããªãŒãã³ãªnpmããã³githubãªããžããªã«ãããã®ããæãéçºãããããéçºãããç©æ¥µçã«ãµããŒããããŠããŸãã äœã¬ãã«ã®å®è£
ãååã«éçºãããŠããããããã®ãã©ã€ããŒãã¢ããªã±ãŒã·ã§ã³éçºè
ã«æäŸãã
ãã¹ãŠã®æ©èœãåäžã®ã¯ãšãªã¡ãœããã«
éçŽããã
ããšã¯é©ãã¹ãããšã§ãã å人çã«ã¯ãããã ãã§ã¯ååã§ã¯ãããŸãããç¥ç¶ã¯ãã¹ã«ã©ãŒå€ãè¡ãšåãé
åã«è¿ã䟿å©ããããŒã¿ããŒã¹æ§é ã®ã€ã³ããã¹ãã¯ã·ã§ã³ã«æ
£ããŸããã ããã§ããããã®éçºããç§ã®æããKhabravchaneãšå
±æã§ããããšãå¬ããæããŸããããã¹ãŠã®èšå
ãè·¯äžã«ããããšãèŠåããŸãã ãã¡ããããã©ã€ããŒãšã®ç·å¯ãªçµ±åã®å€åœ¢ããããŸããã
FelixGeã¯ãã©ã€ããŒãæä»çã«äœã¬ãã«ã«ãããã®ã§ãäžçŽç©ãä»ããŠãã©ã€ããŒã«è¿œå ãã
å€éšã©ã€ãã©ãªã®ãªãã·ã§ã³ã«æ±ºããŸããã äžçŽç©ã®åœ¢ã§ãã¢ã¡ããã£ã
Impressãã©ãããã©ãŒã ã«çµã¿èŸŒãŸãããã©ã€ããŒçšã®ããããšããŠå
¬éãããŸããã 以äžã®æ©èœãšãŠãŒã¹ã±ãŒã¹ã«ã€ããŠã
ããŒã¿ååŸã®ã¢ã¡ããã£
ããã«ããæ»ãå€ããšããèšèã®äžã§ã¯ã颿°ãåŒã³åºããçµæã§ã¯ãªãã2çªç®ã®ãã©ã¡ãŒã¿ãŒã³ãŒã«ããã¯ãæå³ããŸãã
1ã€ã®ã¬ã³ãŒãã®ãã§ããïŒæ¥ç¶ã
queryRow ïŒsqlãvaluesãcallbackïŒã¯ããã£ãŒã«ãåãããŒã«ãªãããã·ã¥ïŒé£æ³é
åïŒãè¿ããŸãïŒã¯ãšãªã§é
åå
ã®é
åãååŸãã代ããã«ïŒã
äŸconnection.queryRow('SELECT * FROM Language where LanguageId=?', [3], function(err, row) { console.dir({queryRow:row}); });
ã¹ã«ã©ãŒ ïŒã€ãŸããåäžã®å€ïŒã®ååŸïŒæ¥ç¶ã
queryValue ïŒsqlãvaluesãcallbackïŒã¯ãåäžã®å€ãæã€é
åã®é
åãååŸãã代ããã«ãåäžã®å€ãè¿ããŸãã 1ã€ã®ã¬ã³ãŒããã1ã€ã®ãã£ãŒã«ãããã§ãããããšãã«äŸ¿å©ã§ããããšãã°ãLIMIT 1ã瀺ãååã«ããIDããŸãã¯é¢æ°countïŒ*ïŒãmaxïŒfieldïŒãªã©ã§ãã
äŸ connection.queryValue('SELECT LanguageName FROM Language where LanguageId=?', [8], function(err, name) { console.dir({queryValue:name}); });
åäžåãã§ãã ïŒæ¥ç¶ã
queryCol ïŒsqlãvaluesãcallbackïŒã¯ãã¯ãšãªã®çµæããåã¬ã³ãŒãã®1ã€ã®ãã£ãŒã«ãã®å€ã§æºããããé
åãè¿ããŸãã ã€ãŸããæ°Žå¹³ã¬ã³ãŒãqueryRowã®éžæã§ã¯ãªããåçŽåã®éžæã§ãã
UPDïŒ gelasã¯ãqueryArrayã®ååãqueryRowã«äŒŒãqueryColã«å€æŽããããã«ç§ã説åŸããŸããã
äŸ connection.queryCol('SELECT LanguageSign FROM Language', [], function(err, result) { console.dir({queryCal:result}); });
ããã·ã¥ãã§ãã ïŒæ¥ç¶ã
queryHash ïŒsqlãvaluesãcallbackïŒã¯ã2ã¬ãã«ã®ãã¹ãã®ããã·ã¥ïŒé£æ³é
åïŒãè¿ããŸãã第1ã¬ãã«ã®ããŒã¯ã¯ãšãªçµæã®æåã®ãã£ãŒã«ãã®å€ã§ããã第2ã¬ãã«ã®ããŒã¯ã¯ãšãªçµæã®ãã¹ãŠã®ãã£ãŒã«ãïŒæåãå«ãïŒã§ãã
äŸ connection.queryHash( 'SELECT LanguageSign, LanguageId, LanguageName, Caption, LanguageISO FROM Language', [], function(err, result) { console.dir({queryHash:result}); });
ããŒ/å€ã®ãã¢ã®éžæïŒæ¥ç¶ã
queryKeyValue ïŒsqlãvaluesãcallbackïŒã¯ããã·ã¥ïŒé£æ³é
åïŒãè¿ããŸããããã§ãããŒã¯ã¯ãšãªçµæããã¯ãšãªãžã®æåã®ãã£ãŒã«ãã§ãã
äŸ connection.queryKeyValue( 'SELECT LanguageISO, LanguageName FROM Language', [], function(err, keyValue) { console.dir({queryKeyValue:keyValue}); });
ã€ã³ããã¹ãã¯ã·ã§ã³ã®äŸ¿å©ã
ã€ãŸããåæã®ããã®ããŒã¿ããŒã¹ã®ã¡ã¿ããŒã¿ãæ§é ãããã³ãã©ã¡ãŒã¿ãŒã®ååŸãããã³ãã®ããŒã¿ããŒã¹ãæäœããããã®ããžãã¯ãŸãã¯ã€ã³ã¿ãŒãã§ãŒã¹ã®èªåæ§ç¯ã®äŸ¿å©ãã
äž»ããŒã®ååŸïŒæ¥ç¶ã
primary ïŒããŒãã«ãã³ãŒã«ããã¯ïŒã¯ããã©ã€ããªããŒã«é¢ããã¡ã¿ããŒã¿ãå«ãããã·ã¥ïŒé£æ³é
åïŒãè¿ããŸããäŸã®ã¡ã¿ããŒã¿ã»ãããåç
§ããŠãã ããã
äŸ connection.primary('Language', function(err, primary) { console.dir({primary:primary}); });
å€éšããŒã®ååŸïŒæ¥ç¶ã
foreign ïŒããŒãã«ãã³ãŒã«ããã¯ïŒã¯ãããã«ãã¹ãã§ããã·ã¥ïŒé£æ³é
åïŒãè¿ããŸããæåã®ã¬ãã«ã¯å€éšããŒã®ååã§ã2çªç®ã¯ãã®ããŒãèšè¿°ããã¡ã¿ããŒã¿ã§ãã äžé£ã®ãã£ãŒã«ãã«ã€ããŠã¯ãäŸãåç
§ããŠãã ããã
äŸ connection.foreign('TemplateCaption', function(err, foreign) { console.dir({foreign:foreign}); });
æŽåæ§å¶çŽã®ååŸïŒæ¥ç¶ã
å¶çŽ ïŒããŒãã«ãã³ãŒã«ããã¯ïŒã¯ãäºéãã¹ãã®ããã·ã¥ïŒé£æ³é
åïŒãè¿ããŸããæåã®ã¬ãã«ã¯æŽåæ§å¶çŽã®ååã§ã2çªç®ã¯åå¶çŽãèšè¿°ããã¡ã¿ããŒã¿ã§ãã äžé£ã®ãã£ãŒã«ãã®äŸãåç
§ããŠãã ããã
äŸ connection.constraints('TemplateCaption', function(err, constraints) { console.dir({constraints:constraints}); });
ããŒãã«ãã£ãŒã«ãã«é¢ããã¡ã¿ããŒã¿ã®ååŸïŒæ¥ç¶ã
fields ïŒããŒãã«ãã³ãŒã«ããã¯ïŒã¯ãååãã¿ã€ãããã¹ãŠã®ä¿®é£Ÿåãšãã©ã°ãã³ã¡ã³ããå«ãåãã£ãŒã«ãã®ã¡ã¿ããŒã¿ãæã€é
åãè¿ããŸãïŒè©³çްã«ã€ããŠã¯äŸãåç
§ããŠãã ããïŒã
äŸ connection.fields('Language', function(err, fields) { console.dir({fields:fields}); });
ãã®æ¥ç¶ã§äœ¿çšå¯èœãª
ããŒã¿ããŒã¹ã®ãªã¹ã
ã®ååŸïŒconnectionã
ããŒã¿ããŒã¹ ïŒã³ãŒã«ããã¯ïŒã¯ãããŒã¿ããŒã¹åïŒãŸãã¯ãã¹ããŒãããšåŒã°ããããšãããïŒã®é
åãè¿ããŸãã
äŸ connection.databases(function(err, databases) { console.dir({databases:databases}); });
ãã®æ¥ç¶ïŒconnectionã«å¯ŸããŠçŸåšéžæãããŠããããŒã¿ããŒã¹ã®
ããŒãã«ã®ãªã¹ããååŸããŠããŸãã
tables ïŒã³ãŒã«ããã¯ïŒã¯ãäºéãã¹ãã®ããã·ã¥ïŒé£æ³é
åïŒãè¿ããŸããæåã®ã¬ãã«ã§ã¯ããŒã¯ããŒãã«ã®ååã§ã2çªç®ã§ã¯åããŒãã«ã®ã¡ã¿ããŒã¿ã§ãã
äŸ connection.tables(function(err, tables) { console.dir({tables:tables}); });
UPDïŒæå®ãããããŒã¿ããŒã¹ã®
ããŒãã«ã®ãªã¹ããååŸããŸãïŒæ¥ç¶ã
databaseTables ïŒããŒã¿ããŒã¹ãã³ãŒã«ããã¯ïŒã¯ãäºéãã¹ãã®ããã·ã¥ïŒé£æ³é
åïŒãè¿ããŸããæåã®ã¬ãã«ã§ã¯ããŒã¯ããŒãã«ã®ååã§ã2çªç®ã¯åããŒãã«ã®ã¡ã¿ããŒã¿ã§ãã
äŸ connection.databaseTables("databaseName", function(err, tables) { console.dir({databaseTables:tables}); });
æå®ãããããŒãã«ã®æ¥ç¶ã®
ã¡ã¿ããŒã¿ãååŸ
ããŠããŸã ã
tableInfo ïŒããŒãã«ãã³ãŒã«ããã¯ïŒã¯ãã¡ã¿ããŒã¿ãå«ãããã·ã¥ïŒé£æ³é
åïŒãè¿ããŸãïŒè©³çްã«ã€ããŠã¯äŸãåç
§ããŠãã ããïŒã
äŸ connection.tableInfo('Language', function(err, info) { console.dir({tableInfo:info}); });
ãã®è¡šã®ãã¹ãŠã®ããŒã«é¢ããã¡ã¿ããŒã¿ã®ååŸïŒæ¥ç¶ã
ã€ã³ããã¯ã¹ ïŒããŒãã«ãã³ãŒã«ããã¯ïŒã¯ããã·ã¥ïŒé£æ³é
åïŒãè¿ããŸããïŒ ãã®ç¬¬1ã¬ãã«ã®ããŒã¯ããŒã¿ããŒã¹ããŒã®ååïŒïŒã§ããã第2ã¬ãã«ã®ããŒã¯åããŒã«é¢ããã¡ã¿ããŒã¿ã§ãïŒã¡ã¿ããŒã¿ã®è©³çްãªãªã¹ãã®äŸãåç
§ïŒã
äŸ connection.indexes('Language', function(err, info) { console.dir({tableInfo:info}); });
MySQL
ãµãŒããŒã§ã®ããã»ã¹ã®ååŸïŒæ¥ç¶ã
processes ïŒã³ãŒã«ããã¯ïŒã¯ãåããã»ã¹ã«ãã©ã¡ãŒã¿ãŒãæå®ãããŠããããã·ã¥ã®é
åãè¿ããŸãã
äŸ connection.processes(function(err, processes) { console.dir({processes:processes}); });
ã°ããŒãã«ãª MySQL
倿°ã®ååŸïŒæ¥ç¶ã
globalVariables ïŒã³ãŒã«ããã¯ïŒ
äŸ connection.globalVariables(function(err, globalVariables) { console.dir({globalVariables:globalVariables}); });
MySQLïŒæ¥ç¶ã®
ã°ããŒãã«ã¹ããŒã¿ã¹ã®ååŸã
globalStatus ïŒã³ãŒã«ããã¯ïŒ
äŸ connection.globalStatus(function(err, globalStatus) { console.dir({globalStatus:globalStatus}); });
MySQL
ãŠãŒã¶ãŒã®ãªã¹ãïŒæ¥ç¶ã
ãŠãŒã¶ãŒ ïŒã³ãŒã«ããã¯ïŒ
äŸ connection.users(function(err, users) { console.dir({users:users}); });
ã¯ãšãªçæã®äŸ¿å©ã
SQLãçæããããWHEREåŒãå®å
šã«åé¢ããããå¥ã
ã«ãããããããšãã§ãããéåžžã«åªãã䟿å©ã ç§èªèº«ã¯ãã®ãããªç ç³ã®æ¯æè
ã§ã¯ãããŸããããäºåã«ç¥ãããŠããªãã¯ãšãªã®çæãèªååããããšãå¿
èŠãªå ŽåããããŸãã
æ¡ä»¶çæ ïŒæ¥ç¶ã
ããã§ ïŒæ¡ä»¶ïŒã¯ãä»ã®æ©èœãšåæ§ã«ãéåæã§ã¯ãªãåæçã«æ©èœããŸãã ã³ãŒã«ããã¯ã䜿çšããŸããã JSONã¹ã¿ã€ã«ã§èšè¿°ãããæ¡ä»¶ã®çµã¿èŸŒã¿WHERE SQLåŒãè¿ããŸãã çè§£ããã«ã¯ãäŸãå¿
ã確èªããå¿
èŠããããŸãã
äŸ var where = connection.where({ id: 5, year: ">2010", price: "100..200", level: "<=3", sn: "*str?", label: "str", code: "(1,2,4,10,11)" }); console.dir(where);
æ¡ä»¶ä»ãã®
éžæ ïŒæ¥ç¶ã
éžæ ïŒããŒãã«ãwhereFilterãã³ãŒã«ããã¯ïŒ
äŸ connection.select('Language', '*', { LanguageId: "1..3" }, function(err, results) { console.dir({select:results}); });
ã¬ã³ãŒãã®
æ¿å
¥ ïŒæ¥ç¶ã
æ¿å
¥ ïŒããŒãã«ãè¡ãã³ãŒã«ããã¯ïŒ
äŸ connection.insert('Language', { LanguageName: 'Tatar', LanguageSign:'TT', LanguageISO:'TT', Caption:'Tatar' }, function(err, recordId) { console.dir({insert:recordId}); });
ã¬ã³ãŒãã®
ç·šé ïŒæ¥ç¶ã
æŽæ° ïŒããŒãã«ãè¡ãã³ãŒã«ããã¯ïŒ
äŸ connection.update('Language', { LanguageId: 25, LanguageName:'Tatarca', LanguageSign:'TT', LanguageISO:'TT', Caption:'Tatarca' }, function(err, affectedRows) { console.dir({update:affectedRows}); });
ãã®ãããªãšã³ããªããªãå Žåã¯
æ¿å
¥ ãããããã§ã«ååšããå Žåã¯
倿ŽããŸãïŒconnectionã
ã¢ãããµãŒã ïŒããŒãã«ãè¡ãã³ãŒã«ããã¯ïŒ
äŸ connection.upsert('Language', { LanguageId: 25, LanguageName:'Tatarca', LanguageSign:'TT', LanguageISO:'TT', Caption:'Tatarca' }, function(err, affectedRows) { console.dir({upsert:affectedRows}); });
ç¹å®ã®ãã£ã«ã¿ãŒãŸãã¯ãã£ã«ã¿ãŒãªãã§ããŒãã«å
ã®ã¬ã³ãŒãæ°ãååŸïŒconnection.countïŒtableãwhereFilterãcallbackïŒ
äŸ connection.count('Language', { LanguageId: ">3" }, function(err, count) { console.dir({count:count}); });
1ã€ãŸãã¯è€æ°ã®ã¬ã³ãŒãïŒæ¥ç¶ã
åé€ããŸãã
åé€ ïŒããŒãã«ãwhereFilterãã³ãŒã«ããã¯ïŒ
äŸ connection.delete('Language', { LanguageSign:'TT' }, function(err, affectedRows) { console.dir({delete:affectedRows}); });
ãŠãŒã¹ã±ãŒã¹
UPDïŒ ç¬ç«ããã¢ãžã¥ãŒã«ã䜿çšããããšããå§ãããŸãããã©ã€ããŒãããæœè±¡åã®ã¬ãã«ãé«ããORMã©ã€ãã©ãªã»ã©é«ããããŸããã ãã®é¢åãªããšã¯ããããããŸããããŸããäžçŽç©ïŒå¿
èŠãªå Žåã®ã¿ïŒã®é¢æ°ã°ã«ãŒããä»ããŠæ¥ç¶ã«æ©èœã远å ããæ©äŒãæ®ããããšæããŸãã
ããã¯æ¬¡ã®ããã«è¡ãããŸãã
äžèšã®ãã¹ãŠã®æ©èœãåããnode-mysqlãã©ã€ããŒçšã®ãããããããŸãïŒ
https :
//github.com/felixge/node-mysql3çªç®ã®äœ¿çšäŸã¯ããã®ã©ã€ãã©ãªãçµã¿èŸŒãŸããŠããNode.jsçšã®
Impressã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã§ãã MySQLãžã®ãã¹ãŠã®æ¥ç¶ã«ã¯ããã«Impressã®ãµã³ããªã³ã°é¢æ°ã®2ã€ã®ã°ã«ãŒãããããæ¥ç¶ãéããããšèªåçã«æ··åãããŸãããŸããMySQLã®ãã©ã°ã€ã³ã®ã»ãããæ¬¡ã®ããã«ãªãããã«ã察å¿ãããã©ã°ã€ã³ã®ã³ã¡ã³ããå€ãå¿
èŠãããæ§æãä»ããŠã€ã³ããã¹ãã¯ã·ã§ã³ã®ã¿ã远å ã§ããŸãïŒ
plugins: { require: [ "db", "db.mysql", "db.mysql.introspection", ... ] },...
次ã«ããã©ã°ã€ã³ã¯åæ¥ç¶ãšèªåçã«æ··åããŸããifïŒdb.mysql.introspectionïŒdb.mysql.introspectionïŒconnectionïŒ;
Impressãã©ã°ã€ã³ã®ãœãŒã¹ã³ãŒãã¯æ¬¡ã®ãšããã§ãã
åç
§è³æ
UPDïŒå·çæç¹ã§ã¯ã2ã€ã®å®è£
ãªãã·ã§ã³ïŒãã©ã€ããŒã®ããããšImpressã®ã¢ãžã¥ãŒã«ïŒããããŸãããã調æ»ã§ã¯ãæéããããŠãã®ã©ã€ãã©ãªãåå¥ã®ã¢ãžã¥ãŒã«ãšããŠèšèšããããšãçã«ããªã£ãŠããããšãçŽåŸã§ããŸããã ããã¯åãæ¥ã®å€æ¹ãŸã§ã«è¡ãããŸããã ãã ãããããã®ã¢ã¡ããã£ã®æçšæ§ã®çšåºŠã倿ããããã«èª¿æ»ãçµäºããããšã¯ãããŸããã
äž»ãªäœ¿çšäŸã¯æ¬¡ã®ãšããã§ãã
GithubïŒ
https :
//github.com/tshemsedinov/node-mysql-utilitiesnmpãªããžããªãŒå
ïŒ
https ://npmjs.org/package/mysql-utilities