持续创作,加速成长!这是我参与「掘金日新计划 · 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个步骤:
- 加载 MySQL 模块
- 创建 MySQL 连接对象
- 连接 MySQL 服务器
- 执行SQL语句
- 关闭链接
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为这些占位符传递实际的值。并且不同的 "?" 需要的值格式也不同。具体要符合下面三种要求:
- SQL中有 1 个占位符,则query方法的第二个参数设置为一个值
- SQL中有 多 个占位符,则query方法的第二个参数设置为数组,数组中的值按顺序分别传递给每个占位符
- 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);
});