查询
1 where 是条件
2 order by 1升序 2降序
3 limit 1 第几个开始 2 长度 几个
Navicat 数据库
使用:
数据库新+建数据库
在数据库 + 新建表:就是输入表头,第一个为主键(类型可以设置自动递增就设置)
- id 学号,唯一
- name 姓名
- age 年龄
- sex 性别
- hobby 爱好
- height 身高
- weight 体重
主键:有两个特点(唯一,非空),能够帝国为到唯一的一行数据(比如:id就是唯一的)
自定递增:数字自增长(如id)
保存后:刷新
★(1)数据查询:
select 字段名,字段名(查找指定的) from 表名(stu)
1 查询所有学生的 学号 和 姓名
select id,name from stu
2 查询学生的全部信息 (全部字段信息)
select * from stu
3 查询学号为2的学生的所有信息
select * from stu where id=2
4 查询年龄大于等于25的学生的学号、姓名、年龄
select name,id,age from where age>=25
5 查询年龄在23-28之间的学生的所有信息
select * form stu where age>=23 and age<=28
select * from stu where age between 23 and 28
模糊查询
% 代表任意长度(包括0)的任意字符
_ 代表1位长度的任意字符
举栗:认真看
a%b : ab abb asdfb
a_b: acb atb
a_b%: acb a&baaad
like:在执行模糊查询时,必须使用like来作为匹配
1 查询名字中第一个字是 “王” 的同学
select * from stu where name like '王%'
2 查询名字第一个字是 “王” ,但是名字只有两个字
select * from stu where name like '王_'
3 查询名字中包含有 “王” 的同学
select * from stu where name like '%王%'
查询结果排序 升序 降序(从大到小)
order by 可以对查询结果按照某个字段进行升序和降序排序
升序 asc(从小到大:默认值) , 降序 desc
可进行排序的字段通常是 整型 英文字符串型 日期型 (中文字符串也行,但一般不用)
1 查询所有的同学,根据age升序排列
select * from stu order by asc:默认值
2 查询年龄大于30岁的同学,并根据age降序排列
2 查询所有的同学,根据age降序排列,如果年龄相同,则根据身高升序排列
select * from stu where age>30,order by age desc
限制查询结果
格式 limit 从第几个开始,删几个
1 查询年龄最大的3名同学
select * from stu order by age desc limit 0,3 (默认是从0开始)
2 假设所有的同学要分页显示,每页显示5名同学
第一页
select * from stu order by id limit 0,5
第二页
select * from stu order by id limit 5,5
第三页
select * from stu order by id limit 10,5
注意顺序:where、order by、limit如果一起使用,是有顺序的,
where在最前面、其次是order by、limit要放到最后==。
★(2)添加数据
格式 insert into 表明(字段名1,字段2,...) values(值1,值2,...)
注意:字段的顺序要和值的顺序是一致的
方式一
指定字段和值,只要字段和值对应。和顺序无关
insert into stu(sex,weight,name) values ('男',60,'王晨')
方式二 添加所有字段
和顺序有关系,因为没指定字段,所有值必须是所有的值,而且顺序和表中字段的顺序要一致
insert into stu values (null,'老汤',23,'男','打游戏,打球,打人',176.72)
方式三
使用set里设置新数据的值,没有顺序关系
insert into stu set weight=80,name='许莉莉',age=20
★(3)修改数据
格式: update 表明 set 字段1=值1,字段2=值2,...where 修改条件
注意:不指定修改会修改所有数据
方式一 (危险操作)
修改所有人的体重为80
update stu set weight = 80
方式二
修改id为1的同学的体重为90
update stu set weight =90,where id =1
方式三
修改id大于10的所有的同学的体重为100
update stu set weight=100,where id>10
方式四
修改id为1的同学的体重为110,身高为180,年龄为35
update stu set weight=110,height=180,age=35, where id=1
★(4)删除数据
格式:delete from 表明 where 删除条件
注意:不指定条件将删除所有数据
方式一
删除id大于10的同学
delete from stu where id>10
方式二
不加条件,全部删除了
delete from stu
方式三
删除atu表
drop table stu
方式四
删除库 库名在反引号
drop database 数据库名
★★node中的mysql模块
mysql模块是一个第三方模块,专门用来操作mysql数据库,可以执行增删改查作用
如果前面没有安装过其它模块,需要先初始化
npm i mysql
语法:
curd:就代表数据库的增删改查
c:create 就是添加(增)
u:update 就是修改(改)
r:read 就是查询(查)
d:delete 就是删除(删)
★★★★mysql基本用法:
在node张使用mysql模块一共需要5个步骤:
1 加载mysql模块
2 创建mysql链接对象
3 链接mysql服务器
4 执行sql语句
5 关闭链接
代码实例:
目标:将student表中所有的数据查询出来并显示到终端
1 加载模块
const mysql = require('mysql')
2 创建mysql链接对像
const connection = mysql.createConnection({
host:'localhost',//指定mysql服务器的ip地址
port:3306,//苹果电脑mysql端口是8888
user:'root', //设置用户名
password:'root',//用户名对应的密码
database:'web70'// 数据库名
})
3 链接mysql服务器
connection.connect()
4 执行sql语句
const sql = 'select * from stu';
★(1)总结 练习
加载mysql模块
const mysql = require('mysql');
设置
const conn = mysql.createConnection({
host: 'localhost',
port:330,
user:'root',
password:'root',
database:'web70'
})
链接服务器
conn.connect()
增删改查
conn.query()
关闭链接
conn.end()
Node模块化
模块化:就是一个js文件可以引入另一个js文件
局部变量:局部变量只能在局部使用,如:在其它js文件中不可使用
方式一
全局变量:global,module.exports = {变量名,变量名}
在另一个js文件引入:require('./xx')可以省略后缀名
方式二
模仿第三方包,1 创建node_modules 2 里创建一个文件(自定义aaa) 3 里创建一个index.js文件(规范index.js)
引入,require('直接引入'),不需要写./和后缀名
封装模块化:
方式一 这个方法有点麻烦,推荐使用方式二的方法
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
方式二
使用函数封装
导出直接 module.exports = 函数名---这里不用写大括号-直接写函数名即可
引入:require('./xxx') , db(参数1,参数2,参数3)
留言板:步骤
数据库start
1 设计数据库,存储表:id,userName,content,time
时间格式 [moment第三方包(转成你想要的格式)] year 2004,data 2004-06-05,time 2004-07-07 12:12:12
2 模拟留言数据
数据库end
准备:
1 创建一个文件 node
小总结:
获取数据库的数据之后,res响应数据,为什么只能用render方法?
body-parer// 是获取ajax到前台发送到后台的数据
ajax获取到的数据,通过body-parer可以获取到数据
name type content
事件格式 moment插件 (yyyy年MM月DD日)当前年月日
send 是template里的方法
location.reload()局部刷新
jquery的val()添加值就是修改,不添加就是获取值
箭头函数 不能获取this
通过e事件对象 去找当前的id
MVC 后台编程模式
MVVM 前台编程模式
数据库查询方法:select * from stu where id =? (占位符)
留言板案例小总结(前后台)
需求:
展示列表
获取后台数据,使用模板,把后台数据循环到html里
添加信息
添加: 和form表单有关系
当点击的时候,发送ajax请求
获取表单信息
接收结果,渲染数据
这里总结错误:语法、单词错的太多了
// 删除信息
// 修改信息
cookie:
永久存储在浏览器,设置有效期
浏览器关闭,cookie也关闭
session:
永久存储在服务器的一年
两者的关系:
第一次cookie浏览器向服务器发送请求,服务器会给浏览器一个session
第二次浏览器在向服务器发送请求
cookie原理
第一次向服务器发送请求,服务器给浏览器一个cookie
不管是什么时候这个地址在发送请求的时候,他会自己带着cookie请求
以后在请求就带着cookie,服务器端也可以查看你的cookie的,也可以获取到
把cookie存在header头里
设置cookie
方式一
设置一个cookie 可以设置一个响应头
setHeader('set-cookie','id=99')
setHeader('set-cookie',['id=99','age=18']) 设置多个cookie 可以设置一个响应头
方式二
设置一个状态码,可以设置多个响应头,不能设置有效期
writeHeader(200,{
'Content-type':'text/html; charset=utf-8'
'set-cookie':[type=10],name=my
})
方式三
使用express服务器,res.set设置,可以设置有效期
时间方法:Date.now()
let t = new Date(Date.now() + 10601000).toUTCString();//10分钟有效期
请求有关系的:
req.url
req.method
req.headers
session有效期
当服务器关闭后,session消失
可以导出,函数、对象
module.exports = 函数或对象
刷新页面
location.reload()
添加内容
浏览器
包含账号密码的表单是后来添加到页面中的元素,所以给button绑定点击事件
把账号和密码发送给服务器 /checkUser 接口
获取到填写的账号和密码
发送ajax请求,提交账号
在session从存储用户的是否登录
session记录用户信息,是否登录
session判断?如果登录成功就显示:form表单,不成功提示一下
点击按钮发送留言:
点击,获取留言内容
发送给服务器使用ajax
数据库中不为null,服务端必须全部填写信息,不然会出错
注册页面:
点击注册按钮的时候,通过formData收集表单数据,发送给服务器/reguser 接口
1 使用ajax发送数据到服务器
要设置contentType:false、processData:false
2 服务器接收数据,使用第三包来接收formdata里的数据
学习第三包(multer),来处理formdata
实现文件上传中间件、fd收集的信息必须设置两个属性:contentdata:false\prossdata:false
一个是留言---如果没有留言,就不会在留言表里显示
一个是用户,登录,或者注册的都会存在用户里