建表

MySQL程序可以使用PHP study集成工具。链接、操作数据库可以使用phpstudy自带的工具也可以使用navicat工具。

SQL语句-增删改查

  1. 插入数据

    1
    insert into 表名(字段名1,字段名2) values(值1,值2);

    例如:

    1
    insert into user(name,description) values('陈浩南','铜锣湾扛把子');

    image-20200704162719944

  2. 删除数据

    1
    delete from 表名 where 条件;

    条件一定要写,如果不写则会删除该表中所有的数据删除。

    例如:

    1
    delete from user where id>3;
  3. 修改数据

    1
    update 表名 set 字段名1=新值1,字段名2=新值2 where 条件;

    条件一定要写,如果不写则会修改数据表中的全部数据

    例如:

    1
    update user set name='子风兄',description='比波波还骚' where id=3;
  4. 查询数据

    1
    select * from 表名 [where 条件];

    image-20200704164131234

NodeJs操作数据库

NodeJs链接数据库需要使用模块mysql。基本结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var mysql = require("mysql");
// 创建一个链接数据库的链接
var connection = mysql.createConnection({
// 数据库地址
host: "localhost",
// 数据库账号
user: "root",
// 数据库密码
password: "root",
// 数据库名(非表名)
database: "study",
});
// 打开链接
connection.connect();

// 具体语句
// .....

connection.end();

连接与关闭链接可以不写。

1
2
3
4
5
6
7
8
connection.query("select * from user", (error, result, fields) => {
// 如果查询遇到错误,则error代表错误。没有错误则为null
console.log(error);
// 执行sql语句得到的结果。如果查询遇到错误,则为undefined
console.log(result);
// 字段信息
console.log(fields);
});

result

image-20200704170616466

fields

image-20200704170635370

其他查询方法

  1. 以什么开头

    1
    select * from hero where heroName like "马%";

    image-20200706192609590

  2. 以什么结尾

    1
    select * from hero where heroName like "%韦";

    image-20200706192724093

  3. 包含什么内容

    1
    select * from hero where heroName like "%魔%";

    image-20200706192800250

  4. 并且条件

    1
    select * from hero where heroName like "%魔%" and isDelete='false';

    可用and链接多个条件。

    image-20200706193125673

  5. 或条件

    1
    select * from hero where heroName like "%魔%" or heroName like "%信%";

    image-20200706193321722

  6. 排序

    • 降序

      1
      select * from hero where heroName like "%魔%" or heroName like "%信%" order by id desc;

      image-20200706193441568

    • 升序

      默认为升序

      1
      select * from hero where heroName like "%魔%" or heroName like "%信%" order by id asc;

      image-20200706193535578

    • 分页

      倒序情况下拿到前20条数据

      1
      select * from hero  order by id desc limit 0,20;

      image-20200706193830578

    • 连表查询

      1
      select 字段 from1 inner join2 on 对应关系
      1
      select * from horder inner join customer on horder.cid = custom.id;

      可对两个表设置别名,但是后边也要设置别名。

      1
      select * from horder h inner join customer c on h.cid = c.id;

      也可以只查询某个字段。

      1
      select h.id,h.oname,c.price,c.id,c.cname,c.age from horder h inner join customer c on h.cid = c.id;

1
2
3
4
5
6
7
8
9
10
11
12
13
let name = "伦哥";
let description = "这是个描述";
connection.query(
`insert into user(name,description) values('${name}','${description}')`,
(error, result, fields) => {
// 如果查询遇到错误,则error代表错误。没有错误则为null
console.log(error);
// 执行sql语句得到的结果。如果查询遇到错误,则为undefined
console.log(result);
// 字段信息
console.log(fields);
}
);

其中result会返回一个对象,fields返回undefined。其中affectedRows表示受影响的行数,如果大于0则表示新增成功。

image-20200704171121849

1
2
3
4
5
6
let id = 3;
connection.query(`delete from user where id=${id}`, (error, result, fields) => {
if (error == null) {
console.log(result);
}
});

image-20200704172128720

改与新增类似。

1
2
3
4
5
6
7
8
9
10
11
let name = "伦哥";
let description = "这是个描述";
let id = 3;
connection.query(
`update user set name='${name}',description='${description}' where id=${id}`,
(error, result, fields) => {
if (error == null) {
console.log(result);
}
}
);

image-20200704171859547

英雄管理系统-添加接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
app.post("/hero/add", upload.single("heroIcon"), (req, res) => {
// 1.1 接收前端传递过来的参数
console.log(req.file);
console.log(req.body);
let heroIcon = req.file.filename;
let { heroName, heroSkill } = req.body;
// 执行sql语句代码
connection.query(
`insert into hero(heroName,heroSkill,heroIcon) values('${heroName}','${heroSkill}','${heroIcon}');`,
(error, result, fields) => {
if (error == null) {
res.send({
code: 200,
msg: "新增成功",
list: { heroName: heroName, heroSkill: heroSkill },
});
} else {
res.send({
code: 400,
msg: "新增失败",
list: { heroName: heroName, heroSkill: heroSkill },
});
}
}
);
});

英雄管理系统-获取接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
app.get("/hero/all", (req, res) => {
connection.query(
`select id,heroName,heroSkill,heroIcon from hero where isDelete = 0`,
(error, result, fields) => {
if (error == null) {
console.log(result);

res.send({
code: 200,
msg: "查询成功",
list: result,
});
} else {
res.send({
code: 400,
msg: "查询失败",
list: null,
});
}
}
);
});

完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
const express = require("express");
const multer = require("multer");
const mysql = require("mysql");

var connection = mysql.createConnection({
host: "localhost",
user: "root",
password: "root",
database: "study",
});

const app = express();
var upload = multer({ dest: "uploads/" });
app.use(express.static("uploads"));
// 路由
// 参数:heroName heroSkill,heroIcon(文件),
app.post("/hero/add", upload.single("heroIcon"), (req, res) => {
// 1.1 接收前端传递过来的参数
console.log(req.file);
console.log(req.body);
let heroIcon = req.file.filename;
let { heroName, heroSkill } = req.body;
// 执行sql语句代码
connection.query(
`insert into hero(heroName,heroSkill,heroIcon) values('${heroName}','${heroSkill}','${heroIcon}');`,
(error, result, fields) => {
if (error == null) {
res.send({
code: 200,
msg: "新增成功",
list: { heroName: heroName, heroSkill: heroSkill },
});
} else {
res.send({
code: 400,
msg: "新增失败",
list: { heroName: heroName, heroSkill: heroSkill },
});
}
}
);
});

app.get("/hero/all", (req, res) => {
connection.query(
`select id,heroName,heroSkill,heroIcon from hero where isDelete = 0`,
(error, result, fields) => {
if (error == null) {
console.log(result);

res.send({
code: 200,
msg: "查询成功",
list: result,
});
} else {
res.send({
code: 400,
msg: "查询失败",
list: null,
});
}
}
);
});

// 开启服务器
app.listen(3000, () => {
console.log("开启成功");
});