首页 > 数据库 >node操作数据库

node操作数据库

时间:2023-04-17 14:23:50浏览次数:35  
标签:node err 数据库 UPDATE id products 操作 WHERE brand

下载安装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填充)

标签:node,err,数据库,UPDATE,id,products,操作,WHERE,brand
From: https://www.cnblogs.com/hxy--Tina/p/17318598.html

相关文章

  • python7 用于高级数据类型操作的公共方法
    1.+,*,in‘+’通过此方法可以连接两个数据‘*’通过此方法可以倍数型的复制数据‘in’通过此方法可以查询数据中是否有我们的目标查询数据,返回一个布尔值strA='123'strB='456'print(strA+strB)print(strA*2)print('1'instrA) 注:字符串,列表,元组,字典都可以使用这三种方法......
  • Java中线程的常用操作-后台线程、自定义线程工厂ThreadFactpry、join加入一个线程、线
    场景Java中Thread类的常用API以及使用示例:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/126596884上面讲了Thread的常用API,下面记录下线程的一些常用操作。注:博客:https://blog.csdn.net/badao_liumang_qizhi实现后台线程后台线程,是指运行时在后台提供的一......
  • python+playwright 学习-52 iframe 定位与操作元素,监听事件,执行JS脚本总结
    前言本篇全面总结关于iframe的定位,iframe上元素的操作(输入框,点击等),iframe上的事件监听与iframe上执行JS脚本的总结。iframe对象的定位定位iframe对象,总的来说有四种方法page.frame_locator(selector)通过page对象直接定位iframe对象,传selector选择器参数page.loca......
  • mysql数据库的登录脚本
    ######################## ku脚本:可以使用以下ku脚本,它可以根据提供的参数登录到MySQL数据库:#!/bin/bash#Checkforcorrectnumberofargumentsif[$#-lt1];thenecho"Usage:$0<ip>[<port>][<mysqloptions>]"exit1fi#SettheIPaddressand......
  • C#Winform窗体操作类&控件属性类
    WinForm磁性窗体吸附边缘1#region磁性窗体23publicclassMagneticManager4{5publicclassChildFormInfo6{7publicFormChild{get;set;}8publicMagne......
  • 网络安全与网站安全及计算机安全:如何下载到各版本Kali Linux计算机操作系统
    1、KaliLinux2021.2下载http://old.kali.org/kali-images/kali-2021.2/kali-linux-2021.2-installer-amd64.iso2、KaliLinux2021.1下载http://old.kali.org/kali-images/kali-2021.1/kali-linux-2021.1-installer-amd64.iso3、KaliLinux2020.4下载http://old.kali.org/kali-imag......
  • c#WPF窗体操作类
    WPF窗体屏幕边缘吸附#region侧吸privatenewboolHide=false;//用来表示当前隐藏状态,例如Hide=false就是不在隐藏状态stringtype="";//用来表示窗口隐藏在哪个方向privatevoidSliderTimer_Tick(objectsender......
  • 从 HTTP 到 gRPC:APISIX 中 etcd 操作的迁移之路
    罗泽轩,API7.ai 技术专家/技术工程师,ApacheAPISIXPMC成员。原文链接ApacheAPISIX现有基于HTTP的etcd操作的局限性etcd在2.x版本的时候,对外暴露的是HTTP1(以下简称HTTP)的接口。etcd升级到3.x版本后,其对外API的协议从普通的HTTP切换到了gRPC。为了兼顾......
  • h2数据库
    H2是一个采用Java开发开源的嵌入式SQL数据库。它支持集群,提供JDBC和部分ODBCAPI,采用C/S模型。它还包括一个用于管理数据库的Web客户端,直接使用浏览器作为数据库的管理平台,同时也可以作为MySQL,SQLSERVER,ORACLE等主流数据库的管理工具,多语言支持(包括中文),管理界面具有自动提示功能。......
  • 白帽子黑客教你:如何下载Windows原版操作系统?(2种方式)
    方式一:官网下载1.1百度搜索windows10官方下载,并选择第一个官方网站进入。1.2找到立即下载工具/点击下载2.3双击运行下载好的文件2.4选择接受2.5为另一台电脑创建安装介质(U盘、DVD或ISO文件)/下一步2.6下一步2.7ISO文件/下一步2.8选择下载路径并保存2.9下载完成即......