首页 > 数据库 >mysql

mysql

时间:2023-03-09 20:12:40浏览次数:49  
标签:console log err mysql SQL obj

一,回顾MYSQL数据库 连接 mysql.exe -h127.0.0.1 -P3306 -uroot -p mysql -uroot mysq1-uroot < 拖拽文件 对数据的增删改查 insert into数据表名称 values(一组值,..); delete from数据表名称 where 条件; update数据表名称set列名称=值,列名称=值 where条件; select*from数据表名称where条件 order by排序limit开始的值,数 据量; 2.mysql模块 mysql模块是Node.is下专门用于操作mysql数据库的模块,属于第三方模块,需要先去下载安装 下载安装命令 npm install mysql createConnection() 创建mysql的连接对象 multipleStatements: true connect() 测试mysql连接 query(SQL命令,[要过滤的值],回调函数)执行SOL命令,如果有需要往SOL命令中拼接的值需要先进行过滤,最后通过回调函数来获取结果。   SQL注入:在让用户提供值的位置,破坏了原来的SQL命令,加入新的条件或者SOL命令。 防止SOL注入:**先对用户提供的值进行过滤,过滤后再去拼接到SOL命令 占位符(?):过滤后的值会自动替换占位符,完成拼接   1.练习: //假设获取到了客户端传递员工的编号,执行SQL命令,删除编号对应的员工。 console.log(r) if (r.affectedRows === 0) { console.log('删除失败') } else { console.log('删除成功') }  

SQL命令 结果
查询命令 数组
删除命令 对象,通过affectedRows属性判断是否删除成功
插入命令 对象
修改命令 对象,通过changedRows属性判断是否修改成功
  2.练习 假设获取了客户端传递过来的一条员工的数据,格式为对象,包含的属性有姓名、性别、生日、工资、所属部门编号;执行SQL命令,将这条数据插入到数据库 var obj = { ename: 'Gacce', sex: '1', birth: '1996-12-04', salary: 50000, deptid: 20 } //执行sql命令 //null自增 '?'占位符 connection.query('insert into emp values (null,?,?,?,?,?)', [obj.ename, obj.sex, obj.birth, obj.salary, obj.deptid], (err, r) => { if (err) { throw err } console.log(r); }) //简便写法 connection.query('insert into emp set ?', [obj], (err, r) => { if (err) { throw err } console.log(r); }) 3.练习 假设已经获取到了客户端传递的要修改的员工数据,格式为对象,包含的属性有编号、姓名、性别、生日、工资、所属部门编号;执行SQL命令,修改编号对应的这个员工。 var obj = { ename: 'Gacce', sex: '1', birth: '1996-12-04', salary: 50000, deptid: 20 } connection.query('update emp set ? where eid=?', [obj, obj.eid], (err, r) => { if (err) { throw err } console.log(r); })   总结:02_mysql // 引入mysql模块 const mysql = require('mysql') // 创建mysql的连接对象,需要提供连接所需要的参数 const connection = mysql.createConnection({ host: '127.0.0.1', port: '3306', user: 'root', password: '', database: 'tedu', //连接后要进入的数据库 //开启一次执行多个SQL命令 多个(multiple)语句(Statements) multipleStatements: true }) // 测试连接 // connection.connect() /* // 执行SQL命令,会自动建立连接 // 是异步方法,通过回调函数获取结果 connection.query('select * from dept',(err, r) => { // err 可能产生的错误结果 if(err) { throw err } // r 成功的结果 console.log(r) }) // 假设已经从客户端获取了一个员工的姓名,执行SQL命令,查询出该员工的这条数据。 var str = 'xxx" || "1' // 'select * from emp where ename="xxx" || "1"' connection.query(`select * from emp where ename="${str}"`, (err, r) => { if(err) { throw err } console.log(r) }) // 防止SQL注入:先把用户提供的值进行过滤,过滤后再去拼接 var str = 'tom' connection.query( // ? 占位符,过滤后要替换的位置 `select * from emp where ename=?`, [str], //数组中的值就会被mysql模块进行过滤 (err, r) => { if(err) { throw err } console.log(r) }) //假设获取到了客户端传递员工的编号,执行SQL命令,删除编号对应的员工。 var id = 8 connection.query( ` delete from emp where id=?`, [id], (err, r) => { if (err) { throw err } //r代表SQL命令执行成功的结果,格式为对象;如果对象下的属性affectedRows值为o说明删除失败,否则就是删除成功 console.log(r) if (r.affectedRows === 0) { console.log('删除失败') } else { console.log('删除成功') } }) //1练习:假设获取了客户端传递过来的一条员工的数据,格式为对象,包含的属性有姓名、性别、生日、工资、所属部门编号;执行SQL命令,将这条数据插入到数据库 var obj = { ename: 'Gacce', sex: '1', birth: '1996-12-04', salary: 50000, deptid: 20 } //执行sql命令 //null自增 '?'占位符 connection.query('insert into emp values (null,?,?,?,?,?)', [obj.ename, obj.sex, obj.birth, obj.salary, obj.deptid], (err, r) => { if (err) { throw err } console.log(r); }) //简便写法 connection.query('insert into emp set ?', [obj], (err, r) => { if (err) { throw err } console.log(r); }) //练习:假设已经获取到了客户端传递的要修改的员工数据,格式为对象,包含的属性有编号、姓名、性别、生日、工资、所属部门编号;执行SQL命令,修改编号对应的这个员工。 var obj = { ename: 'Gacce', sex: '1', birth: '1996-12-04', salary: 50000, deptid: 20 } connection.query('update emp set ? where eid=?', [obj, obj.eid], (err, r) => { if (err) { throw err } console.log(r); //SQL命令执行成功的结果是对象,如果对象下的changedRows属性值为说明修改失败,否则修改成功 if (r.changedRows === 0) { console.log('修改失败') } else { console.log('修改成功)' z++++++++++ } })*/ //一次执行多个SQL命令 connection.query('select * from dept;select * from emp', (err, r) => { if (err) { throw err } console.log(r); }) 3.连接池 创建连接池:可以一次创建一组连接,每次执行SQL命令,就会从连接池中获取一个连接,执行完命令以后再把连接还回去。   createPool() 创建连接池对象,默认连接数量是15 getConnection() 从连接池中获取一个连接 query() 执行SQL命令 release() 释放连接,会把连接归还到连接池 // 引入mysql模块 const mysql = require('mysql') // 创建连接池(createPool),包含一组连接 const pool = mysql.createPool({ host: '127.0.0.1', port: '3306', user: 'root', password: '', database: 'tedu', connectionLimit: 15 //设置连接池的数量 }) //获取一个连接,通过回调函数来获取 pool.getConnection((err, connection) => { //err 可能获取失败的结果 if (err) { throw err } //connection 成功获取的结果 //使用连接执行SQL命令 connection.query('select * from dept', (err, r) => { if (err) { throw err } console.log(r) //把连接归还到连接池 connection.release() }) }) 综合练习: 使用express创建WEB服务器,设置端口;托管静态资源到public目录下,包含文件search.html,点击查询按钮,向服务器发请求(/emp/search); 创建路由器模块emp.is,添加路由(get/search),监听按钮的请求,最后在WEB服务器引入并挂载,添加前缀/emp 最后执行SQL命令查询出该姓名对应的员工,最后响应'查询成功  
app.js //引入express模块 const express = require('express') //引入员工路由器模块 const empRouter = require('./routes/emp') // 创建web服务器 const app = express() // 设置端口 app.listen(3000) // 托管静态资源 app.use(express.static('./public')) //挂载路由器 /user/myreg 前缀/emp app.use('/emp', empRouter) emp.js //引入express模块 const express = require('express') //引入连接模块 const connertion = require('../connection') //创建路由器对象 const router = express.Router() //添加路由 //1.搜索员工(get/search) router.get('/search', (req, res) => { //获取get传递的参数 var obj = req.query console.log(obj) //执行sql命令 connertion.query('select * from emp where ename=?' [obj.ename], (err, r) => { if (err) { throw err } console.log(r) }) res.send('查询成功') }) //暴露路由器对象 module.exports = router search.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>搜索员工</title> </head> <body> <form method="get" action="/emp/search"> <input type="text" placeholder="输入员工姓名" name=""><button>查询</button> </form> </body> </html>  
      练习: 在public目录下新建添加员工网页add.html,点击提交,向服务器发请求(post /emp/add),服务器端获取传递的参数,执行SQL命令,将数据插入到数据库,响应’员工添加成功‘ 0    

标签:console,log,err,mysql,SQL,obj
From: https://www.cnblogs.com/liangdian0828/p/17201228.html

相关文章

  • Mysql基本语句练习
    先从简单的开始:userBehavior:用户行为record:记录增加:向用户行为表添加一条数据insertintouserBehavior(id,name,record,createTime,updateTime)values(1,"gugu","打开了......
  • mysql备份
    mysql中通过mysqldump进行逻辑备份。1.导出指定表的数据mysqldump-tdatabase-uusername-ppassword--tablestable_name1table_name2 table_name3 >D:\db_scrip......
  • centos 安装clickhouse 并导入mysql数据
    一.安装clickhouse1.系统要求 ClickHouse可以在任何具有x86_64,AArch64或PowerPC64LECPU架构的Linux,FreeBSD或MacOSX上运行。 官方预构建的二进制文件通常针对x86_......
  • 【MYSQL】函数的分类
     数值函数  取随机数四舍五入 截断 弧度和角度  一个圆等于2Π ......
  • mysql 视图 view
    1.创建视图,相对于平时使用的select语句,虚拟表  理解为存储起来的 SELECT 语句CREATEVIEW视图名称AS查询语句CREATEviewrecords_status_viewasSELECTa.idfr......
  • mysql使用DBeaver工具导入数据,隐藏坑
    数据中不能包含",否则会识别失败!   其实是由于数据里面有英文分号,”导致工具识别出错。  将分号去掉即可。......
  • mysql的一些配置解决 Lock wait timeout exceeded; try restarting transaction
    innodb_rollback_on_timeout:默认是off,当为off时,事务如果超时,只会回滚最后条sql 当为on时会回滚事务的所有sqlinnodb_lock_wait_timeout:事务超时时间默认是50s,可以改......
  • 1 MySql基础介绍
    目录1mysql逻辑架构1.1连接管理与安全性1.2优化与执行2并发控制2.1锁粒度2.2表锁2.3行级锁3事务3.1数据库事务四特性3.2隔离级别3.3死锁3.4事务日志3.5MySql......
  • Mysql 根据经纬度计算距离
     方式1:st_distance_spherest_distance_sphere函数返回以米为单位SELECT*,st_distance_sphere(point(lng,lat),point(116.3424590000,40.0497810000))asjuliFR......
  • MySQL开放远程连接权限
    创建一个新的MySQL用户,命令行登录mysql,通过语句创建一个新用户CREATEUSER'username'@'%'IDENTIFIEDBY'your_user_password';让我们授予这个用户一些数据库权限,例......