Day23 DB-NodeJS中的MySQL

理解关联式资料库与NoSQL之後,要学的是怎麽在NodeJS中使用资料库相关的套件,今天内容是以MySQL为主,并以资料的读取说明关联式资料库在NodeJS中的应用方法。

MySQL

MySQL过去是一个开放程序码的关联式资料库管理系统,由於效能高、低成本且稳定性高,广泛被使用在网页系统上,例如:维基百科、google、Facebook等,目前为Oracle旗下产品,分为免费的社群版、付费的标准版与商业版,可以透过MySQL Workbench作为资料库管理工具。

https://ithelp.ithome.com.tw/upload/images/20211008/20139980ZBBIzDpbuP.png

https://ithelp.ithome.com.tw/upload/images/20211008/20139980aj8l767Usv.png

NPM套件与使用方法

  1. MySQL在NPM中可以查到有mysql与mysql2两个套件,两者的比较可以在NPMCompare的网站里查询(https://npmcompare.com/compare/mysql,mysql2 ),这里的练习使用的是较早被开发完成的mysql套件,一样需要先进行安装,并以require()引用mysql套件。。

https://ithelp.ithome.com.tw/upload/images/20211008/20139980mNUDu3FI7P.png

let mysql = require("mysql");
  1. 今天以读取资料作为mysql套件的使用范例,因此先在MySQL Workbench中建立关联式资料库。

https://ithelp.ithome.com.tw/upload/images/20211008/20139980Y3csSsjjOL.jpg

  1. 在MySQL Workbench中测试查询资料的SQL字串。

https://ithelp.ithome.com.tw/upload/images/20211008/20139980YWbDl5XZ3I.png

  1. 在主程序app.js中加入一个中介层。
app.use("/", (req, res, next)=>{
  
});
  1. mysql.createConnection()方法在中建层中建立一个连到指定资料库的连线。
app.use("/", (req, res, next)=>{
  let con = mysql.createConnection({
    host: "localhost",
    port: 8889,
    user: "root",
    passwort: "root",
    database: "nodeProj"
  });
});
  1. 加入步骤3测试SQL字串的查询动作。
app.use("/", (req, res, next)=>{
  let con = mysql.createConnection({
    host: "localhost",
    port: 8889,
    user: "root",
    passwort: "root",
    database: "nodeProj"
  });
  
  conn.query(con.query(`select person.id, firstName, lastName, address from person
  inner join personAddress on person.id = personAddress.Id inner join Address on
  personAddress.addrId = Address.addrId`,
  (err, rows)=>{
    if(err) throw err;
    console.log(rows);
  });
  
  next();
});
  1. 执行後可以从Terminal看到查询後印出的资料,会以JSON格式的阵列印出。

https://ithelp.ithome.com.tw/upload/images/20211008/20139980jyMxZ5lPAq.png

小结

关联式资料库可用SQL语法将分开的关联资料表,互相join取得想要的结果。最後的输出成果可以发现mysql的NPM套件会将关联式资料库所纪录的表格式资料转换为JSON格式的资料列,使资料在JavaScript的语法下能灵活使用。

参考资料

https://zh.wikipedia.org/wiki/MySQL

https://www.mysql.com

https://npmcompare.com/compare/mysql,mysql2


<<:  day23: currying

>>:  Day23 semaphore, mutex

[Day 16]从零开始学习 JS 的连续-30 Days---AJAX !!

什麽是 AJAX? AJAX 即「Asynchronous JavaScript and XML」(...

slots

前面我们介绍了component以及props今天我们要介绍的是slots 什麽是slots呢?它是...

初学者跪着学JavaScript Day14 : 创建Array 四种方式

一日客语:睡觉 客语:睡目 soi55mug2 虽木˙ 介绍: 有字面值:[ ] [ ]里面值称为元...

番外篇(2)一起来做 To Do List!- 知识篇

这次花了约三周的时间制作了简易的 To Do List,在此想纪录并分享一下我的作法以及制作过程中学...

#12 Web Crawler 5

今天应该是爬虫的最後一篇了。我们要把爬下来的资料做成「每日铁人赛热门 Top 10」。 来看看爬下来...