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