Mysql数据库-----统计、排序、分页、增删改查+Node中操作数据库

进入mysql的三种方法

1.mysql命令交互工具
在这里插入图片描述
输入密码按回车
*输入密码时必须是英文状态,否则会出现闪退
在这里插入图片描述

2.cmd调出控制台
分两种,一种需要密码,一种不用
2.1输入mysql,不需要账号密码,这种是两个不同的库,不常用.
在这里插入图片描述

2.2输入mysql- uroot -p回车,注意空格
*-u代表用户名,后面一般都是用默认root的用户名,-p代表密码
在这里插入图片描述

如果出现以下错误,就是没有设置环境变量
在这里插入图片描述
打开控制面板>系统设置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.Navicat可视化操作数据库

在这里插入图片描述

点击连接,会出现新窗口,其他的默认按确定
在这里插入图片描述

这些称之为库,
一台电脑可以有好多的库,
一个数据库有多个表,
一个表有多个字段(列).
在这里插入图片描述

新建数据库
在这里插入图片描述

数据库名为最好是英文,字符集为了解析中文最好选utf-8
在这里插入图片描述

双击库展开,点击表,新建数据库表,
在这里插入图片描述

示例:
表名:name,类型可不选,varchar:代表可变字符
表名:id,类型int,
允许为空:看自身需求
右边钥匙代表主键,代表id标记这行数值唯一性,不能重复,
可自增
在维护主键的时候,因为主键不能重复,维护起来比较麻烦,所以可以利用自动递增特性让系统帮忙维护
在这里插入图片描述
新建好以后打开,尝试输入相同id会提示报错
在这里插入图片描述

数据库是用来解决什么问题的?

作用:按照数据架构来组织,存储/管理数据的仓库
nodejs用writeFile也是可以写入文件,达到存储数据的目的,但是用这种方式操作数据会非常麻烦.如果是大型网站,数据复杂度非常高,所以用简单的文件操作不显示.
数据储存比较分散,无法集中管理.

常见的数据库分类

关系型数据库(sql数据库)

特点:可以执行sql语句
MySQL:开源数据库,一般互联网公司使用,使用率非常高.
Oracle:大型商业数据库,很多大型项目银行系统都会用Oracle,商业授权非常昂贵.
Microsoft SQL server:微软开发的数据库,闭源收费,用的比较少.

非关系型数据库(No-sql数据库)

特点:不可以执行sql语句
Mongodlb:应用较为广泛的非关系型数据库,nodejs项目较多使用该数据库.
Redis:内存数据库,储存非常快.

连接和操作数据库

SQL语句

查询数据库列表
mysql控制窗:show databases;展示所有数据库列表
*必须加分号,代表语句结束
在这里插入图片描述
创建数据库表
表名:heros

表字段:id(唯一id),name(名字,不能为空值),gender(性别),img(头像),isdelete(是否被删除,默认是0,删除是1)

//因为id是唯一值,我们设置它为主键,同时我们希望没
//插入一条数据,id值会自动增加1,所以把它设置为自动递增auto_increment
create table heros(
	id int not null primary key auto_increment, 
	name varchar(255) not null, 
	gender varchar(255),
	img varchar(255),
	isdelete tinyint default 0)
	character set utf8;

进入数据库

use 数据库名字;

删库命令

drop database 删除的库名;

创建数据库

create database 数据库名字;

创建表的时候,必须先告诉数据库用哪个库

user 数据库名字

如果没有选择数据库,会出现
在这里插入图片描述

表结构创建命令

create table heros(
	id int not null primary key auto_increment, 
	name varchar(255) not null, 
	gender varchar(255),
	img varchar(255),
	isdelete tinyint default 0)
	character set utf8;

查看表结构
desc 表名
在这里插入图片描述

插入数据操作

语法:insert into 表名(字段1,字段2...)value(1,2...);

例子:
在这里插入图片描述

修改数据库

//语法:UPDATE 表名 set 字段1=值1,字段2=值2....where 条件
UPDATE heros set gender = '男'; // 如果后面没有跟条件的话,则表示将表中所有的数据中的gender都改成了男
UPDATE heros set gender = '女' WHERE id = 3; //  将id为3的那条数据中的gender修改为“女”
UPDATE heros set gender = '女' WHERE name = '花木兰'; // 将数据表中名字叫"李四"

删除数据

//语法:DELETE FROM 表名 where 条件
DELETE FROM heros where id = 7;
DELETE FROM heros where id = 2 or id = 8;
DELETE FROM heros where id in (4,5,10);
DELETE FROM heros WHERE gender ='男' AND name = '兰陵王';  // 通过多条件来删除数据  and 在这里表示并且的关系 
DELETE FROM heros WHERE id > 10; // 还可以根据id的特性

查询语句

//语法:  select * from 表名 where 条件 
select * from  heros;  // 表示查询所有的数据信息
select id,name,gender from heros; // 根据指定的字段来查询
select * from heros where id = 2; //查询id为2的那一条数据
select name,gender from heros where id = 3; // 查询id为3的那条数据中的name gender id
select * from heros where id =3 or id= 5; // 查询id为3 和5 的那两条数据
select * from heros where id = 2 or id = 3 or id = 4;
select * from heros where id in (2,3,4,5,7);  // 查询id为 2  3  4  5  7 的那些数据

常用函数

SQL提供用于统计,排序等便捷函数

统计
count方法:用于统计查询数据的条数,注意,统计的数据不为空的数据条.
MAX:查询最大的值
MIN:查询最小的值
avg:查询平均值
*代表所有数据

SELECT count(字段) FROM 表名;
SELECT MAX(字段) FROM 表名;
SELECT MIN(字段) FROM 表名;
SELECT avg(字段) FROM 表名;

排序(order by)
默认升序排序,降序加desc

SELECT * FROM 表名 order by 字段;//默认
SELECT * FROM 表名 order by 字段 desc;

分页
作用:当你数据库很多的时候,没法一次获取完毕,可以通过分页分批查询数据.
limit :表示取多少条
offset:偏移,从哪里开始取多少条

select * from 表名 limit 数量
select * from 表名 order by limit 3 offset 2;

Node中操作数据库

node需要操作数据库,需要依赖mysql第三方库

1.环境的安装
创建文件夹,不能中文
调出控制台,输入npm init项目初始化

示例:出现一大段代码后不断回车(也可以编写),直到Is this OK?按确认
在这里插入图片描述

安装mysql

npm install mysql

例子:
在这里插入图片描述

2.使用
2.1.创建js文件引入mysql

const mysql=require('mysql');

2.2.调用mysql.createConnection({})获取Connection实例

const connection = mysql.createConnection({
    
    
//连接的地址
host:'localhost',
//数据库连接用户名
user:'root',
//密码
password:'写上密码',
//连接的数据库名字
database:'数据库名'
})

对比如下
在这里插入图片描述

2.3调用Connection的connect方法连接数据库

connection.connect();

总示例:

const mysql = require('mysql');

const connection = mysql.createConnection({
    
    
    //连接的地址
    host: 'localhost',
    //数据库连接用户名
    user: 'root',
    //密码
    password: 'yinghua3464',
    //连接的数据库名字
    database: 'user'
});
connection.connect();
connection.query('select * from heros', (error, result, filed) => {
    
    
    // console.log(error);//语法是否错误
    console.log(result)//数据内容
    // console.log(filed)
});
//结束
connection.end();

node执行sql语句

查询

调用connection.query(‘sql语句’,回调函数)
error参数是用来表示sql语句是否执行出错,当没有出错,得到null值,否则就会得到错误信息
result表示查询结果,返回一个数组,数组里面是数据对象,表示一行数据

connection.query('select * from heros',(error,result,filed)=>{
    
    
console.log(result)
})

Ctrl+`调出终端输入node '文件名’可以看log结果
在这里插入图片描述
添加数据
执行完毕可以在MySQL查询数据

function addHero(id, name, gender, img, isdelete) {
    
    
    // 设置sql语句,添加数据
    //数字不需要''
    const sql = `insert into heros (id,name,gender,img,isdelete) values (${
      
      id},'${
      
      name}','${
      
      gender}','${
      
      img}',${
      
      isdelete})`;
    // 调用query方法query(sql语句,回调函数)
    console.log(sql);
    connection.query(sql, (error, result, filed) => {
    
    
        // 如果error为真则说明有错,则打印
        if (error) {
    
    
            console.log(error);
        } else {
    
    
            // 否则就打印数据
            console.log(result);
        }
    })
};
// 调用函数
addHero(null, '花木兰', '女', 'http://www.baidu.com', 1);

修改/替换数据

function updateHero(name, gender, img, id) {
    
    
    // 设置sql语句,替换数据
    const sql = `update heros set name='${
      
      name}',gender='${
      
      gender}',img='${
      
      img}' where id=${
      
      id}`;
    // 调用query方法query(sql语句,回调函数)
    console.log(sql);
    connection.query(sql, (error, result, filed) => {
    
    
        // 如果error为真则说明有错,则打印
        if (error) {
    
    
            console.log(error);
        } else {
    
    
            // 否则就打印数据
            console.log(result);
        }
    })
}
// 调用函数
updateHero('安其拉', '女', 'http://www.baidu.com', 4);

删除数据

function deleteHeroById(id) {
    
    
    // 设置sql语句,删除数据
    const sql = `DELETE FROM heros where id = ${
      
      id};`;
    // 调用query方法query(sql语句,回调函数)
    console.log(sql);
    connection.query(sql, (error, result, filed) => {
    
    
        // 如果error为真则说明有错,则打印
        if (error) {
    
    
            console.log(error);
        } else {
    
    
            // 否则就打印数据
            console.log(result);
        }
    })
}
// 调用函数
deleteHeroById(8);

执行完毕,需要调用end方法结束链接

connection.end();

猜你喜欢

转载自blog.csdn.net/weixin_47886687/article/details/108747448