进入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();