1.基本概念
1.1 为什么要有数据库
没有数据库,我们的数据都是存储在文件当中的,那么文件存储数据的缺点有:
- 文件的安全性问题。
- 文件不利于对数据的管理
- 文件不利于存放海量数据
- 文件在程序中控制不方便
1.2 什么是数据库
数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,或是数据的仓库
用户可以对文件中的数据运行增加、删除、修改、查询等操作。
前端程序员只需要对数据库有一定了解即可。
浏览器---->服务器---->数据库
1.3 数据库的分类
关系型数据库: 有行和列的结构
- MySQL、
- Oracle、
- SQL Server
- SQLite(安卓)
非关系型数据库 键值对的形式
- mongodb
- redis
- BigTable
1.4 数据库中基本术语
- 数据库
database
:存放数据的仓库,一般一个项目中的数据会存储到一个数据库中 - 表
table
: 一个表对应一类数据,比如学生表,老师表 - 列
columns
:一张表由多列组成,也叫一个字段,比如学生的姓名,成绩,年龄等 - 行
rows
: 一个学生信息对应一行,一行也叫一条记录。
2. 数据库的可视化操作
Navicate仅仅是一个可视化的操作数据库的工具,要想真正的操作数据库中的数据,应该要先连接MySql数据库
2.1 创建数据库
2.2 创建表
存储以下学生信息
{id: 1, name: '张三', age: 18, gender: '男', content: '这是描述信息‘}
2.3 数据类型
int
: 整数类型
varchar
: 字符类型 string
datetime
: 日期类型
3.数据库的常见命令
SQL: 结构化查询语言(Structured Query Language)简称SQL 。用于数据库的增删改查以及管理等功能。
3.1 数据库相关
-
--
SQL中的注释 -
SHOW DATABASES;
查看所有的数据 -
CREATE DATABASE mydb;
创建数据库 -
DROP DATABASE mydb;
删除数据库 -
USE mydb;
使用数据库
3.2 表相关
SHOW TABLES;
查看当前数据库中所有的表- 创建表
CREATE TABLE user(
id INT auto_increment PRIMARY KEY,
name VARCHAR(255) NOT NULL,
age INT ,
gender VARCHAR(4),
content VARCHAR(255)
)
DROP TABLE user;
删除表
3.3 插入数据
-- 2. 增加语句
-- 语法: insert [into] 表名 (字段1,字段2...) values (值1,值2...);
insert into stuinfo (id,name,gender,age,phone) values (NULL,'张三','男',20,'1302012345');
insert into stuinfo (name,age,gender) values ('李四',21,'男');
insert into stuinfo values (null,"王五","男",21); -- 如果直接写值的话,必须和字段匹配起来,这样写会报错的
insert into stuinfo values (null,"王五","男",21,"1234666"); -- 没有字段的时候,如果要是直接添加值的话,必须和字段对应,不能缺少
3.4 删除数据
-- 3. 删除语句
-- 语法: DELETE FROM 表名 where 条件
DELETE FROM stuinfo where id = 7;
DELETE FROM stuinfo where id = 2 or id = 8;
DELETE FROM stuinfo where id in (4,5,10);
DELETE FROM stuinfo WHERE gender ='男' AND age = 20; -- 通过多条件来删除数据 and 在这里表示并且的关系
DELETE FROM stuinfo WHERE id > 10; -- 还可以根据id的特性
3.5 修改数据
-- 4. 修改语句
-- 语法: UPDATE 表名 set 字段1= 值1,字段2 = 值2... where 条件
UPDATE stuinfo set gender = '男'; -- 如果后面没有跟条件的话,则表示将表中所有的数据中的gender都改成了男
UPDATE stuinfo set gender = '女' WHERE id = 3; -- 将id为3的那条数据中的gender修改为“女”
UPDATE stuinfo set gender = '女' WHERE age = 21 and name = '李四'; -- 将数据表中名字叫"李四"的并且年龄为21的性别修改为"女"
3.6 查询数据
-- 1. 查询的SQL语句 查询出来的数据都是结果集
-- 语法: select * from 表名 where 条件
select * from stuInfo; -- 表示查询所有的数据信息
select id,name,gender from stuinfo; -- 根据指定的字段来查询
select * from stuinfo where id = 2; -- 查询id为2的那一条数据
select name,age from stuinfo where id = 3; -- 查询id为3的那条数据中的name age id
select * from stuinfo where id =3 or id= 5; -- 查询id为3 和5 的那两条数据
select * from stuinfo where id = 2 or id = 3 or id = 4;
select * from stuinfo where id in (2,3,4,5,7); -- 查询id为 2 3 4 5 7 的那些数据
3.7 几个常用函数
count,MAX,MIN,avg
SELECT count(*) FROM stuinfo; -- count用来统计所有的数据条数 会根据里面的参数来进行统计
SELECT count(id) FROM stuinfo; -- 根据id来统计具体的数据条数
SELECT count(phone) FROM stuinfo; -- 根据phone字段来统计具体的条数,如果数据为空则会忽略
SELECT MAX(age) FROM stuinfo; -- 查询年龄中的最大值
SELECT MIN(age) FROM stuinfo; -- 查询年龄中的最小值
SELECT avg(age) FROM stuinfo; -- 查询年龄中的平均值 average 平均值
order by
SELECT * FROM stuinfo order by id; -- order by是用来排序的,默认是以升序进行排序 asc就是升序排序
SELECT * FROM stuinfo ORDER BY id desc;
SELECT * FROM stuinfo ORDER BY age desc; -- desc是降序排列
limit
SELECT * FROM stuinfo ORDER BY id;
select * from stuinfo limit 3; -- 取结果集中的前3条
SELECT * FROM stuinfo ORDER BY id limit 3;
-- limit n (索引) m (数量) 数据表中数据的索引默认也是从0开始的,索引只会对剩下的数据进行排序
SELECT * FROM stuinfo ORDER BY id LIMIT 3, 3;
-- 还可以这样来实现一个分页 limit count(数量) offset index(索引);
SELECT * FROM stuinfo ORDER BY id limit 3 offset 0; -- 从索引为0的位置向下查询3条
SELECT * FROM stuinfo ORDER BY id limit 3 offset 3; -- 从索引为3的位置向下查询3条
SELECT * FROM stuinfo ORDER BY id limit 3 offset 6; -- 从索引为6的位置向下查询3条
-- 经过上面的规律可以总结如下:
int pageCount = 3 ; -- 每页显示的条数
int pageSize = 1 ; -- 当前的页码 1 第1页 2 第2页 3 第3页
SELECT * FROM stuinfo ORDER BY id LIMIT pageCount offset (pageSize - 1)* pageCount;
4. node操作mysql
4.1 基本使用
- 安装
npm install mysql
- 基本使用
// 引入模块
let mysql = require('mydql')
let conn = mysql.createConnection({
host:'127.0.0.1',
user:'root',
password:'root',
database:'qianduan39'
})
4.2 查询语句
var name = 'rose'
// 使用?表示占位,可以防止sql注入
connect.query(`select * from user where name=?`, name, (err, result) => {
if (err) return console.log('错误了', err)
console.log(result)
})
4.3 插入语句
connect.query(
'insert into user (name, age, gender, content) values (?, ?, ?, ?)',
['小菠萝', 18, '男', '哈哈哈哈'],
err => {
if (err) return console.log('错误', err)
console.log('添加成功了')
}
)
// 方式2
connect.query(
'insert into user set ?',
{
name: 'jerry',
age: 30,
gender: '男',
content: '哈哈哈'
},
(err, result) => {
if (err) return console.log('错误', err)
console.log('添加成功了', result)
}
)
4.4 修改语句
connect.query(
'update user set ? where id = ?',
[
{
name: 'john',
age: 30,
gender: '男',
content: '哈哈哈'
},
10
],
(err, result) => {
if (err) return console.log('错误', err)
console.log('添加成功了', result)
}
)
4.5 删除语句
connect.query('delete from user where id = ?', [10], (err, result) => {
if (err) return console.log('失败', err)
console.log(result)
})