Mysql workbench操作
建用户
建表
其中 PK:主键、唯一标识
NN:值不允许为空
UQ:值唯一
AI:值自动增长
default:默认值
向表中写入数据
Select Rows 可以修改表的数据
SQL语言只能在关系型数据库中使用(例如MySQL、Oracle、SQL Server),非关系型数据库(例如Mongodb)不支持SQL语言
SQL语句
SELECT语句
SELECT * FROM 表名称
SELECT 列名称,列名称 FROM 表名称
INSERT INTO 语句 用于向数据表中插入新的数据行
INSERT INTO table_name (列1,列2,...) VALUES (值1,值2,...)
-- 例如
INSERT INTO users (username,password) VALUES ('tony stark','098123')
UPDATE 语句 用于修改表中的数据
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
-- 例如;将users表中id 为7的用户密码,更新为 888888,
UPDATE users SET password='888888' WHERE id=7
-- 更新某一行中的若干列
UPDATE users SET password='admin123',status=1 WHERE id=2
DELETE 语句用于删除表中的行
DELETE FROM 表名称 WHERE 列名称=值
-- 例
DELETE FROM users WHERE id=4
WHERE 子句 用于限定选择的标准
select * from users where username<>'ls'
-- 此句为选择不等于ls的行,与下句同义
select * from users where username!='ls'
AND OR 运算符
select * from users where status=0 and id<3
select * from users where status=0 or username='zs'
ORDER BY 子句
ORDER BY 语句 用于根据指定的列对结果集进行排序
默认按照升序记录进行排序
如果希望按照降序进行排序,可以使用DESC关键字
select * from users order by status
select * from users order by status ASC
-- 升序排序
select * from users order by id desc
-- 降序排序
-- 多重排序 对users表中的数据,先按照status字段进行降序排序,再按照username的字母顺序,进行升序排序。
select * from users order by status desc,username asc
COUNT(*) 函数用于返回查询结果的总数据条数
select count(*) from users where status=0
AS为列设置别名
select count(*) as total from users where status=0
Mysql模块
const mysql = require('mysql')
//建立与Mysql 数据库的连接
const db = mysql.createPool({
host:'127.0.0.1',
user:'root',
password:'password',
database:'my_db_01'
})
//检测mysql模块是否正常工作
db.query('select 1',(err,results)=>{
if(err) return console.log(err.message)
//只要能打印出[ RowDataPacket {'1':1}]的结果,就证明数据库链接正常
console.log(results)
})
出现错误
ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
查询数据
db.query('select * from users',(err,results)=>{
if(err) return console.log(err.message)
console.log(results)
})
插入数据
const user = {username:'Spider-Man',password:'pcc321'}
const sqlStr = 'INSERT INTO users (username,password) VALUES (?,?)'
//通过?对数据进行占位
db.query(sqlStr,[user.username,user.password],(err,results)=>{
if(err) return console.log(err.message)
if(results.affectedRows === 1) {
console.log('插入数据成功')
}
})
//插入数据的便捷方式,向表中新增数据时,如果数据对象的每个属性和数据表的字段一一对应,则可以通过如下方式快速插入
const user = {username:'Spider-Man',password:'pcc321'}
const sqlStr = 'INSERT INTO users SET ?'
db.query(sqlStr,user,(err,results)=>{
if(err) return console.log(err.message)
if(results.affectedRows === 1) {
console.log('插入数据成功')
}
})
更新数据
//更新数据
const user = { id:7 ,username:'aaa',password:'000'}
const sqlStr = 'UPDATE users SET username=?,password=? WHERE id=?'
db.query(sqlStr,[user.username,user.password,user.id],(err,results)=>{
if(err) return console.log(err.message)
if(results.affectedRows===1) {
console.log('更新数据成功!')
}
})
//更新数据的便捷方式,向表中新增数据时,如果数据对象的每个属性和数据表的字段一一对应,则可以通过如下方式快速更新
const user = {id:7 ,username:'aaa',password:'000'}
const sqlStr = 'UPDATE users SET ? WHERE id=?'
db.query(sqlStr,[user,user.id],(err,results)=>{
if(err) return console.log(err.message)
if(results.affectedRows === 1) {
console.log('插入数据成功')
}
})
删除数据
const id=7
const sqlStr = 'DELETE FROM users WHERE id=?'
db.query(sqlStr,id,(err,results)=>{
if(err) return console.log(err.message)
if(results.affectedRows === 1) {
console.log('删除数据成功')
}
})
前后端的身份认证
Web开发模式
1、服务端渲染的Web开发模式
服务端渲染的概念:服务器发送给客户端的HTML页面,是在服务器通过字符串的拼接,动态生成的。因此客户端不需要使用Ajax这样的技术额外请求页面的数据。
例如:
优点:
1、前端耗时少,因为服务器端负责动态生成HTML内容,浏览器只需要直接渲染页面即可。尤其是移动端,更省电。
2、有利于SEO。因为服务器端响应的是完整的HTML页面内容,所以爬虫更容易爬取获得信息,更有利于SEO
缺点:
1、占用服务器端资源。即服务器端完成HTML页面内容的拼接,如果请求较多,会对服务器造成一定的访问压力。
2、不利于前后端分离,开发效率低。使用服务器端渲染,则无法进行分工合作,尤其对于前端复杂度高的项目,不利于项目高效开发。
前后端分离的Web开发模式
前后端分离的开发模式,依赖于Ajax技术的广泛应用。简而言之,前后端分离的Web开发模式,就是后端只负责提供API接口,前端使用Ajax调用接口的开发模式。
优点:
1、开发体验好。前端专注于UI页面的开发,后端专注于api的开发,且前端有更多选择性
2、用户体验好。Ajax技术的广泛应用,极大的提高了用户的体验,可以轻松实现页面的局部刷新。
3、减轻了服务器渲染的压力。因为页面最终是在每个用户的浏览器中生成的。
4、不利于SEO。因为完整的HTML页面需要在客户端动态拼接完成,所以爬虫无法爬取页面的有效信息(解决方案:利用Vue、React等前端框架的SSR(server side render)技术能够很好的解决SEO问题)
如何选择Web开发模式
比如企业级网站,主要功能是展示而没有复杂的交互,并且需要良好的SEO,则这是我们就需要使用服务器端渲染;
而类似后台管理项目,交互性比较强,不需要考虑SEO,那么就可以使用前后端分离的开发模式。
为了同时兼顾了首页的渲染速度和前后端分离的开发效率,一些网站采用了首屏服务器端渲染+其他页面前后端分离的开发模式。
- 本文链接:https://archer-lan.github.io/2022/03/04/Node.js%20%E5%AD%A6%E4%B9%A0-08/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。