MySQL 快速上手¶
环境准备¶
本文假设你本地已经部署好 MySQL 服务,且采用默认端口 3306。 如果你还没准备好 MySQL 服务,可以参考 MySQL 官网文档下载并部署 MySQL 。
开发环境更推荐采用 Docker 容器化部署,以降低维护成本。 Docker 快速使用指引请看考这篇文章:前端工程师眼中的 Docker 。
连接数据库¶
首先,使用 createConnection 方法创建连接,并得到对象 connection:
1 2 3 4 5 6 | const connection = mysql.createConnection({
host: '127.0.0.1',
port: '3306',
user: 'root',
password: 'to0r'
})
|
connect 方法用于连接数据库,传入 callback 参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | connection.connect((err) => {
if (err) {
console.log(err)
return
}
console.log('connected!')
connection.query('create database testDB', (err) => {
if (err) {
console.log(err)
return
}
console.log('create database testDB successfully!')
})
connection.query('use testDB', (err, result, field) => {
if (err) {
console.log(err)
return
}
console.log('use testDB successfully!')
})
|
回调函数中,我们做了这样一些操作:创建名为 testDB 的数据库,并将其指定为当前使用的数据库。 query 方法可接收 SQL 语句,接下来的一系列操作,我们还会继续用到它。
建表¶
query 方法接收 SQL 语句和回调函数 callback,使用起来对于熟悉 SQL 语句的开发者甚为方便:
1 2 3 4 5 6 7 8 | connection.query('create table user (name VARCHAR(40) NOT NULL, age INT NOT NULL)', (err, result) => {
if (err) {
console.log(err)
return
}
console.log('create table successfully!')
})
|
至此,我们新建了一张 user 表,分别有 name 和 age 字段。 其中,name 字段为 varchar 类型,age 为 int 类型。
接下来,便可操作数据库,进行数据的插入、查询、更新、删除。 由于数据库的操作,均需建立在成功连接的基础上,因此,我们需要在 connect 方法的回调函数中执行这些操作。
代码框架如下:
connection.connect((err) => {
// 建表
// 插入
// 查询
// 更新
// 删除
// 断开连接
})
插入¶
往 user 表中插入一条数据:
1 2 3 4 5 6 7 | connection.query('insert into user set ?', {name: 'Alin', age: 21}, (err, results) => {
if (err) {
console.log(err)
return
}
console.log('insert data successfully! insertId is ' + results.insertId)
})
|
query 方法接收三个参数: 第一个参数是 SQL 语句;第二个参数是一个 Object,表示待插入的数据;最后一个参数是回调函数,返回执行后的结果。 注意到,SQL 语句中有 ? 符号,指代的便是待插入的数据。
查询¶
查询 user 表中的所有数据:
1 2 3 4 5 6 7 8 | connection.query('select * from user', (err, results) => {
if (err) {
console.log(err)
return
}
console.log('select user all data:')
console.log(results)
})
|
更新¶
将 Alin 的 age 字段值更改为 22:
1 2 3 4 5 6 7 8 | connection.query('update user set age = ? where name = ?', [22, 'Alin'], (err, results) => {
if (err) {
console.log(err)
return
}
console.log('update Alin age successfully!')
console.log(results)
})
|
注意到,query 方法接收的第二个参数,是一个数组,按顺序分别对应 SQL 语句中的 ? 符号。
删除¶
删除有关 Alin 的数据:
1 2 3 4 5 6 7 | connection.query('delete from user where name = ?', ['Alin'], (err, results) => {
if (err) {
console.log(err)
return
}
console.log('delete Alin successfully!');
})
|
断开连接¶
end 方法表示断开数据库连接:
1 2 3 4 5 6 7 8 9 | connection.end((err) => {
if (err) {
console.log('end connect error')
return
}
console.log('close mysql connection')
})
})
|
运行 Demo¶
最后我们在终端执行以下命令,运行 demo:
$ node demo.js
输出以下结果:
connected!
create database testDB successfully!
use testDB successfully!
create table successfully!
insert data successfully! insertId is 0
select user all data:
[ RowDataPacket { name: 'Alin', age: 21 } ]
update Alin age successfully!
OkPacket {
fieldCount: 0,
affectedRows: 1,
insertId: 0,
serverStatus: 34,
warningCount: 0,
message: '(Rows matched: 1 Changed: 1 Warnings: 0',
protocol41: true,
changedRows: 1
}
delete Alin successfully!
close mysql connection