Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
Nodejs中koa2怎么连接mysql_创想鸟

Nodejs中koa2怎么连接mysql

将查询结果转为对象或者数组

在真实开发中,实际上某些查询结果应该放入到一个对象中

JSON_OBJECT:()中是key-value的形式

SELECT products.id as id, products.title as title, products.price as price, products.score as score,JSON_OBJECT('id', brand.id, 'name', brand.name, 'rank', brand.phoneRank, 'website', brand.website) as brandFROM products LEFT JOIN brand ON products.brand_id = brand.id;

Nodejs中koa2怎么连接mysql

在多对多关系中,我们希望查询到的是一个数组:

比如一个学生的多门课程信息,应该是放到一个数组中的;

数组中存放的是课程信息的一个个对象;

这个时候我们要JSON_ARRAYAGG和JSON_OBJECT结合来使用;

Nodejs中koa2怎么连接mysql

SELECT stu.id, stu.name, stu.age,JSON_ARRAYAGG(JSON_OBJECT('id', cs.id, 'name', cs.name)) as coursesFROM students stuLEFT JOIN students_select_courses ssc ON stu.id = ssc.student_idLEFT JOIN courses cs ON ssc.course_id = cs.idGROUP BY stu.id;

mysql2的使用

安装mysql2:

npm install mysql2

简单使用:

const mysql = require('mysql2');// 1.创建数据库连接const connection = mysql.createConnection({  host: 'localhost',  port: 3306,  database: 'coderhub',  user: 'root',  password: 'Coderwhy888.'});// 2.执行SQL语句const statement = `  SELECT * FROM products WHERE price > 6000;`connection.query(statement, (err, results, fields) => {  console.log(results);});

如果我们想要在拿到数据后停止服务,可以在回调函数中写上:

connection.end()

完整代码:

connection.query(statement, (err, results, fields) => {  console.log(results);  connection.end();});

Prepared Statement(预处理语句)

提高性能:将创建的语句模块发送给MySQL,然后MySQL编译(解析、优化、转换)语句模块,并且存储
它但是不执行,之后我们在真正执行时会给?提供实际的参数才会执行;就算多次执行,也只会编译一次,所以性能是更高的;

强调:如果再次执行该语句,它将会从LRU(Least Recently Used) Cache中获取获取,省略了编译statement的时间来提高性能。

// 2.执行SQL语句: 使用 ?来对参数进行占位const statement = `  SELECT * FROM products WHERE price > ? AND score > ?;`connection.execute(statement, [6000, 7], (err, results) => {  console.log(results);});

Connection Pools(连接池)

前面我们是创建了一个连接(connection),但是如果我们有多个请求的话,该连接很有可能正在被占用,那么我们是否需要每次一个请求都去创建一个新的连接呢?

事实上,mysql2给我们提供了连接池(connection pools);

连接池可以在需要的时候自动创建连接,并且创建的连接不会被销毁,会放到连接池中,后续可以继续使用;

百度文心百中 百度文心百中

百度大模型语义搜索体验中心

百度文心百中 22 查看详情 百度文心百中

我们可以在创建连接池的时候设置LIMIT,也就是最大创建个数;

判断是否连接成功

const mysql = require('mysql2');// 1.创建连接池const connections = mysql.createPool({  host: 'localhost',  port: 3306,  database: 'coderhub',  user: 'root',  password: 'Coderwhy888.',  connectionLimit: 10});connections.getConnection((err, conn) => {  conn.connect((err) => {    if(err){      console.log('连接失败:',err)    } else {      console.log('数据库连接成功~')    }  })})

简单使用数据库

const mysql = require('mysql2');// 1.创建连接池const connections = mysql.createPool({  host: 'localhost',  port: 3306,  database: 'coderhub',  user: 'root',  password: 'Coderwhy888.',  connectionLimit: 10});// 2.使用连接池const statement = `  SELECT * FROM products WHERE price > ? AND score > ?;`connections.execute(statement, [6000, 7], (err, results) => {  console.log(results);});

Promise方式

const mysql = require('mysql2');// 1.创建连接池const connections = mysql.createPool({  host: 'localhost',  port: 3306,  database: 'coderhub',  user: 'root',  password: 'Coderwhy888.',  connectionLimit: 10});// 2.使用连接池const statement = `  SELECT * FROM products WHERE price > ? AND score > ?;`connections.promise().execute(statement, [6000, 7]).then(([results,fields]) => {  console.log(results);}).catch(err => {  console.log(err);});

sequelize

对象关系映射(ORM):是一种程序设计的方案:

从效果上来讲,它提供了一个可在编程语言中,使用虚拟对象数据库的效果;

Node当中的ORM我们通常使用的是sequelize;

Sequelize是用于Postgres,MySQL,MariaDB,SQLite和Microsoft SQL Server的基于Node.js 的ORM;

它支持非常多的功能;

如果我们希望将Sequelize和MySQL一起使用,那么我们需要先安装两个东西:

mysql2:sequelize在操作mysql时使用的是mysql2;

sequelize:使用它来让对象映射到表中;

npm install sequelize mysql2

Sequelize的使用

Sequelize的连接数据库:

第一步:创建一个Sequelize的对象,并且指定数据库、用户名、密码、数据库类型、主机地址等;

第二步:测试连接是否成功;

const { Sequelize } = require('sequelize');const sequelize = new Sequelize('coderhub', 'root', 'Coderwhy888.', {  host: 'localhost',  dialect: 'mysql'//连接的数据库类型:mysql,mongoose});sequelize.authenticate().then(() => {  console.log("连接数据库成功~");}).catch(err => {  console.log("连接数据库失败~", err);});

Sequelize的单表操作

const { Sequelize, DataTypes, Model, Op } = require('sequelize');const sequelize = new Sequelize("coderhub", 'root', 'Coderwhy888.', {  host: 'localhost',  dialect: 'mysql'})//1.首先我们需要将数据库中的一张表映射成一个class类class Product extends Model {}Product.init({  id: {    type: DataTypes.INTEGER,    primaryKey: true,//主键    autoIncrement: true//自动增长  },  title: {    type: DataTypes.STRING,    allowNotNull: false//是否可以为空  },  price: DataTypes.DOUBLE,  score: DataTypes.DOUBLE}, {//与数据库的表进行映射的配置  tableName: 'products',  createdAt: false,  updatedAt: false,  sequelize});//存放操作数据库的代码async function queryProducts() {  //1.查询数据库中product表中所有的内容  const result1 = await Product.findAll({    where: {//在这里配置条件      price: {        [Op.gte]: 5000//意思是价格大于等于5000        //gte:大于等于,gt:大于,lt:小于,lte:小于等于      }    }  });  console.log(result1);  // 2.插入数据  const result2 = await Product.create({    title: "三星Nova",    price: 8888,    score: 5.5  });  console.log(result2);  // 3.更新数据  const result3 = await Product.update({    price: 3688  }, {    where: {      id: 1    }  });  console.log(result3);}queryProducts();//执行这个函数可以实现对数据库的操作

Sequelize的一对多操作

const { Sequelize, DataTypes, Model, Op } = require('sequelize');const sequelize = new Sequelize("coderhub", 'root', 'Coderwhy888.', {  host: 'localhost',  dialect: 'mysql'});//数据库的第一个表: 主表class Brand extends Model {};Brand.init({  id: {    type: DataTypes.INTEGER,    primaryKey: true,    autoIncrement: true  },  name: {    type: DataTypes.STRING,    allowNotNull: false  },  website: DataTypes.STRING,  phoneRank: DataTypes.INTEGER}, {  tableName: 'brand',  createdAt: false,  updatedAt: false,  sequelize});//数据库的第二个表:附表class Product extends Model {}Product.init({  id: {    type: DataTypes.INTEGER,    primaryKey: true,    autoIncrement: true  },  title: {    type: DataTypes.STRING,    allowNotNull: false  },  price: DataTypes.DOUBLE,  score: DataTypes.DOUBLE,  brandId: {    field: 'brand_id',    type: DataTypes.INTEGER,    references: {//这张表使用了Brand的id作为外键      model: Brand,//product这张表使用了Brand这个表,所以product必须放在下面      key: 'id'    }  }}, {  tableName: 'products',  createdAt: false,  updatedAt: false,  sequelize});// 将两张表联系在一起Product.belongsTo(Brand, {  foreignKey: 'brandId'//外键});async function queryProducts() {  const result = await Product.findAll({    include: { //这里是联合查询:意思是包含别的表的信息      model: Brand    }  });  console.log(result);}queryProducts();

Sequelize的多对多操作

const { Sequelize, DataTypes, Model, Op } = require('sequelize');const sequelize = new Sequelize("coderhub", 'root', 'Coderwhy888.', {  host: 'localhost',  dialect: 'mysql'});// Student表class Student extends Model {}Student.init({  id: {    type: DataTypes.INTEGER,    primaryKey: true,    autoIncrement: true  },  name: {    type: DataTypes.STRING,    allowNotNull: false  },  age: DataTypes.INTEGER}, {  tableName: 'students',  createdAt: false,  updatedAt: false,  sequelize});// Course表class Course extends Model {}Course.init({  id: {    type: DataTypes.INTEGER,    primaryKey: true,    autoIncrement: true  },  name: {    type: DataTypes.STRING,    allowNotNull: false  },  price: DataTypes.DOUBLE}, {  tableName: 'courses',  createdAt: false,  updatedAt: false,  sequelize});// StudentCourse表:关系表class StudentCourse extends Model {}StudentCourse.init({  id: {    type: DataTypes.INTEGER,    primaryKey: true,    autoIncrement: true  },  studentId: {//与Student表建立关系    type: DataTypes.INTEGER,    references: {      model: Student,      key: 'id'    },    field: 'student_id'  },  courseId: {//与Course表建立关系    type: DataTypes.INTEGER,    references: {      model: Course,      key: 'id'    },    field: 'course_id'  }}, {  tableName: 'students_select_courses',  createdAt: false,  updatedAt: false,  sequelize});// 多对多关系的联系:Student StudentCourse CourseStudent.belongsToMany(Course, {  through: StudentCourse,  foreignKey: 'studentId',//这里是Student与StudentCourse,所以外键是studentId  otherKey: 'courseId'//StudentCourse与Course,所以外键是courseId});//与上面类似Course.belongsToMany(Student, {  through: StudentCourse,  foreignKey: 'courseId',  otherKey: 'studentId'});async function queryProducts() {  const result = await Student.findAll({    include: {//所有学生的选课情况      model: Course    }  });  console.log(result);}queryProducts();

以上就是Nodejs中koa2怎么连接mysql的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/263800.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小米12上滑搜索在哪里关闭_小米12上滑搜索的关闭方法
上一篇 2025年11月4日 09:53:45
linux怎么修改dns
下一篇 2025年11月4日 09:53:52

相关推荐

  • mysql是什么类型的数据库?

    mysql是什么类型的数据库?mysql是什么类型的数据库?mysql是什么类型的数据库?mysql是什么类型的数据库?

    MySQL是一种开源、跨平台的关系型数据库管理系统,以其速度、可靠性、易用性、高性能、可扩展性和兼容性而著称。它广泛应用于Web开发、数据仓库、电子商务、金融服务、医疗保健等领域。 MySQL:关系型数据库管理系统 MySQL 是一种关系型数据库管理系统(RDBMS),用于创建、管理和查询数据库。它…

    2026年9月24日 • 用户投稿
    800
  • mysql是什么结构的数据库

    mysql是什么结构的数据库mysql是什么结构的数据库mysql是什么结构的数据库mysql是什么结构的数据库

    MySQL数据结构基于关系模型,由表组成,其中行代表记录,列代表字段。表由主键唯一标识,外键连接不同表中的数据。MySQL支持多种数据类型,索引提高查询性能。外键在表之间建立关系,创建复杂的数据结构。 MySQL 数据库结构 MySQL 是一种关系型数据库管理系统 (RDBMS),其数据结构基于关系…

    2026年9月24日 • 用户投稿
    900
  • mysql用的什么数据结构

    mysql用的什么数据结构mysql用的什么数据结构mysql用的什么数据结构mysql用的什么数据结构

    MySQL 使用行和列的数据结构来组织数据,并提供存储引擎(如 InnoDB,使用 B+ 树索引)来高效地查找数据。B+ 树索引、散列索引、位图索引和全文索引等索引结构根据数据类型和查询类型进行优化,以提高数据检索速度。 MySQL 使用的数据结构 MySQL 是一种关系型数据库管理系统,它使用以下…

    2026年9月24日 • 用户投稿
    200
  • mysql命令行工具是什么

    mysql命令行工具是什么mysql命令行工具是什么mysql命令行工具是什么mysql命令行工具是什么

    MySQL命令行工具是一款命令解释器,用于管理MySQL数据库服务器。其功能包括连接到服务器、创建/删除数据库、表和数据,以及查询、管理用户和监控性能。使用方法:打开命令提示符,输入”mysql”命令,再输入用户名和密码即可连接。常用的命令有:创建数据库(CREATE DAT…

    2026年9月24日 • 用户投稿
    000
  • mysql数据恢复主要采用什么命令执行

    mysql数据恢复主要采用什么命令执行mysql数据恢复主要采用什么命令执行mysql数据恢复主要采用什么命令执行mysql数据恢复主要采用什么命令执行

    MySQL 数据恢复命令主要有:mysqldump:导出数据库备份。mysql:导入 SQL 备份文件。pt-table-checksum:验证并修复表完整性。MyISAMchk:修复 MyISAM 表。InnoDB 技术:自动恢复已提交事务,或手动通过 innobackupex 工具恢复。 MyS…

    2026年9月24日 • 用户投稿
    100
  • mysql数据库使用什么语言

    mysql数据库使用什么语言mysql数据库使用什么语言mysql数据库使用什么语言mysql数据库使用什么语言

    MySQL 数据库使用 Structured Query Language (SQL),一种用于与关系型数据库交互的编程语言。SQL 由四种类型的语句组成:数据定义语言 (DDL):创建/修改数据库结构数据操纵语言 (DML):插入/更新/删除/检索数据数据控制语言 (DCL):授予/撤销访问权限事…

    2026年9月24日 • 用户投稿
    000
  • mysql怎么读取数据

    mysql怎么读取数据mysql怎么读取数据mysql怎么读取数据mysql怎么读取数据

    如何从 MySQL 中读取数据?MySQL 提供了多种方法来读取数据,最常用的方法是使用 SELECT 语句。其他方法还包括游标、存储过程和触发器。 如何从 MySQL 中读取数据 MySQL 提供了多种方法来读取数据,最常用的方法是使用 SELECT 语句。 SELECT 语句 语法: SELEC…

    2026年9月24日 • 用户投稿
    200
  • mysql数据库中的自增列如何使用

    自增列是MySQL中用于自动产生唯一数值的整数列,通常作为主键使用。通过AUTO_INCREMENT属性,插入数据时若未指定值,系统会自动分配比当前最大值大1的数值,确保每条记录拥有唯一标识,简化插入操作。创建表时可定义自增列,如:CREATE TABLE users (id INT AUTO_IN…

    2026年9月24日
    100
  • mysql和sql server区别大吗

    mysql和sql server区别大吗mysql和sql server区别大吗mysql和sql server区别大吗mysql和sql server区别大吗

    MySQL和SQL Server的区别在于:1.许可证:MySQL开源免费,SQL Server需要付费许可证;2.平台:MySQL跨平台,SQL Server主要针对Windows;3.数据类型:MySQL提供多种数据类型,SQL Server提供更全面的数据类型;4.查询引擎:MySQL使用In…

    2026年9月24日 • 用户投稿
    100
  • mysql和sql server一样吗

    mysql和sql server一样吗mysql和sql server一样吗mysql和sql server一样吗mysql和sql server一样吗

    否,MySQL 和 SQL Server 并非相同。它们是两种不同的关系型数据库管理系统(RDBMS),尽管共享 SQL 兼容性和关系数据模型,但存在以下关键差异:所有权:MySQL 为开源,SQL Server 为专有。许可:MySQL 为免费,SQL Server 为商业许可。架构:MySQL …

    2026年9月24日 • 用户投稿
    200
  • mysql和sql server差别大吗

    mysql和sql server差别大吗mysql和sql server差别大吗mysql和sql server差别大吗mysql和sql server差别大吗

    是的,MySQL 和 SQL Server 之间存在显著差异。功能差异包括存储过程、触发器和全文搜索能力。特性差异包括高可用性、可扩展性、并发性。许可差异在于 MySQL 是开源和免费的,而 SQL Server 是专有软件。支持差异体现在 SQL Server 提供更全面的技术支持,而 MySQL…

    2026年9月24日 • 用户投稿
    100
  • 如何断开mysql数据库连接

    如何断开mysql数据库连接如何断开mysql数据库连接如何断开mysql数据库连接如何断开mysql数据库连接

    为了断开 MySQL 数据库连接,需要按以下步骤进行:创建连接对象获取连接游标关闭游标关闭连接 如何断开 MySQL 数据库连接 要断开 MySQL 数据库连接,可以使用以下步骤: 1. 创建连接对象 首先,使用 connect() 函数创建到数据库的连接对象,该函数需要一个数据库连接参数字符串作为…

    2026年9月24日 • 用户投稿
    200
  • mysql的索引有哪些类型

    mysql的索引有哪些类型mysql的索引有哪些类型mysql的索引有哪些类型mysql的索引有哪些类型

    MySQL索引可快速查找数据,通过在键值对中存储列值和数据指针实现。常见的索引类型有:B-Tree索引:支持范围查询,数据量大时性能佳。哈希索引:完全匹配查询快,但更新数据开销大。全文索引:索引文本数据,支持全文搜索。空间索引:索引地理空间数据,支持空间查询。并发B-Tree索引:高并发环境下性能更…

    2026年9月24日 • 用户投稿
    100
  • mysql下载初始化数据库失败怎么办

    mysql下载初始化数据库失败怎么办mysql下载初始化数据库失败怎么办mysql下载初始化数据库失败怎么办mysql下载初始化数据库失败怎么办

    初始化 MySQL 数据库失败可能是由于以下原因:服务未启动权限不足数据库已存在配置问题磁盘空间不足数据库引擎错误其他未知原因(可查看日志文件) MySQL 下载初始化数据库失败的解决方案 初始化 MySQL 数据库时遇到失败的情况,可能是以下几个原因导致的: 1. MySQL 服务未启动 确保 M…

    2026年9月24日 • 用户投稿
    200
  • mysql下载初始化数据库失败怎么回事

    mysql下载初始化数据库失败怎么回事mysql下载初始化数据库失败怎么回事mysql下载初始化数据库失败怎么回事mysql下载初始化数据库失败怎么回事

    MySQL 初始化数据库失败的原因包括:1. 系统权限不足;2. 安装文件损坏;3. 防火墙或安全软件阻止连接;4. 数据库端口冲突;5. 磁盘空间不足;6. 操作系统版本不兼容;7. 环境变量问题;8. 损坏的配置文件;9. 之前的 MySQL 安装残留;10. 其他错误。请检查这些原因并采取相应…

    2026年9月24日 • 用户投稿
    100
  • 袋鼠数据库工具 8.90.1 版已上线

    袋鼠数据库工具 8.90.1 版已上线袋鼠数据库工具 8.90.1 版已上线袋鼠数据库工具 8.90.1 版已上线袋鼠数据库工具 8.90.1 版已上线

    袋鼠数据库工具 是一款由 ai 驱动的主流数据库系统客户端,支持多种数据库类型,包括 mariadb、mongodb、mysql、oracle、postgresql、redis、sqlite、sqlserver 等,具备建表、数据查询、模型设计、结构同步、数据导入导出等丰富功能。兼容 windows…

    2026年9月24日 • 用户投稿
    100
  • Java程序Ubuntu上如何备份

    在ubuntu上备份java程序,你可以遵循以下步骤: 确定备份位置:首先,你需要确定一个安全的位置来存储备份文件。这可以是一个外部硬盘、网络驱动器或其他任何可靠的存储设备。 打包Java项目:你可以使用tar命令将整个Java项目打包成一个压缩文件。例如,如果你的项目位于/home/usernam…

    2026年9月24日
    100
  • mysql下载初始化数据库失败怎么解决

    mysql下载初始化数据库失败怎么解决mysql下载初始化数据库失败怎么解决mysql下载初始化数据库失败怎么解决mysql下载初始化数据库失败怎么解决

    MySQL 初始化数据库失败可通过以下步骤解决:1. 检查安装程序版本;2. 确保管理员权限;3. 关闭其他应用程序;4. 重新配置 MySQL 配置文件(取消注释 innodb_flush_log_at_trx_commit 并设置 innodb_file_per_table、innodb_log…

    2026年9月24日 • 用户投稿
    100
  • mysql数据库怎么实现

    mysql数据库怎么实现mysql数据库怎么实现mysql数据库怎么实现mysql数据库怎么实现

    MySQL数据库实现步骤:安装MySQL服务器;创建数据库;创建用户并授予权限;连接到数据库;创建表;插入数据;查询数据;修改数据;删除数据;备份数据库。 MySQL数据库实现 如何实现MySQL数据库? 实现MySQL数据库涉及以下步骤: 1. 安装MySQL服务器 从MySQL官方网站下载并安装…

    2026年9月24日 • 用户投稿
    000
  • mysql数据库的完整步骤有哪些

    mysql数据库的完整步骤有哪些mysql数据库的完整步骤有哪些mysql数据库的完整步骤有哪些mysql数据库的完整步骤有哪些

    创建 MySQL 数据库步骤:安装 MySQL、创建数据库、创建表、插入数据、检索数据、更新数据、删除数据,维护数据库。具体步骤:安装 MySQL使用语法 CREATE DATABASE 创建数据库使用语法 CREATE TABLE 创建表使用语法 INSERT INTO 插入数据使用语法 SELE…

    2026年9月24日 • 用户投稿
    200

发表回复

登录后才能评论
关注微信