常用的 mysql 的操作方法
1. 新增
这里新增
phone,username,password
三个参数,后面的?就是写几个, 对应的[phone, username, password]要和前面的顺序一致。
const sql2 = `INSERT INTO user(phone,username,password) VALUES(?,?,?)`;
const data2 = await query(sql2, [phone, username, password]);
2. 编辑
const sql = `update user set nickname='${nickname}', password='${password}' where id=${id}`;
3. 删除
查询参数 如果是 int 的类型,即前端 number(数字)类型, 既可以不写’ i d ′ , 直接 {id}', 直接 id′,直接{id}, 不要写引号也可以
const sql = `delete from user where id = ${id}`;
4. 查询
4.1 模糊查询
let whereSql = '1 = 1 ';if (username) {whereSql += `and username like '%${username}%'`;}const sql = `select * from user where ${whereSql}`;
4.2 精确查询
let whereSql = '1 = 1 ';if (username) {whereSql += `and username = '${username}'`;}const sql = `select * from user where ${whereSql}`;
4.3 关联查询
关联查询解释:
user 表,包含(id,nickname)
product 表,包含(id,title,price,cover…)多个字段,
star 收藏表,包含(id,title,product_id,user_id),用户收藏了哪些产品,我们只要记录对应商品的 id 和记录人 id 即可,不需要将所有商品信息全部记录。
a. 查询收藏表数据
star.*
代表查询 star 表 所有字段,你可以写, start.id, star.title… 把每个字段都写出来也可以,或者你需要哪个,就写哪个 [关联 product 表查询]
const sql = `select star.*, product.price from starinner join product on product.id = star.product_id`
b. 查询收藏表数据(根据时间排序)desc/asc 俩种排序规则 [关联 product 表查询]
const sql = `select star.*, product.price from starinner join product onproduct.id = star.product_idorder by star.create_time desc`
c. 关联 user 表 && product 表 查询, 这里最多建议关联三个表,不然影响查询性能
const sql = `select star.*, product.price from starinner join product onproduct.id = star.product_idinner join user onuser.id = star.user_idorder by star.create_time desc`
5. 分页查询
let whereSql = '...'1. 计算总数量const totalSql = `SELECT COUNT(*) AS total FROM comment where ${whereSql}`;2. 计算分页const limit = `${(pageIndex - 1) * pageSize},${pageSize}`;3. 查询语句(order和limit顺序不能乱)const sql = `select comment.*, user.nickname, user.avatar from commentinner joinuser on user.id = comment.user_idwhere${whereSql}order by create_time desclimit ${limit}`;
6. 查询更换字段名称
看上面 4.3 的 product 和 star 的表结构,就出现了,俩张表都有 title 字段
star.*
查询 star 表所有字段,其中有 title,product.title 也把 title 查询出来,这样重名子, 只会显示后者
解决方案 1:product.title as productTitle
这个 as 是关键字,mysql 的固定写,productTitle 自己随意定义名字
解决方案 2:product.title productTitle
不写也可以
const sql = `select star.*, product.title as productTitle, product.price from starinner join user onuser.id = star.user_idorder by star.create_time desc`