ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] # mysql 操作 ## 安装 mysql 模块 - `cnpm install mysql` - `const mysql = require('mysql')` ## 建立数据库连接 ```js // 连接数据库 function connect() { return mysql.createConnection({ // 这里将常量统一维护在constant对象中 host: constant.dbHost, // ip user: constant.dbUser, // mysql用户名 password: constant.dbPwd, // mysql密码 database: 'book' // 数据库名 }) } const conn = connect() ``` 或者 ```js const mysql = require('mysql') let connection = mysql.createConnection({ host: 'localhost', user: 'root', password: '123456', database: 'test' }) connection.connect() connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) { if (error) throw error console.log(' The solution is: ', results[0].solution) }) ``` ## 增、删、查、改 ### 查询数据 step1:建立连接 step2:创建 sql 语句字符串 step3: ```js conn.query(sql, (err, results) => { if(err) { } else { } }) ``` ```js app.get('/book/detail', (req, res) => { const conn = connect() const fileName = req.query.fileName const sql = `select * from book where fileName='${fileName}'` conn.query(sql, (err, results) => { if (err) { res.json({ error_code: 1, msg: '电子书详情获取失败' }) } else { if (results && results.length === 0) { res.json({ error_code: 1, msg: '电子书详情获取失败' }) } else { const book = handleData(results[0]) res.json({ error_code: 0, msg: '获取成功', data: book }) } } conn.end() // 注意关闭数据库链接 }) }) ``` results返回的数据格式是怎样的? ![](https://box.kancloud.cn/7b2d6e8cc81ee8b76ca93d9d4415a24a_339x94.png) 查询结果如下图 ![](https://box.kancloud.cn/c6da28eb8374b52f372a4adc16370be5_554x72.png) 返回一个数组,results\[0\]可以直接获取到第一个对象的引用,results\[0\].Sno 可以直接获取到这个对象的 Sno 属性对应的值。 ## 插入数据 ```js // ...建立连接的过程省略 const addSql = 'INSERT INTO websites(Id, name, url, alexa, country) VALUES(0, ?, ?, ?, ?)' const addSqlParams = ['菜鸟工具', 'https://c.runoob.com', '23453', 'CN'] connection.connect() connection.query(addSql, addSqlParams, function (err, result) { if (err) { console.log('[INSERT ERROR] - ', err.message) return } console.log('INSERT ID: ', result) }) connection.end() ``` 或者 ```js const sql= 'INSERT INTO websites(Id, name, url, alexa, country) VALUES(0, '菜鸟工具', 'https://c.runoob.com', '23453', 'CN')' connection.query(sql, (err, result) => { // do something... }) ``` 一般都会使用模板字符串: ```js const query = req.query // 获取URL中的参数 const sql = `SELECT * FROM ${query.table}` ``` 插入成功后返回的信息格式如下: ```js OKPacket { fieldCount: 0, affectedRows: 1, insertId: 3, serverStatus: 2, warningCount: 0, message: '', protocol41: true, changedRows: 0 } ``` ## 更新数据 ```js // ...建立连接的过程省略 const addSql = 'UPDATE websites SET name = ?, url = ? WHERE Id = ?' const addSqlParams = ['菜鸟移动站', 'https://m.runoob.com', 6] connection.connect() connection.query(addSql, addSqlParams, function (err, result) { if (err) { console.log('[UPDATE ERROR] - ', err.message) return } console.log('UPDATE affectedRows: ', result.affectedRows) }) connection.end() ``` 更新成功返回的信息格式如下:与 insert 操作一样 ```js OKPacket { fieldCount: 0, affectedRows: 1, insertId: 3, serverStatus: 34, warningCount: 0, message: '(Rows matched: 1 Changed: 1 Warnings: 0)', protocol41: true, changedRows: 1 } ```