node操作数据库

下载安装mysql

下载安装Navicat

连接mysql

mysql增删改查

数据库表设计考虑因素

1.表关系

* 一对多关系

* 多对多关系

一对多关系

举例:手机品牌和手机产品的关系--一个品牌下有好多手机产品

brand设计表---以id为表主键,字段brand,type,logo

brand表

products设计表---以id为表主键,字段brand,title,price

products表

问题:查询数据时两张表如何建立联系?
答案:用外键

向products表中插入brand_id,把此字段转化成外键

1.向products表中插入brand_id字段,字段类型为int
app.get('/alter', (req, res) => {
    let sqlStr = 'ALTER TABLE products ADD brand_id int'
    connection.query(sqlStr, (err) => {
        if (err) {
            console.log(err)
        }
    })
    res.send('插入成功')
})
2.把brand_id字段转化成外键
//FOREIGN KEY外键
//REFERENCES涉及
let sqlStr2 = 'ALTER TABLE products ADD FOREIGN KEY(brand_id) REFERENCES brand(id)'
connection.query(sqlStr2, (err) => {
    if (err) {
        console.log(err)
    }
    console.log('修改成外键')
})

效果

给外键赋值

//# 设置brand_id的值
//UPDATE `products` SET `brand_id` = 1 WHERE `brand` = '华为';
//UPDATE `products` SET `brand_id` = 2 WHERE `brand` = '苹果';
//UPDATE `products` SET `brand_id` = 3 WHERE `brand` = '小米';
//UPDATE `products` SET `brand_id` = 4 WHERE `brand` = 'oppo';
问题:node默认不支持执行多条mysql语句
解决:想要执行多条,需要配置{ multipleStatements: true}
const mysql = require('mysql')
//连接数据库
const connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '123456',
    database: 'test',
    multipleStatements: true  
})
connection.connect();

实现方式

let sql = "UPDATE products SET brand_id = 1 WHERE brand = '华为';UPDATE products SET brand_id = 2 WHERE brand = '小米';UPDATE products SET brand_id = 3 WHERE brand = '苹果';UPDATE products SET brand_id = 4 WHERE brand = 'oppo'"
connection.query(sql, (err) => {
    if (err) {
        console.log(err)
    }
    console.log('赋值')
})

效果

进行一对多查询
SELECT a.brand,a.type,b.title,b.price FROM brand a INNER JOIN products b ON a.id = b.brand_id
自己的理解:
SELECT 要获取的字段(表别名.字段--用逗号拼接 )FROM 第1张表名 1表别名 INNER JOIN 第2张表名 2表别名 ON 1表别名.字段=2表别名.字段

app.get('/selectSingle', (req, res) => {
    let str = 'SELECT a.brand,a.type,b.title,b.price FROM brand a INNER JOIN products b ON a.id = b.brand_id'
    connection.query(str, (err, data) => {
        if (err) {
            console.log(err)
        } else {
            res.json({
                code: 200,
                message: '成功',
                result: data
            });
        }
    })

})

最终实现结果

多对多关系

举例:学生和选课的关系--一个学生可以选择多门课程,一门课程可以有多个学生

问题:查询数据时两张表如何建立联系?
答案:用关系表

SQL连接

  • INNER JSON(内连接)
    取两个表的交集

  • LEFT JSON(左连接)
    取两个表相交的部分+左边的部分(保留左表数据,当右表中无左表对应的数据时,最终用null填充)

  • RIGHT JSON(右连接)
    取两个表相交的部分+右表的部分(保留右表数据,当左表中无右表对应的数据时,最终用null填充)

posted @   崛起崛起  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示