nodejs操作mysql数据库
0.准备首先安装mysql和navicat配置:1.什么是数据库在应用中很多数据一定要保存起来,例如操作日志,用户信息,聊天记录(数据的重要性的体现)需要支持数据存储的容器,数据库主要就是当做数据存储的容器(可以将变量化(瞬时状态)的数据变成持久化数据)【游离状态:变量,计算机一关闭就小时了。持久化:变量转换成文件,永久存在】数据库原理:test文本就是一个最简单的数据库2.使用数据库
0.准备
首先安装mysql和navicat
配置:
1.什么是数据库
- 在应用中很多数据一定要保存起来,例如操作日志,用户信息,聊天记录(数据的重要性的体现)
- 需要支持数据存储的容器,数据库主要就是当做数据存储的容器(可以将变量化(瞬时状态)的数据变成持久化数据)【游离状态:变量,计算机一关闭就小时了。持久化:变量转换成文件,永久存在】
- 数据库原理:test文本就是一个最简单的数据库
2.使用数据库
- 使用navicat连接到mysql
- mysql是关系数据库,存储单元是表,较大存储单元是库(创建表)
- 数据库—存储数据仓库(多个),每个数据库有多个表
- 首先创建容器(创建数据库)—新建约束
- 表的创建一定要根据实际情况,表主要是用来描述实体的信息
- 多表的时候,不同表之间构建成一种应用模型
- 本质:实际上对应用进行建模
- 电商类项目:
- 商品表
- 用户表
- 商家用户表
- 操作表
- 订单表
- 新建表
- 1.表属性(表字段)表字段用来描述实体具体信息,规则最小的不可分割的
- 2.表属性类型(数据类型以及长度)
- 3.所有表属性中的主键,唯一可表示的一个属性,不能重复
- 类型:
- varchar —-相当于string 长字符串
- 类型:
- 4.约束:指定属性是否为空,高级约束可以设定存入的数据必须要满足的类型
案例:
- 1. 管理用户,掌握用户所发布的商品信息
- 2. 选择完省—>市区—->县
- 3. 登录不同身份:管理员登录可以看一些内容,普通用户登录没有权限
mysql中sql和数据库设计
- 新建查询—sql编辑文本
插入语句
insert into 表名(列1,列2)value(值1,值2);
插入的时候,控制台输出受影响的行数,说明插入成功insert into users(userid,username,password,address,phone,age,sex) values(1,'admin','1234','beijing',136510460,32,'男'); insert into users(userid,username,password,address,phone,age,sex) values(2,'xinxin','1234','beijing',0000,10,'女'); insert into users(userid,username,password,address,phone,age,sex) values(3,'sen','1234','beijing',18462358,22,'男'); insert into users(userid,username,password,address,phone,age,sex) values(4,'yiyi','1234','beijing',6543987,1,'女');
查询语句:
select 列名1,列名2,列名3 from 表名
*表示查询全部select userid,username,sex from users; select * from users;
更新(修改)
用在哪里:
- 1.重置密码
- 2.新用户VIP
- 3.更换个人头像
语法:update 表名 set 列1=新值 where 修改条件
where 是sql中关键字 where 跟随一些判断条件
删除
delete from 表名 where 条件;delete from users where userid=3
除了查询以外,增删改返回结果都是受影响的行数
所以在应用将查询和增删改分开
3.数据库类型
- 关系类型数据库:
- 关系型数据库指的是由表来进行构建数据模型
- 当表个数多的时候,不同的表之间会明显的关系结构
- 优点:
- 关系比较明显,描述的实体之间关系比较明确
- 非关系型数据库:
- 它不是通过表进行构建数据库,是通过文档进行存储,比如mongodb
- 用json进行
{"provinceID":'001',provinceName:'',city:[
{"cityId":'',cityName:'',xian:[
{xianId:'',xianName:''},
{xianID:'',xianName:''},
]}
]}
4.数据库设计三大范式以及数据表关联关系
- 数据表关联关系:
- 一对多 例子:一个省里面有多个市
- 多对一 例子:多个订单归一个用户所有
- 多对多 例子:一个老师会教多个班级,一个班级会有很多个老师教课
- 意义:很多查询中都要借助于关联关系才能更清楚的找到不同数据
- 三大范式:
- 1.每个column都是最小原子项不可分割
- 2.每一行的数据都应该对应其中一个列
- 例如:一个用户同时买了很多个商品,那么用户要是和商品在同一个表里面就会出现一个用户id(column)对应多条数据,所以需要将用户表和商品表拆分。
- 3.数据(列之间)直接关系,一定要是同一个类别的,不能都放在一起
5.条件查询和复杂查询
条件查询
- 1.查询一个用户名为admin 的密码
- 2.and 同时满足and前后条件时
- 3.or 满足or前后一个条件就可以
4.子查询:就是一种查询嵌套,一个查询里面嵌套另一个查询。
- 标准是:内部查询(子查询)返回一个结果 给外层查询(父查询)作为条件
- 写内部查询(查询条件)
select * from users where phone=(select phone from users where username='admin')
- 使用子查询的原因:
-
- where筛选数据,条件都是写死的,不灵活.
-
- 子查询以后,能够实现子查询功能和父查询功能分离,子查询负责返回条件,父查询只要负责筛选结果就行了
-
5.模糊查询:写在where里面,关键字 like
- where id like “%关键字%” ‘%’匹配任意长度的字符串
- where id like “_ 关键字 _ ” ’ _ ‘表示长度为1的任意字符
- where name like “tom[0-5]” [单字符]匹配范围 a[a-c] —aa ab ac
- where name like “tom[^0-5]” 表示匹配除了0-5以外的任意数值
- 用途:用在关键字搜索,高级智能搜索方面
6.连接查询
- 增删改都是单表操作:
- 进行多表操作:
核心点:找准一个两个表中都具有的一个属性,等价于通过这个属性关联两个表, - 例如:用户可以下多个订单(商品表)
设计这个商品表
- 目前一个用户,对应一个或者多个订单信息
userid username id userid 001 admin 1 001 002 xinxin 5 002 查询id为5用户的全部信息 以及购物详情
表连接:
- 全连接:select * from 表1,表2 where 表1.公共属性=表2.公共属性(严格模式下面 成为外键)
解决在复杂情况下,查询内容,出现只要满足表1.公共属性=表2.公共属性 数据都会出现在同一张表里面
如果希望将两张表数据全部合并在一起:
- 左连接:select * from table1 t1(别名) left join table2 t2 on t1.userid = t2.userid;
- 以左表(table1)为基准,右表和左表进行匹配,如果左表中具有右表有的值,匹配上去像是在结果里面,左表里面没有右表的内容的,左表显示空
- 右连接:右边为基准,左表和右表进行匹配,有的话合并到一起,没有的为空
- 分页查询:
- limit获取数据从哪个下标开始,每页数据量
select * from users u left join goods g on u.userid = g.userid limit 6,3;
selest password from user where username='admin'
select * from users where username='admin' and password='1234';
select * from users where username='xin' or password='1234';
select * from users,goods where users.userid=goods.userid;
- limit获取数据从哪个下标开始,每页数据量
6.实现nodeJs访问mysql
- 目前掌握sql使用,但是无法直接从前端访问数据库
- nodejs作为中间界,构建restapi服务,符合restful标准的webservice
- 作用:
- 1.接收前端的任何请球和参数
- 2.访问数据库,从数据库得到结果,反馈给前端
- nodejs 热启动:
cnpm install supervisor -g - 命令行中输入:supervisor dbserver 启动实时刷新
- nodejs 热启动:
- 1.安装下载一个支持mysql的插件
cnpm install mysql –save-dev 2.写dbserver.js连接数据库
3.测试操作数据库
- 条件查询
- 增删改返回的结果是一个对象,对象里面包括了”affectedRows:1”,说明增删改成功,反应了受影响的行数。修改和新增套用sql语句,使用占位符[ ]将结果替换掉
- 在web应用如何去做
view:html+css+js+ajax
controller 控制器里面 webservice
model nodejs+mysql构建应用程序
var mysql = require('mysql'); console.log(mysql); //1.连接数据库需要参数 const DB_CONFIG={ host:'localhost',port:3306, user:'root',password:'123456', database:'node_xin' //数据库实例名字 } const sql ='select * from users where username=? and age=?'; const delete_sql = 'delete from users where userid=23'; //2.连接数据库需要的方法,这个方法有返回结果, /* 连接数据库所用的方法mysql.createConnection({ * host:, * port:, * user:, * password:, * database: * }) * mysql.createConnection返回的是一个连接成功的对象 * 打开连接 conn.connect(); * 打开以后才能操作 * */ var conn=mysql.createConnection(DB_CONFIG); conn.connect();//打开连接 //通过nodejs查询当前的用户列表 console.log("query users list begin**************"); //3.连接成功的操作,在这里输入数据需要的sql(程序和数据库通信语言)语句,数据库就会返回结果 sql 结构化查询语句,[]占位符 在sql中有些变量并不是写死的 而是外部传入的参数 所以通过占位符来表示 //占位符具体值在query方法[]里面进行填充 // conn.query(sql,['admin',32],(err,result)=>{ // if(err){ // console.log(err); // } // console.log(result); // }); conn.query(delete_sql,[],(err,result)=>{ if(err){ console.log(err); } console.log(result); }); console.log("query users list end**************"); conn.end();//关闭连接,释放资源
查询:
var mysql = require('mysql'); console.log(mysql); //1.连接数据库需要参数 const DB_CONFIG={ host:'localhost',port:3306, user:'root',password:'123456', database:'node_xin' //数据库实例名字 } const sql ='select * from users where username=? and age=?'; var conn=mysql.createConnection(DB_CONFIG); conn.connect();//打开连接 conn.query(sql,[],(err,result)=>{ if(err){ console.log(err); } console.log(result); });
删除:
var mysql = require('mysql'); console.log(mysql); //1.连接数据库需要参数 const DB_CONFIG={ host:'localhost',port:3306, user:'root',password:'123456', database:'node_xin' //数据库实例名字 } const add_sql = 'insert into users'+ '(userid,username,password,address,phone,age,sex)'+ 'values(?,?,?,?,?,?,?);' var conn=mysql.createConnection(DB_CONFIG); conn.connect();//打开连接 console.log("query users list begin**************"); conn.query(add_sql,[80,'addsql','1234','beijing',0000,10,'女'],(err,result)=>{ if(err){ console.log(err); } console.log(result); }); console.log("query users list end**************"); conn.end();//关闭连接,释放资源 const dbserver=(sql,[],fn)=>{ }
- 条件查询
更多推荐
所有评论(0)