node express与MySQL

mysql初步使用

1、安装操作MySQL数据库的第三方模块(mysql)
2、通过mysql模块连接到 MySQL 数据库
3、通过mysql模块执行 SQL语句

git

https://gitee.com/my739168148/express_sql.git

安装mysql模块

/**
 * 安装与配置mysql模块
 * 在使用mysql模块操作数据库之前,必须先对mysql模块进行必要的配置。
 */
const mysql = require('mysql');
const db = mysql.createPool({
    host: '127.0.0.1',
    user: 'root',
    password: 'root',
    database: 'jjtkdb'
});

查询

// 检测mysql模块是否能正常工作
db.query('select 1', (err, results) => {
    // 木块工作期间报错了
    if (err) {
        return console.log(err.message)
    }
    console.log(results)
})

const sqlStr = 'select * from iconlist'
db.query(sqlStr,(err,results)=>{
    if (err){
        return console.log(err.message)
    }
    // 如果成功执行select语句,则查询出来的值是数组
    console.log(results)
})

插入

// 插入数据
const icon = {iconId : 14,iconName : '3.png',gameId : 2,iconPath : 'D:XXX',iconUrl : 'XXXX'}
// 插入的值使用英文问号?进行占位,node.js中可以使用?来代替具体的值。并且可以使用affectedRows来代替具体的值
const insertStr = 'insert into iconlist (iconName,gameId,iconPath,iconUrl) values (?,?,?,?)'
connection.query(insertStr,[icon.iconName,icon.gameId,icon.iconPath,icon.iconUrl],(err,results)=>{
    if (err) {
        return console.log(err.message)
    }
    if (results.affectedRows > 0){
        console.log('数据插入成功!!!!')
    }
})

快速插入数据

// 1、要插入到icon中的字段
const icon = {iconName : '3.png',gameId : 2,iconPath : 'D:XXX',iconUrl : 'XXXX'}
// 2、待执行的 SQL 语句,其中英文的 ? 表示占位符
const insertStr = 'insert into iconlist set ?'
// 3、直接将数据对象当作占位符的值
connection.query(insertStr,icon,(err,results)=>{
    if (err) {
        return console.log(err.message)
    }
    if (results.affectedRows > 0){
        console.log('数据插入成功!!!!')
    }
})

快速插入示例代码2

sql语句中使用set ?
插入对象,对象的key为数据库对应表的键,键本身不用带分号。后面跟上键对应的值,值与数据库中的类型对应。

const insertSQL = 'insert into package_analyse set ?'
let insertValue = {
    game_id: '100055',
    channel_name: 'huawei',
    download_apk_name: '123132',
    base_apk_size: 12313,
    cost_time: 1234564
}
sqlHelper.insert(insertSQL, insertValue, (err, result) => {
    console.log(result)
})

更新

// 1、要更新的数据对象
const icon = {iconName: 'hello.png', gameId: 2, iconPath: 'D:\\hello.png', iconUrl: 'XXXX'}
// 2、要执行的 SQL 语句
const sqlUpdate = "UPDATE iconlist SET iconName=?, iconPath=? where iconId=?"
// 3、调用 db.query() 执行 SQL 语句的同时,使用数组依次为占位符指定具体的值
connection.query(sqlUpdate, [icon.iconName, icon.iconPath, 26], (err, result) => {
    if (err) {
        return console.log("更新异常:" + err.message)
    }
    if (result.affectedRows > 0) {
        console.log("数据更新成功")
    }
})

快速更新

// 更新数据的便捷方式
// 1、要更新的数据对象
let iconQuick = {iconId: 26, iconName: 'helloNew.png', gameId: 2, iconPath: 'D:helloNew.png', iconUrl: 'XXXX'}
// 2、要执行的 SQL 语句
let sqlUpdateQuick = "UPDATE iconlist SET ? WHERE iconId=?"
// 3、调用 db.query() 执行 SQL 语句的同时,使用数组依次为占位符指定具体的值
connection.query(sqlUpdateQuick, [iconQuick, iconQuick.iconId], (err, result) => {
    if (err) {
        return console.log("更新异常:" + err.message)
    }
    if (result.affectedRows > 0) {
        console.log("数据更新成功")
    }
})

删除数据

// 在删除数据时,推荐根据id 这样的唯一标识,来删除对应的数据
// 1.要执行的 SQL 语句
const deleteSQL = "Delete From iconlist where id=?"
// 2.调用 db.query()执行 SQL 语句的同时,为占位符指定具体的值
// 注意: 如果 SQL 语句中有多个占位符,则必须使用数组为每个占位符指定具体的值
// 如果 SQL 语句中只有一个占位符,则可以省略数组
connection.query(deleteSQL,26,(err,result)=>{
    if (err) {
        return console.log("删除异常:" + err.message)
    }
    // 注意: 执行 delete 语句之后,结果也是一个对象,也会包合 affectedRows 属性
    if (result.affectedRows > 0){
        console.log("数据删除成功")
    }
})

标记删除

使用 DELETE语句,会把真正的把数据从表中删除掉。为了保险起见,推荐使用标记删除的形式,来模拟删除的动作。所谓的标记删除,就是在表中设置类似于
status 这样的状态字段,来标记当前这条数据是否被删除。 当用户执行了删除的动作时,我们并没有执行 DELETE语句把数据删除,而是执行了UPDATE 语句,将这条数据对应的status字段标记为删除即可

// 标记删除
const deleteSQL = "update iconlist set iconUrl=? where iconId=?"
connection.query(deleteSQL, [1,26],(err,result)=>{
    if (err){
        return console.log("删除异常:" + err.message)
    }
    if (result.affectedRows > 0) {
        console.log("数据删除成功")
    }
})

连接池

使用连接池后,有两种查询方式,第一种,通过连接池pool,调用pool.query

连接池直接查询

let db
function sqlConnect(callback) {
    if (!db) {
        console.log("db is null")
        db = mysql.createPool({
            host: process.env.SQL_HOST || 'xxxx',
            port: process.env.SQL_PORT || 'xxxx',
            user: process.env.SQL_USER || 'xxxx',
            password: process.env.SQL_PASSWORD || 'xxxxx',
            database: process.env.SQL_DATABASE || 'xxxx',
            connectionLimit: 10,
        });

        db.query("select 1", (error, result) => {
            if (error) {
                console.log(error.message)
                callback(new DBError(ConstFields.DB_CONNECTION_ERROR, '[CONNECT ERROR] - ' + error.message));
                process.exit(1)
            }
            console.log("connect mysql success")
        })
    }
}

function query(querySql,callback){
    db.query(querySql, function (error, result) {
        if (error) {
            console.log('[SELECT QUERY ERROR] - ', error.message);
            callback(new DBError(ConstFields.DB_QUERY_ERROR, '[SELECT QUERY ERROR] - ' + error.message));
            process.exit(1)
        } else {
            callback(result);
        }
    });
}

连接池中获取连接对象

通过pool对象获取连接对象db.getConnection(),在根据连接对象connection.query执行响应sql语句。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学知识拯救世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值