(精华)2020年7月8日 Node.js mysql的使用
MYSQL数据库命令
操作之前应连接某个数据库
1、建表
命令:create table <表名> ( <字段名> <类型> [,…<字段名n> <类型n>]);
mysql> create table MyClass(
> id int(4) not null primary key auto_increment,
> username char(20) not null,
> score char(50) not null )
> ;
2、获取表结构
命令:desc 表名,或者show columns from 表名
mysql>DESCRIBE MyClass
mysql> desc MyClass;
mysql> show columns from MyClass;
3、删除表
命令:drop table <表名>
例如:删除表名为 MyClass 的表
mysql> drop table MyClass;
4、插入数据
命令:insert into <表名> [( <字段名>[,…<字段名n > ])] values ( 值 )[, ( 值n )]
例如,往表 MyClass中插入二条记录, 这二条记录表示:编号为的名为Tom的成绩为.45, 编号为 的名为Joan 的成绩为.99,编号为 的名为Wang 的成绩为.5.
mysql> insert into MyClass values(1,'Tom',96.45),(2,'Joan',82.99), (2,'Wang', 96.59);
5、查询表中的数据
1)、查询所有行
命令:select <字段,字段,…> from < 表名 > where < 表达式 >
例如:查看表 MyClass 中所有数据
mysql> select * from MyClass;
2)、查询前几行数据
例如:查看表 MyClass 中前行数据
mysql> select * from MyClass order by id limit 0,2;
或者:
mysql> select * from MyClass limit 0,2;
6、删除表中数据
命令:delete from 表名 where 表达式
例如:删除表 MyClass中编号为 的记录
mysql> delete from MyClass where id=1;
7、修改表中数据:update 表名 set 字段=新值,…where 条件
mysql> update MyClass set username='Mary' where id=1;
7、在表中增加字段:
命令:alter table 表名 add字段 类型 其他;
例如:在表MyClass中添加了一个字段passtest,类型为int(4),默认值为
mysql> alter table MyClass add passtest char(50) default ' ';
8、更改表名:
命令:rename table 原表名 to 新表名;
例如:在表MyClass名字更改为YouClass
mysql> rename table MyClass to YouClass;
更新字段内容
update 表名 set 字段名 = 新内容
update 表名 set 字段名 = replace(字段名,‘旧内容’,‘新内容’)
UPDATE MyClass SET username = 'Fred' WHERE id = 1
MYSQL数据库连接
安装mysql
yarn add mysql
或者
npm install mysql
1 .mysql 通过 createConnection
- createConnection方法创建连接对象
正式的说法是 使用createConnection方法创建一个表示与mysql数据库服务器之间连接的connection对象
1.1 mysql连接数据库
const mysql = require("mysql");
/*建立数据库链接 连接配置 */
var conn = mysql.createConnection({host:'127.0.0.1',user: 'root',password: 'root', // 修改为你的密码port: '3306',database: 'ruanmoutest' // 请确保数据库存在
});// 连接conn.connect((err) => {if(err) {throw(err);}console.log('数据库连接成功!')
})
1.2 操作数据库
// 查询 conn.query()
// 创建表
const CREATE_SQL = `CREATE TABLE IF NOT EXISTS test (id INT NOT NULL AUTO_INCREMENT,username VARCHAR(45) NULL,age INT NULL,message VARCHAR(45) NULL,PRIMARY KEY (id))`;
const INSERT_SQL = `INSERT INTO test(username,age,message) VALUES(?,?,?)`; // 使用占位符
const SELECT_SQL = `SELECT * FROM test`;
conn.query(CREATE_SQL, (err, data) => {if (err) {throw err;}// 插入数据conn.query(INSERT_SQL, ['song','10',"hello,world"], (err, result) => {if (err) {throw err;}console.log(result);conn.query(SELECT_SQL, (err, results) => {console.log(JSON.stringify(results));conn.end(); // 若query语句有嵌套,则end需在此执行})});
});
2 mysql 连接 通过 createPool
- createPool连接池
连接池有助于减少连接到MySQL服务器的时间,通过重用以前的连接
可以避免查询的延迟,减少建立新连接所带来的开销。
在开发web应用程序时,连接池是一个很重要的概念。建立一个数据库连接所消耗的性能成本是很高的。在服务器应用程序中,如果为每一个接收到的客户端请求都建立一个或多个数据库连接,将严重降低应用程序性能。
因此在服务器应用程序中通常需要为多个数据库连接创建并维护一个连接池,当连接不再需要时,这些连接可以缓存在连接池中,当接收到下一个客户端请求时,从连接池中取出连接并重新利用,而不需要再重新建立连接。
//createPool
var pool = mysql.createPool(optioins);
options参数包含createConnection方法中可以使用的各种属性
//getConnection
//err为错误对象,connection为获取到的连接对象。
从连接池中取出连接。
//可以获取到连接对象 操作后建议主动的释放连接
pool.getConnection(function(err,connection))
//release
release方法将其归还到连接池中
connection.release();
//destroy
当一个连接不再需要使用且需要从连接池中移除时用connection对象的destroy方法。
connection.destroy();
连接移除后,连接池中的连接数减一
//end
当一个连接池不再需要使用时,用连接池对象的end方法关闭连接池。
pool.end();
2.1 mysql连接数据库
const mysql = require('mysql');
// options参数包含createConnection方法中可以使用的各种属性
const pool = mysql.createPool({host:'127.0.0.1',user: 'root',password: 'root', // 修改为你的密码port: '3306',database: 'ruanmoutest' // 请确保数据库存在
});
2.2 操作数据库 ,同上
const CREATE_SQL = `CREATE TABLE IF NOT EXISTS test (id INT NOT NULL AUTO_INCREMENT,username VARCHAR(45) NULL,age INT NULL,message VARCHAR(45) NULL,PRIMARY KEY (id))`;
const INSERT_SQL = `INSERT INTO test(username,age,message) VALUES(?,?,?)`; // 使用占位符
const SELECT_SQL = `SELECT * FROM test`;pool.getConnection(function(err,conn){if (err) {throw(err);}// 插入数据conn.query(INSERT_SQL, ['laney','20',"test"], (err, result) => {if (err) {throw err;}console.log(result);conn.query(SELECT_SQL, (err, results) => {console.log(JSON.stringify(results));conn.end(); // 若query语句有嵌套,则end需在此执行// conn.release(); //释放连接})});})
2 mysql2
mysql2 是mysql的一个扩展
安装:
yarn add mysql2
或者
npm install mysql2
如果你希望 用链式结构写数据库连接, 可以选择 mysql2, 其他用法基本和mysql的使用一样
const mysql = require(‘mysql2/promise’)
(async () => {// mysql2 是mysql的一个扩展const mysql = require('mysql2/promise')// 连接配置const cfg = {host:'127.0.0.1',user: 'root',password: 'root', // 修改为你的密码port: '3306',database: 'ruanmoutest' // 请确保数据库存在}const connection = await mysql.createConnection(cfg)let ret = await connection.execute(`CREATE TABLE IF NOT EXISTS test (id INT NOT NULL AUTO_INCREMENT,message VARCHAR(45) NULL,PRIMARY KEY (id))`)console.log('create', ret)ret = await connection.execute(`INSERT INTO test(message)VALUES(?)`, ['ABC'])console.log('insert:', ret)ret = await connection.execute(`SELECT * FROM test`)console.log(JSON.stringify(ret[0]))// console.log(ret[1])connection.end()
})()
2 mysql 连接 通过 sequelize
第一步:创建一个sequelize对象实例:
const Sequelize = require('sequelize');var sequelize = new Sequelize(config.database, config.username, config.password, {host: config.host,dialect: 'mysql',pool: {max: 5,min: 0,idle: 30000}
});
第二步,定义模型Pet,告诉Sequelize如何映射数据库表:
var Pet = sequelize.define('pet', {id: {type: Sequelize.STRING(50),primaryKey: true},name: Sequelize.STRING(100),gender: Sequelize.BOOLEAN,birth: Sequelize.STRING(10),createdAt: Sequelize.BIGINT,updatedAt: Sequelize.BIGINT,version: Sequelize.BIGINT
}, {timestamps: false});
3:使用
(async () => {const Sequelize = require("sequelize");// 建立连接const sequelize = new Sequelize("ruanmoutest", "root", "root", {host: "localhost",dialect: "mysql",operatorsAliases: false});// 定义模型,建表const Fruit = sequelize.define("Fruit", {name: {type: Sequelize.STRING(20),allowNull: false},price: {type: Sequelize.FLOAT,allowNull: false}}, {timestamps: false});Fruit.prototype.totalPrice = function (count) {return (this.price * count).toFixed(2);};// 同步数据库,force: true则会删除已存在的表let ret = await Fruit.sync({force: false})ret = await Fruit.create({name: "香蕉",price: 3.5})ret = await Fruit.create({name: "西瓜",price: 20})ret2 = await Fruit.findAll()console.log(ret2);// 使用实例方法Fruit.findAll().then(fruits => {const [f1] = fruits;fruits.forEach((option, index) => {console.log(option);})console.log(`买5kg${f1.name}需要¥${f1.totalPrice(5)}`);});//找出某一个水果Fruit.findOne({where: {name: "香蕉"}}).then(fruit => {// fruit是首个匹配项,若没有则为nullconsole.log(fruit.get());});console.log('findAll', ret.amount, JSON.stringify(ret))})();
用sequelize.define()定义Model时,传入名称pet,默认的表名就是pets。第二个参数指定列名和数据类型,如果是主键,需要更详细地指定。第三个参数是额外的配置,我们传入{ timestamps: false }是为了关闭Sequelize的自动添加timestamp的功能。所有的ORM框架都有一种很不好的风气,总是自作聪明地加上所谓“自动化”的功能,但是会让人感到完全摸不着头脑。
(精华)2020年7月8日 Node.js mysql的使用相关推荐
- (精华2020年5月17日更新) vue实战篇 手写vue底层源码
MYvue.js 主要作用监听属性变化 class MYvue {constructor(options) {this.$options = options;this.$data = options. ...
- (精华)2020年8月17日 浏览器功能与组成
浏览器应该有的功能 网络:浏览器通过网络模块来下载各式各样的资源,例如html文本:javascript代码:样式表:图片:音视频文件等.网络部分本质上十分重要,因为它耗时长,而且需要安全访问互联网上 ...
- .net mysql 类库_(精华)2020年6月27日 C#类库 MySqlHelper(Ado.net数据库封装)
using EFCore.Sharding; using MySql.Data.MySqlClient; using System; using System.Collections.Generic; ...
- (精华)2020年8月7日 微信小程序 直播功能的实现
一:小程序代码端 小程序直播使用小程序组件 live-pusher 组件和live-player组件 首先开通直播权限 小程序开发工具内进行推流拉流都不会成功,所以需要使用两个手机进行推拉流测试: 1 ...
- (精华)2020年10月7日 高并发高可用 Redis实现异步架构
前言 在后端编程时,对需要立即返回的数据我们应当立刻返回,而对于可以慢慢处理而业务复杂的我们可以选择延迟返回.这个实现使用到了异步消息队列. 异步消息队列 主要用于实现生产者-消费者模式.也就是说,这 ...
- (精华2020年6月9日更新)Angular实战篇 axio的封装
首先先建个axio服务 ng g service 文件目录 ts文件 import { Injectable } from '@angular/core'; import axios from 'ax ...
- (精华)2020年8月22日 ABP vNext Web应用ABP
现在我们开始创建基于RazorPage的web应用.在解决方案中添加新的Asp.Net Core Web应用项目,名称为ZL.AbpNext.Poem.Web,然后安装volo.Abp.AspNetC ...
- (精华2020年6月2日更新) TypeScript的数据类型
第一种:布尔类型(boolean) var flag:boolean=true;flag = false; //正确 flag = '你好typescript'; //错误 第二种:数字类型(numb ...
- (精华)2020年8月22日 ABP vNext WebAPI应用ABP
上一节我们创建了基于Razor Page的简单应用,如果我们希望创建单页面应用或者移动应用,就需要通过Web Api调用应用层.Abp提供了从应用层到Web Api的自动映射,我们只需要增加少量的代码 ...
最新文章
- 阿里副总裁、达摩院自动驾驶负责人王刚离职,将开启创业之路
- python turtle画气球-python windows下显示托盘区气球消息
- mysql5.6开发版_mysql-tutorial/2.2.md at master · liuxiaoqiang/mysql-tutorial · GitHub
- 取消对 null 指针“l”的引用。_C语言编程笔记丨C 语言指针 5 分钟教程
- CodeSmith实用技巧(八):生成的代码输出到文件中
- Fantageek翻译系列之《使用Autolayout显示变化高度的UITableViewCell》
- 变量提升、作用域this实战(真题:看代码输出)
- python 消息框架_消息框架message
- [面试] 算法(七)—— 逆序输出链表
- DOT HERE AGAIN
- springboot网上图书商城源码
- 信息安全三级易错题总结
- iOS App技术支持网址(URL)
- 从公司角度来看,为什么要招实习生?
- java多线程百米赛跑_JAVA CountDownLatch(倒计时计数器)用法实例
- SEO优化方案及SEO操作流程-邹川
- [租房]刚步入社会的小萌新,休想坑小妹妹,安排!
- 疫情来袭,遵义微红科技微商下单系统助力企业转型微商!
- 那些令你憎恶的系统从何而来?
- 一文搞懂SOLID原则(javascript)
热门文章
- 硬盘分别接主板、阵列卡,系统盘盘符不为sda的解决方法
- R语言使用cox函数构建生存分析回归模型、使用subgroupAnalysis进行亚组分析并可视化森林图
- MSM8953 audio dts 代码跟踪
- 【图像压缩】超先验模型 《VARIATIONAL IMAGE COMPRESSION WITH A SCALE HYPERPRIOR》
- 浙里办单点登录-PHP-TP5-轻松上手
- BGP Lab AS-path prepend last-as
- 粮食大篷车 首进宁波郎官社区 当年新米受欢迎
- 计算机考试属于相对性评价还是绝对性评价,相对性评价和绝对性评价
- 【数据结构】测试2 线性表
- 知识付费项目,你是学会了,还是学废了?