node知识点总结(十一)

150 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第28天,点击查看活动详情

前言

大家好呀,我是L同学。在上篇文章node知识点总结(十)中,我们学习了sql语句,包括带where子句的查询、模糊查询、统计查询、查询结果排序、限制查询结果等相关知识点。今天,在这篇文章中,我们来学习其他sql语句,包括添加数据、修改数据、删除数据、node中的mysql模块、mysql模块的使用步骤等相关知识点。

sql语句

添加数据

基本的格式: insert into 表名 .....

往表里添加数据有三种方式。

方式一:指定字段和值,只要字段和值对应即可。和顺序无关。

insert into heroes (字段, 字段, ...) values (值, 值, ...)
insert into heroes (nickname, age, name) values ('哈哈', 98, '科加斯')

方式二:和顺序有关,因为没指定字段,所以值必须是所有的值,而且顺序和表中字段的顺序要一致。

insert into heroes values (null, '拉克丝', '光辉女郎', '女', 28)

方式三:使用set里设置新数据的值,没有顺序关系。

insert into heroes set 字段=值, 字段=值, ....
insert into heroes set name='李青', nickname='盲僧'

修改数据

格式: update 表名 set 字段1=值1, 字段2=值2,... where 修改条件

修改表中的哪一条(几条)数据的 字段1=值1...需要注意的是, 不指定修改条件会修改所有的数据。

加条件修改:

update heroes set age=28, skill='在地上打滚' where id=19

如果不指定条件,则会修改所有的行:

update heroes set sex='女'

删除数据

格式: delete from 表名 where 删除条件

delete from heroes where id=19

需要注意的是,不指定条件将删除所有数据。 不加条件,将删除所有的数据,危险操作。

delete from heroes

删除stu表:drop table stu

node中的mysql模块

mysql模块是一个第三方模块,专门用来操作MySQL数据库。 可以执行增删改查操作。

curd: 就代表数据库的增删改查

c: create 就是添加 (增)

u: update 就是修改 (改)

r: read 就是查询 (查)

d: delete 就是删除 (删)

mysql模块的使用步骤

在Node中使用MySQL模块一共需要5个步骤:

  1. 加载 MySQL 模块
  2. 创建 MySQL 连接对象
  3. 连接 MySQL 服务器
  4. 执行SQL语句
  5. 关闭链接

1. 加载mysql模块

const mysql = require('mysql');

2. 创建连接对象(设置连接参数)

const conn = mysql.createConnection({
    // 属性:值
    host: 'localhost',
    port: 3306,
    user: 'root',
    password: '',
    database: 'xx'
});

3. 连接到MySQL服务器

conn.connect();

4. 完成查询(增删改查)

conn.query(SQL语句, [SQL中占位符的值], (err, result, fields) => {
    err: 错误信息
    result: 查询结果
    fields: 当前查询过程中涉及到的字段信息,一般用不着
});

5. 关闭连接,释放资源

conn.end();

要完成增删改操作,只需要将SQL语句换成增删改语句即可。

对于增删改语句,返回的result是一个表示SQL执行结果的对象。其主要属性如下:

  • insertId 添加时有该属性,表示新增数据的id
  • affectedRows 受影响行数,表示受影响的行数。增删改的时候都有该属性
  • changRows 改变的行数,修改操作的时候,会有该属性

占位符模式的增删改查

SQL中的“?” 就是占位符。比如:

  • select * from heroes where id > ?
  • insert into heroes set ?
  • update heroes set ? where id = ?
  • delete from heroes where id = ?

当SQL语句中使用了占位符,则query方法需要使用参数2为这些占位符传递实际的值。并且不同的 "?" 需要的值格式也不同。具体要符合下面三种要求:

  1. SQL中有 1 个占位符,则query方法的第二个参数设置为一个值
  2. SQL中有 多 个占位符,则query方法的第二个参数设置为数组,数组中的值按顺序分别传递给每个占位符
  3. SQL中,如果 字段=值,字段=值...使用 “?” 站位了,则需为这个 “?” 传递一个对象,形式如下:
let val = {
    // 字段: 值
    name: '压缩',
    nickname: '疾风剑豪',
    // 其他...
}
let sql = 'select * from heroes where id < ?';
conn.query(sql, 3, (err, result) => {
    if (err) throw err;
    console.log(result);
});