• 在nodejs中操作数据库--express项目


    首先:安装第三方的mysql数据库、连接到mysql数据库(建立连接)、执行sql语句操作数据库(可以执行SQL语句操作数据库)

     npm init -y  ---建立项目管理包

      npm install mysql

     配置mysql模块___我使用的是XAMPP自带的mysql

     导入mysql数据库:require('mysql')

    建立与mysql的数据库连接:mysql.creatPool({host:''数据库的ip地址 user:''登录数据库的账号,password登录数据库的密码 database:指定要操作的数据库 port端口3306})

    测试mysql数据库是否可以正常工作

    db.query('SQL语句',(err,results)=>{

        if(err) return console.log(err.message)

        console.log(results)--------此结果可以正常打印输出就表示数据库连接正常

    })

     select 1不需要任何字段,只是用于判断是否连接成功

    1. //"mysql:host=localhost;dbname=world","root","");//NEW创建对象 PDO参数:数据库名称 服务器 用户名 密码
    2. const mysql=require('mysql')
    3. //建立与mysql的数据库连接
    4. const db=mysql.createPool({
    5. host:'localhost',
    6. user:'root',
    7. password:'',
    8. database:'test',
    9. port:'3306'
    10. })
    11. //测试mysql能否正常使用
    12. db.query('select 1',(err,results)=>{
    13. if(err) return console.log(err.message)
    14. console.log(results)
    15. })

    查询base表中的信息 err是错误对象_db.query(sqlStr,(err,results)=>{

     

    1. const mysql=require('mysql')
    2. //建立与mysql的数据库连接
    3. const db=mysql.createPool({
    4. host:'localhost',
    5. user:'root',
    6. password:'',
    7. database:'test',
    8. port:'3306'
    9. })
    10. const sqlStr='select * from base'//sql语句
    11. db.query(sqlStr,(err,results)=>{
    12. if(err) return console.log(err.message)
    13. console.log(results)
    14. })

     查询的结果是数组;数组里面的是对象。每一个对象都是RowDataPacket类型,里面包含的内容是我们数据表中的字段名称;可以拿到表中的所有数据----执行select(查询)语句;输出的结果是数组


     插入数据:定义要插入的数据----定义sql语句(通过?对数据进行占位)——使用db.query(sqlStr,[对前面的?占位符指定具体的值](err,results)方法进行数据的传入

    待执行的SQL语句中,待执行的SQL语句,其中的英文?表示占位符,使用数组的形式依次为?占位符指定具体的值——执行回调函数 results对象上的属性影响的行数==1表示插入成功

    查询语句results输出的数组,插入语句,执行的结果是一个对象,对象中有个属性affectedRows===1

    1. const a={name:'黎明',age:'9'}
    2. const sqlStr1='insert into base(name,age)values(?,?)'
    3. db.query(sqlStr1,[a.name,a.age],(err,results)=>{
    4. if(err) return console.log(err.message)
    5. if(results.affectedRows===1){
    6. console.log('插入成功')
    7. }
    8. })

     id具有唯一性,前面我进行了数据的删除,id为其他的已经被占用了,所以无法被使用,


     插入语句的属性如果有很多;便捷方式

    向表中新增数据是,如果每个数据对象的每个属性和数据表的字段一一对应,则可以通过一个占位符进行直接是使用 使用的是insert into set ---会将每一个属性、转成对应的字段,每一个属性对应的值转换为字段的值

    1. const a={name:'四月',age:'90'}
    2. const sqlStr1='insert into base set ?'
    3. db.query(sqlStr1,a,(err,results)=>{
    4. if(err) return console.log(err.message)
    5. if(results.affectedRows===1){
    6. console.log('插入成功')
    7. }
    8. })

     


     更新数据--与插入类似——执行的结果是对象,可以用属性进行访问--where条件必须写

    1. const a={id:9,name:'四月',age:'90'}
    2. const sqlStr2='update base set name=?,age=? where id=?' //?表示占位---加限定条件,不然整张表都可能变
    3. db.query(sqlStr2,[a.name,a.age,a.id],(err,results)=>{
    4. if(err) return console.log(err.message)
    5. if(results.affectedRows===1){
    6. console.log('更新成功')
    7. }
    8. })

     更新的简便方法:使用set--填入的是对象

    1. //更新便捷方式
    2. const a={id:9,name:'百点',age:'91'}
    3. const sqlStr2='update base set ? where id=?' //?表示占位---加限定条件,不然整张表都可能变
    4. db.query(sqlStr2,[a,a.id],(err,results)=>{
    5. if(err) return console.log(err.message)
    6. if(results.affectedRows===1){
    7. console.log('更新成功')
    8. }
    9. })

     


     删除数据--最好使用id这个唯一标识进行删除--db.query()执行sql语句的同时,为占位符指定具体的值,注意sql语句只有一个占位符,则可以省略数组。直接把值进行填入。

    1. //删除数据
    2. const sqlStr2='delete from base where id=?' //?表示占位---加限定条件,不然整张表都可能变
    3. db.query(sqlStr2,9,(err,results)=>{
    4. if(err) return console.log(err.message)
    5. if(results.affectedRows===1){
    6. console.log('删除成功')
    7. }
    8. })


    标记删除:直接删除是不安全,保险起见,使用标记删除,来模拟删除的动作,标记删除是在表中设置类似与status这样的状态字段,来标记当前的这条数据是否被删除,当用户进行delete语句,实际上没有执行delete操作,而是执行了update语句,将这段语句标记成删除

    1. //标记删除
    2. const sqlStr3='update base set status=? where id=?' //?表示占位---加限定条件,不然整张表都可能变
    3. db.query(sqlStr3,[1,11],(err,results)=>{
    4. if(err) return console.log(err.message)
    5. if(results.affectedRows===1){
    6. console.log('标记删除(实际上是更新)成功')
    7. }
    8. })

     

  • 相关阅读:
    Echarts异步数据与动画加载
    Java集合框架之ArrayList源码分析
    k8s pod详细讲解
    2.Golang 热加载开发
    环面上 FHE 的快速自举:LUT/Automata & Blind Rotate
    K邻近算法(KNN,K-nearest Neighbors Algorithm)
    MySQL使用CASE WHEN统计SQL语句代替子查询SQL统计,CASE WHEN常用写法,根据不同的条件对数据进行分类、分组和聚合
    Ajax入门及jQuery库对Ajax的封装
    蓝桥杯(3.1)
    iptables-save 命令使用总结
  • 原文地址:https://blog.csdn.net/weixin_47295886/article/details/126739400