MySQL数据库介绍
什么是数据库
存储数据的仓库。
常见的数据库: MySQL、 Oracle、 Sqlserver、 DB2等。
MySQL简介
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品
数据表的结构和excel一模一样:
- 表结构:
- 和excel表的结构是一样的。
- 每一列都是一类数据 — 字段
- 每一行代表一条数据 — 记录
SQL语句
使用SQL语句就能很方便对数据库进行增删改查操作
数据查询
语法格式:
SELECT 字段名1, 字段名2, …
FROM 表名
[ WHERE <条件表达式> ]
[ ORDER BY <字段名> [ ASC|DESC ]]
[ LIMIT START, LENGTH]
#基本的查询语法
SELECT 字段1,字段2,... FROM 表名
#查询所有的字段
SELECT * FROM 表名
#带条件的查询
SELECT * FROM 表名 WHERE 条件
....
带where子句的查询
select field1, field2… from 表名 查询表中的所有数据
where 可以使用条件来筛选查询出的结果
模糊查询
通配符:
%: 代表任意长度(包括0)的任意字符
_: 代表1位长度的任意字符
a%b : ab abb asdfb
a_b: acb atb
a_b%: acb a&baaad
like: 在执行模糊查询时,必须使用like来作为匹配条件
查询结果排序
order by 可以对查询结果按某个字段进行升序或者降序排列
升序 asc (默认值) , 降序 desc
可进行排序的字段通常是 整型 英文字符串型 日期型 (中文字符串也行,但一般不用)
如果SQL语句中,有where和order by,where一定要放到order by之前。
限制查询结果
limit 用来限制查询结果的起始点和长度
格式: limit var1, var2
var1: 起始点。 查询结果的索引,从0开始。 0代表第一条数据
var2: 长度
where、order by、limit如果一起使用,是有顺序的,where在最前面、其次是order by、limit要放到最后。
** 添加数据**
格式: insert into 表名(字段名1,字段名2,…) values(值1,值2,…)
注意: 字段的顺序要和值的顺序是完全匹配的
自增长类型的主键,可以使用null来填充;MySQL会自动填充数据
如果每个字段都有数据,那么表名后面可以不跟字段名,但是values里面的顺序必须正确
修改数据
格式:
update 表名 set 字段1=值1, 字段2=值2,… where 修改条件
修改表中的哪一条(几条)数据的 字段1=值1…
不指定修改条件会修改所有的数据
删除数据
格式: delete from 表名 where 删除条件
注意:不指定条件将删除所有数据
node中的mysql模块
mysql模块的作用
mysql模块是一个第三方模块,专门用来操作MySQL数据库。 可以执行增删改查操作。
# 如果前面没有安装过其他模块,需要先初始化
npm i mysql
mysql基本用法
在Node中使用MySQL模块一共需要5个步骤:
- 加载 MySQL 模块
- 创建 MySQL 连接对象
- 连接 MySQL 服务器
- 执行SQL语句
- 关闭链接
//1. 加载 mysql 模块
const mysql = require('mysql');
//2. 创建mysql链接对象
const conn = mysql.createConnection({
host: '127.0.0.1', //指定mysql服务器的ip地址
user: 'root', //设置用户名
password: 'root', //用户名对应的密码
database: 'study'
});
//3. 链接mysql服务器
conn.connect();
//4. 执行SQL语句
const sql = 'select * from student';
conn.query(sql, (err, results, fields) => {
console.log(err); // 错误信息
console.log(results); // 查询结果
console.log(fields); // 字段
})
//5. 关闭链接
conn.end();
- 查询 — read
执行查询类型的SQL语句,查询结果(result)是一个数组,每个单元是对象,对象的属性是数据表的字段名
//1. 加载 mysql 模块
const mysql = require('mysql');
//2. 创建mysql链接对象
const conn = mysql.createConnection({
host: '127.0.0.1', //指定mysql服务器的ip地址
user: 'root', //设置用户名
password: 'root', //用户名对应的密码
database: 'study'
});
//3. 链接mysql服务器
conn.connect();
//4. 执行SQL语句
const sql = 'select * from student';
conn.query(sql, (err, results, fields) => {
console.log(err);
console.log(results);
console.log(fields);
})
//5. 关闭链接
conn.end();
占位符模式:
当SQL语句中使用了占位符,则query方法需要使用参数2
//1. 加载mysql模块
const mysql = require('mysql');
//2. 创建mysql链接对象
const conn = mysql.createConnection({
host: '127.0.0.1',
user: 'root',
password: 'root',
database: 'study',
port: 3306 // 设置mysql服务器的端口号,默认的3306可以省略
});
//3. 链接mysql服务器
conn.connect();
//4. 执行SQL语句
//在sql语句中出现的 ? 就是占位符
const sql = 'select * from student where sgender=?';
//当sql语句中有?时,就使用参数2来设置占位符代表的具体值
conn.query(sql, "男", (err, result) => {
if (err) {
return console.log(err);
}
console.log(result);
})
//5. 关闭链接
conn.end();
如果SQL中有多个占位符,则传递数组
let sql = 'select * from student where sage > ? or sgender = ?';
conn.query(sql, [20, '男'], (err, result) => {
if (err) throw err;
console.log(result);
});
- 添加 — create
执行添加类型的SQL语句,查询结果(result)是一个对象,该对象中有两个属性需要记住
- affectedRows: 受影响行数
- insertID: 查询数据的主键值
const mysql = require('mysql');
const conn = mysql.createConnection({
host: '127.0.0.1',
user: 'root',
password: 'root',
database: 'study'
});
conn.connect();
//4. 执行SQL语句
let sql = "insert into student(sname, sage) values ('小明', 16)";
//当执行添加的SQL语句时,返回值是一个对象,在该对象中有两个属性需要记住
// affectedRows: 受影响函数
// insertId: 添加的新数据的主键值,此处就是 sno
conn.query(sql, (err, result) => {
if (err) {
return console.log(err);
}
console.log(result);
})
//5. 关闭链接
conn.end();
- 修改 — update
执行修改类型的SQL语句,查询结果(result)是一个对象,该对象中有 affectedRows 属性
//1. 加载mysql模块
const mysql = require('mysql');
//2. 创建mysql链接对象
const conn = mysql.createConnection({
host: '127.0.0.1',
user: 'root',
password: 'root',
database: 'study',
port: 3306 // 设置mysql服务器的端口号,默认的3306可以省略
});
//3. 链接mysql服务器
conn.connect();
//4. 执行SQL语句
const sql = "update student set sname='初音未来',sgender='女' where sno=6";
conn.query(sql, (err, result) => {
if (err) {
return console.log(err);
}
console.log(result);
})
//5. 关闭链接
conn.end();
占位符模式:
数据修改通常需要两个占位符。 占位符1是要修改的数据,对象形式,属性是数据表字段;占位符2是修改条件,通常是主键值
//1. 加载mysql模块
const mysql = require('mysql');
//2. 创建mysql链接对象
const conn = mysql.createConnection({
host: '127.0.0.1',
user: 'root',
password: 'root',
database: 'study',
port: 3306 // 设置mysql服务器的端口号,默认的3306可以省略
});
//3. 链接mysql服务器
conn.connect();
//4. 执行SQL语句 --- 占位符形式
const sql = "update student set ? where sno=?";
//set 之后是要修改的数据,需要使用对象形式,下标是数据表的字段名
const obj = {
sname: "未来战士",
sgender: "女",
sage: 20
}
const sno = 7;
//当sql语句中出现多个占位符时,参数可以使用数组来设置
//数组中的单元会按照顺序填充到sql语句的?位置
conn.query(sql, [obj, sno], (err, result) => {
if (err) {
return console.log(err);
}
console.log(result);
})
//5. 关闭链接
conn.end();
- 删除 — delete
执行删除类型的SQL语句,查询结果(result)是一个对象,该对象中有 affectedRows 属性
//1. 加载mysql模块
const mysql = require('mysql');
//2. 创建mysql链接对象
const conn = mysql.createConnection({
host: '127.0.0.1',
user: 'root',
password: 'root',
database: 'study',
port: 3306 // 设置mysql服务器的端口号,默认的3306可以省略
});
//3. 链接mysql服务器
conn.connect();
//4. 执行SQL语句
const sql = 'delete from student where sno=6';
conn.query(sql, (err, result) => {
if (err) {
return console.log(err);
}
console.log(result);
})
//5. 关闭链接
conn.end();
占位符模式:
//1. 加载mysql模块
const mysql = require('mysql');
//2. 创建mysql链接对象
const conn = mysql.createConnection({
host: '127.0.0.1',
user: 'root',
password: 'root',
database: 'study',
port: 3306 // 设置mysql服务器的端口号,默认的3306可以省略
});
//3. 链接mysql服务器
conn.connect();
//4. 执行SQL语句 --- 占位符形式
const sql = 'delete from student where sno=?';
conn.query(sql, 7, (err, result) => {
if (err) {
return console.log(err);
}
console.log(result);
})
//5. 关闭链接
conn.end();