Vue.js+Node.js全栈开发教程:连接MySQL

MySQL作为一种?型的关系型数据库在互联网中被大量使用。本节
将使用mys?l模块进行MySQL数据库的连接。

.3.1 MySQL介绍
MySQL数据库由瑞?MySQL AB公司开发,目前属于?racle公司。
MySQL采用双授权模式,分为商业版和社区版。MySQL数据库凭借其体
积小、速度快、总成本低等特点被广泛应用在Web开发中。经?的开源
软件架构LAMP中的M便是指MySQL。
MySQL的官方网站是http://www.mysql.com/。读者可以在社区版
下载网址https://dev.mys?l.com/downloads/mysql/中选择相应系统
的版本(见图7.12)。.

Vue.js+Node.js全栈开发教程:连接MySQL_第1张图片

这里以Windows版本为例,安装过程大致如下:
(1)将下载的MySQL软件按照常规软件的步骤安装即可。需要提
醒的是,在安装过程中,可以设置MySQL服务的端口,默认为3306,如
图7.13所示。

Vue.js+Node.js全栈开发教程:连接MySQL_第2张图片 

(2)在安装过程中可以设置root用户的密码、添?用户,如图
7.14所示。

Vue.js+Node.js全栈开发教程:连接MySQL_第3张图片 

 (3)安装完成后,可以在控制台使用以下命令来启动MySQL:

// net start commandline
net start mys?l5.

提示
在这里mys?l5.?是已经安装的带有版本号的MySQL软件名。

同样,也可以在Windows的服务中找到MySQL服务,然后进行启
动、停止操作,如图7.15所示。 

Vue.js+Node.js全栈开发教程:连接MySQL_第4张图片

 4)启动MySQL后,通过以下命令可以进入MySQL:

mysql -u root -p

提示
root是用户名,MySQL自带root用户,读者可以设置自己的用户名
再进入MySQL。

5)输入命令后,紧接着会要求输入密码。输入用户的密码后,
可以看到图7.16所示的界面,表示成功进入了MySQL。

Vue.js+Node.js全栈开发教程:连接MySQL_第5张图片

(6)进入MySQL后,可以通过输入help或者“\h”来查看MySQL命
令的帮助,如图7.17所示。

Vue.js+Node.js全栈开发教程:连接MySQL_第6张图片 

 (7)当我们不需要使用MySQL时,可以通过?uit命令退出MySQL,
如图7.18所示。

这里仅仅是对MySQL进行简单的介绍,读者可以通过阅读相关的书
籍学习更多知识。
7.3.2 Node.js连接MySQL
Node.js连接MySQL使用的是mysql模块。mys?l模块的GitHub地址
是https://github.com/mysqljs/mysql,从中可以查到官方文档。使
用这个模块前需要通过NPM来安装:

npm install mysql


mysql模块通过createConnection()方法创建MySQL连接。如下代
码即和本地的MySQL数据库建立了连接。
【代码7-15】

/?引入mys?l模块?/
const mys?l = re?uire('mys?l');
/?创建连接?/
const connection = mys?l.createConnection({
host: 'localhost',
user: 'root',
password : 'secret'
});
/?连接mys?l?/
connection.connect(function(err) {
/?连接出错的处理?/
if (err) {
console.error('error connecting: ' + err.stack);
return;
}
console.log('connected as id ' + connection.threadId);
});

【代码说明】
CreateConnection()方法用于创建连接,connection.connect()
方法用于判断连接是否成功。
CreateConnection()方法用于接受一个json对象参数。json对象
主要使用的字段有:
host:需要连接数据库地址,默认为localhost。
?ort:连接地址端口默认为??06。
user:连接MySQL时使用的用户名。
?ass?ord:用户名对应的密码。
database:所需要连接的数据库的名称。
通过end()方法可以正常地终止一个连接:

connection.end(function(err) {
console.log(err);
})

当然,使用destroy()方法也可以终止连接。该方法会立即终止底
层套接字,不会触发更多的事件和回调函数。

connection.destroy()


7.3.3 Node.js操作MySQL
连接MySQL成功后,就需要通过Node.js来操作数据库了。mys?l模
块提供了一个?为?uery()的方法,可以用来执行SQL语句,从而对
MySQL数据库进行相应的操作。
假设我们连接的数据库有一个?为data的数据表,可以使用以下
代码将这个data数据表的所有记录查询出来。
【代码7-16】

/?引入mys?l模块?/
const mys?l = re?uire('mys?l');
/?创建连接?/
const connection = mys?l.createConnection({
host: 'localhost',
user: 'root',
password : 'secret',
database : 'database'
});
/?连接mys?l?/
connection.connect(function(err) {
/?连接出错的处理?/
if (err) {
console.error('error connecting: ' + err.stack);
return;
}
console.log('connected as id ' + connection.threadId);
});
/?查询数据?/
connection.?uery('SELECT ? FROM data', function(err, rows) {
if(err) {
console.log(err);
} else {
console.log(rows);
}
});

运行这段代码就可以看到所有的记录被打印出来了。
上述代码中connection.?uery()方法的第一个参数是一条SQL语
句,第二个参数是一个回调函数。回调函数中的第一个参数是err,第
二个参数是执行SQL语句后返回的记录。
connection.?uery()方法还有一个paramInfo参数可选。当SQL语
句中含有一些变量时,可以将“?”作为占位符放置在SQL语句中,通
过paramInfo参数传递给SQL语句。
【代码7-17】

/?引入mys?l模块?/
const mys?l = re?uire('mys?l');
/?创建连接?/
const connection = mys?l.createConnection({
host: 'localhost',
user: 'root',
password : 'secret',
database : 'database'
});
/?连接mys?l?/
connection.connect(function(err) {
/?连接出错的处理?/
if (err) {
console.error('error connecting: ' + err.stack);
return;
}
console.log('connected as id ' + connection.threadId);
});
const table = 'mytable';
/?查询数据?/
connection.?uery('SELECT ? FROM ?',[table], function(err,
rows) {
if(err) {
console.log(err);
} else {
console.log(rows);
}
});

运行这段代码,同样可以从mytable数据表中取出所有的数据记
录。
mys?l模块还提供一个escape()方法,用来防止SQL注入攻击。SQL
注入攻击的本质就是黑客在提交给服务器的数据中带有SQL语句,试图
欺骗服务器,让服务器运行自己的恶意SQL语句,因此调用escape方法
处理用户提交的数据可以防止SQL注入攻击。
假设userid为用户提供的数据,可以先通过connection.escape()
方法处理一遍,之后再执行相关的SQL语句。
【代码7-18】

/?引入mys?l模块?/
const mys?l = re?uire('mys?l');
/?创建连接?/
const connection = mys?l.createConnection({
host: 'localhost',
user: 'root',
password : 'secret',
database : 'database'
});
/?连接mys?l?/
connection.connect(function(err) {
/?连接出错的处理?/
if (err) {
console.error('error connecting: ' + err.stack);
return;
}
console.log('connected as id ' + connection.threadId);
});
/?定义SQL语句?/
let s?l = 'SELECT ? FROM users WHERE userid=' +
connection.escape(userid);
/?执行SQL语句?/
connection.?uery(s?l, function(err, rows) {
if(err) {
console.log(err);
} else {
console.log(rows);
}
});

你可能感兴趣的:(mysql,数据库,database)