mySql 数据库
SQL 是用于访问和处理数据库的标准的计算机语言。提供了安全机制、便于通过Sql语句对数据直接进行操作
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。
什么是数据库?
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。
我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。
所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
RDBMS 即关系数据库管理系统(Relational Database Management System)的特点:
- 1.数据以表格的形式出现
- 2.每行为各种记录名称
- 3.每列为记录名称所对应的数据域
- 4.许多的行和列组成一张表单
- 5.若干的表单组成database
需要的软件有:
MySQL服务
navicat
RDBMS 术语
- 数据库: 数据库是一些关联表的集合。
- 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
- 列: 一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。
- 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
- 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
- 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
- 外键:外键用于关联两个表。
- 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
- 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
- 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
- 表头(header): 每一列的名称;
- 列(col): 具有相同数据类型的数据的集合;
- 行(row): 每一行用来描述某条记录的具体信息;
- 值(value): 行的具体信息, 每个值必须与该列的数据类型相同;
- 键(key): 键的值在当前列中具有唯一性。
数据库可视化工具navicat的基本使用
打开和关闭数据库连接
创建用户、设置用户权限
新建数据库、新建表、设计表(设置字段类型)、设置Id自增、日期自动插入
- 示例:
新建users用户表,表字段为:id、name、age、gender、address、isdel
Id自增:设置为主键,勾选自动递增
主键:是用来标识数据表中每一行数据的唯一性的,确保独一无二性。
使用Sql语句对数据库执行基本操作
查询 :
1 -- 查询的SQL语句 查询出来的数据都是结果集2 -- 语法: select * from 表名 where 条件 3 -- && 用 and 代替 || 用 or 代替 ! 用 not 代替4 select * from stuInfo; -- 表示查询所有的数据信息5 select id,name,gender from stuinfo; -- 根据指定的字段来查询6 select * from stuinfo where id = 2; -- 查询id为2的那一条数据7 select name,age from stuinfo where id = 3; -- 查询id为3的那条数据中的name age id8 select * from stuinfo where id =3 or id= 5; -- 查询id为3 和5 的那两条数据9 select * from stuinfo where id in (2,3,4,5,7); -- 查询id为 2 3 4 5 7 的那些数据
增加 :
1 -- 增加语句2 -- 语法: insert [into] 表名 (字段1,字段2...) values (值1,值2...);3 insert into stuinfo (id,name,gender,age,phone) values (NULL,'张三','男',20,'1302012345');4 insert into stuinfo (name,age,gender) values ('李四',21,'男');5 insert into stuinfo values (null,"王五","男",21); -- 如果直接写值的话,必须和字段匹配起来,这样写会报错的6 insert into stuinfo values (null,"王五","男",21,"1234666"); -- 没有字段的时候,如果要是直接添加值的话,必须和字段对应,不能缺少
修改 :
-- 修改语句-- 语法: 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 = '李四'; -- 将数据表中名字叫"李四"
删除 :
1 -- 删除语句2 -- 语法: DELETE FROM 表名 where 条件 3 DELETE FROM stuinfo where id = 7; -- 删除id=7的数据4 DELETE FROM stuinfo where id = 2 or id = 8; --删除id=2 和 id=8 的数据5 DELETE FROM stuinfo where id in (4,5,10); -- 删除id为 4 5 10 的数据6 DELETE FROM stuinfo WHERE gender ='男' AND age = 20; -- 通过多条件来删除数据 and 在这里表示并且的关系 7 DELETE FROM stuinfo WHERE id > 10; -- 还可以根据id的特性 删除id大于10的数据8 DELETE FROM stuinfo -- 不写条件 则会删除库中所有的数据
mySQL 常用函数:
COUNT()函数
SELECT count(*) FROM stuinfo; -- count用来统计所有的数据条数 会根据里面的参数来进行统计SELECT count(id) FROM stuinfo; -- 根据id来统计具体的数据条数SELECT count(phone) FROM stuinfo; -- 根据phone字段来统计具体的条数,如果数据为空则会忽略
MAX, MIN, AVG 函数
SELECT MAX(age) FROM stuinfo; -- 查询年龄中的最大值SELECT MIN(age) FROM stuinfo; -- 查询年龄中的最小值SELECT avg(age) FROM stuinfo; -- 查询年龄中的平均值 average 平均值
order by 函数
1 SELECT * FROM stuinfo order by id; -- order by是用来排序的,默认是以升序进行排序 asc就是升序排序2 SELECT * FROM stuinfo ORDER BY id desc; 3 SELECT * FROM stuinfo ORDER BY age desc; -- desc是降序排列
limit 函数 : 主要用于分页场合
1 SELECT * FROM stuinfo ORDER BY id; 2 select * from stuinfo limit 3; -- 取结果集中的前3条 3 SELECT * FROM stuinfo ORDER BY id limit 3; 4 5 -- limit n (索引) m (数量) 数据表中数据的索引默认也是从0开始的,索引只会对剩下的数据进行排序 6 SELECT * FROM stuinfo ORDER BY id LIMIT 3, 3; 7 8 -- 还可以这样来实现一个分页 limit count(数量) offset index(索引); 9 SELECT * FROM stuinfo ORDER BY id limit 3 offset 0; -- 从索引为0的位置向下查询3条10 SELECT * FROM stuinfo ORDER BY id limit 3 offset 3; -- 从索引为3的位置向下查询3条11 SELECT * FROM stuinfo ORDER BY id limit 3 offset 6; -- 从索引为6的位置向下查询3条12 13 -- 经过上面的规律可以总结如下:14 int pageCount = 3 ; -- 每页显示的条数15 int pageSize = 1 ; -- 当前的页码 1 第1页 2 第2页 3 第3页16 17 SELECT * FROM stuinfo ORDER BY id LIMIT pageCount offset (pageSize - 1)* pageCount;Node.js 连接 MySQL
安装驱动
在项目跟目录下安装 : $ cnpm install mysql
连接数据库
let mysql = require('mysql'); let connection = mysql.createPool({ host : 'localhost', // user : 'root', password : '123456', database : 'test'}); connection.connect(); connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) { if (error) throw error; console.log('The solution is: ', results[0].solution); });
数据库连接参数说明:
数据库操作( CURD )
查询数据
var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '123456', port: '3306', database: 'test' }); connection.connect(); var sql = 'SELECT * FROM websites';//查connection.query(sql,function (err, result) { if(err){ console.log('[SELECT ERROR] - ',err.message); return; } console.log('--------------------------SELECT----------------------------'); console.log(result); console.log('------------------------------------------------------------\n\n'); }); connection.end();
插入数据
var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '123456', port: '3306', database: 'test' }); connection.connect(); var addSql = 'INSERT INTO websites(Id,name,url,alexa,country) VALUES(0,?,?,?,?)';var addSqlParams = ['菜鸟工具', 'https://c.runoob.com','23453', 'CN'];//增connection.query(addSql,addSqlParams,function (err, result) { if(err){ console.log('[INSERT ERROR] - ',err.message); return; } console.log('--------------------------INSERT----------------------------'); //console.log('INSERT ID:',result.insertId); console.log('INSERT ID:',result); console.log('-----------------------------------------------------------------\n\n'); }); connection.end();
更新数据
var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '123456', port: '3306', database: 'test' }); connection.connect(); var modSql = 'UPDATE websites SET name = ?,url = ? WHERE Id = ?';var modSqlParams = ['菜鸟移动站', 'https://m.runoob.com',6];//改connection.query(modSql,modSqlParams,function (err, result) { if(err){ console.log('[UPDATE ERROR] - ',err.message); return; } console.log('--------------------------UPDATE----------------------------'); console.log('UPDATE affectedRows',result.affectedRows); console.log('-----------------------------------------------------------------\n\n'); }); connection.end();
删除数据
ar mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '123456', port: '3306', database: 'test' }); connection.connect(); var delSql = 'DELETE FROM websites where id=6';//删connection.query(delSql,function (err, result) { if(err){ console.log('[DELETE ERROR] - ',err.message); return; } console.log('--------------------------DELETE----------------------------'); console.log('DELETE affectedRows',result.affectedRows); console.log('-----------------------------------------------------------------\n\n'); }); connection.end();