Node全解07_01docker_mysql

docker 启动 mysql

  • docker 安装 不说了 自行解决
  • 进入 Docker 上面的 mysql 主页
  • 选择版本 如 5.7.27 或者 8.0.18
  • 使用docker run 容器的名字
  • name 是容器的名字
  • MYSQL_ROOT_PASSWORD 是密码
  • tag是 版本号,我们选 5.7.27
  • 再加一个端口映射 -p 3306:3306
  • 最终命令
1
2
3
4
5
6
7
8
docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7.27

# 查看容器
docker ps -a
# 删除容器
docker rm -f id
# 删除镜像
docker rmi -f id

注意

  • docker启动的容器默认不会持久化
  • 容器删掉了,数据就没了
  • 如果需要持久化,自行搜索 [docker mysql 数据目录]
  • 目前我们不需要持久化

连接 docker mysql

1
2
3
docker exec -it 镜像名称 bash
这句话就是进入容器内部,容器内是一个 linux系统
然后你就可以在这个系统里运行 mysql

mysql 命令

1
2
3
4
5
6
7
mysql -u root -p 回车 输入密码 123456
命令 show databases; 可以查看所有的数据库
如果你手抖就 ctrl + c 重新来
命令 use xxx; 选择使用的数据库
show tables; 查看对应库下的所有表

select * from user; 查看表内容

什么是数据库

数据库Database

  • 将大量数据保存起来,通过计算机加工而成的可以运行高效访问的数据集合称为数据库
  • 根据保存格式不同,数据库一般分为
    • 关系型数据库 使用最广泛
    • 面向对象数据库、xml数据库、键值对数据库、层次数据库

数据库管理系统 DBMS

  • 用来管理数据库的系统称之为数据库管理系统
  • 如 MySQL 、PostgreSQL、SQL Server、DB2、Oracle

mysql 一个bug

  • mysql不要使用 utf-8 记住永远不要再 mysql里使用 utf-8 而是用 utf-8mb4

Node.js 访问数据库

  • mysqljs 里面是例子代码
  • 新建目录 node-mysql
  • yarn init -y
  • 抄文档 yarn add mysql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '123456',

});

connection.connect();
/*
CREATE DATABASE IF NOT EXISTS fang
CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci
*/
// 创建库
connection.query('CREATE DATABASE IF NOT EXISTS fang CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;', function (error, results, fields) {
if (error) throw error;
console.log(results);
});
connection.query('use fang;');
// 创建表
connection.query(`CREATE TABLE IF NOT EXISTS user(
name text,
age int
)`, function (error, results, fields) {
if (error) throw error;
console.log(results);
});

connection.end();

事务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
var mysql = require('mysql');
var dbConfig = {
host: 'localhost',
user: 'root',
password: '123456',
};

const fn = (error, results, fields) => {
if (error) throw error;
console.log(results);
};
transaction([
`insert into user values('eee',${222})`,
`insert into user values('eee',${333})`,
`insert into user values('eee',${444})`,
], [
fn, fn, fn
])

async function transaction(queries, queryValues) {
if (queries.length !== queryValues.length) {
return Promise.reject(
'Number of provided queries did not match the number of provided query values arrays'
)
}
const connection = await mysql.createConnection(dbConfig);
connection.connect();
connection.query('use test_blog;')
try {
await connection.beginTransaction()
const queryPromises = []

queries.forEach((query, index) => {
queryPromises.push(connection.query(query, queryValues[index]))
})
const results = await Promise.all(queryPromises)
await connection.commit()
await connection.end()
return results
} catch (err) {
await connection.rollback()
await connection.end()
return Promise.reject(err)
}
}

CRM学习法 搞定mysql

  • 了解如何连接 mysql
  • 如何创建 数据库
  • 如何创建表
  • 对表 CRUD

如果你是新手千万不要写update 和 delete语句

推荐你用这个解决sql语法

  • devdocs.io 开启 postgresql 文档
  • 菜鸟教程

mysql 数据类型

五大类

  • 数字
    • bit
    • tinyint
    • bool,boolean
    • smallint
    • int
    • bigint
    • decimal
    • float
    • double
    • serial
    • 太多了
  • 字符串
    • char(100) 固定占用100字符,即使你存一个 字符串1
    • varchar(100) 变长存储 省空间
    • binary(1024)
    • varbinary(1024)
    • blob
    • text 存博客这种
    • enum(‘v1’,’v2’)
    • set(‘v1’,’v2’)
    • 具体看文档
  • 时间和日期类型
    • date 年月日
    • time 某事某分某秒
    • datetime 年月日 时分秒
    • timestamp 时间戳
    • year 只存年
    • 关注一下 ISO 8601
      • 很多程序员处理不好日期数据,就是因为不了解它
      • 如何把日期处理为 ISO 8601格式
  • JSON类型 5.7.8以上
  • 其他特殊类型

参考文档

  • dev.mysql.com
  • 菜鸟教程