Mysql workbench操作

image-20220114153835161

建用户

image-20220114153904735

建表

image-20220114153923573

其中 PK:主键、唯一标识

​ NN:值不允许为空

​ UQ:值唯一

​ AI:值自动增长

​ default:默认值

向表中写入数据

image-20220114155458447

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

image-20220114170003695

查询数据

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这样的技术额外请求页面的数据。

例如:

image-20220114173801417

优点:

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,那么就可以使用前后端分离的开发模式。

为了同时兼顾了首页的渲染速度和前后端分离的开发效率,一些网站采用了首屏服务器端渲染+其他页面前后端分离的开发模式。