Docker
设置 Docker
1、下载 Docker Desktop for Windows;
2、命令行 docker --version ,返回版本号说明成功;
3、设置国内镜像,然后重启 Docker;
{
"experimental":false,
"registry-mirrors":[
"http://f1361db2.m.daocloud.io"
]
}
4、打开 settings 报错:
解决方法:管理员身份运行 PowerShell,输入netsh winsock reset(重置系统内部目录的意思)然后重启 Docker。
5、确保
docker run hello-world 输出 Hello from Docker!
用 Docker 安装 MySQL
1、进入 Docker 上面 MySQL 的 主页;
2、选择版本;
3、两个端口号要相同,如 3306:3306
docker run --name mysql名字 -e MYSQL_ROOT_PASSWORD=密码 -p 本机端口号:容器端口号 -d mysql:版本
4、Docker 安装 mysql 的好处:不用管本机的环境,如果用windows 安装 mysql 的话,可能会有什么软件冲突、端口冲突之类的;
5、报错:unexpected EOF
原因:可能是网络不好,换个时间下载。
常用 Docker 命令
docker ps查看容器运行状态;
docker kill mysql1关掉容器;
docker container start mysql1 开启容器;
docker rm mysql 删除容器,必要时可加 -f 选项;
docker fun启动新容器。
Docker 注意事项
1、用 Docker 运行的容器,默认不会持久化;
2、如果容器被删掉了,那么数据也没了;
3、如果需要持久化,可搜索“docker mysql 数据目录如何持久化”
命令行
用命令行连接 mysql
1、docker exec -it mysql1 bash;mysql1 是容器名,默认命令是 bash;
2、这句命令会进入容器,容器里有一个 Linux 系统;
3、这样就可以在这个系统里运行 mysql。
mysql 命令
1、mysql -u root -p回车,输入密码。命令的意思是:要进入 mysql,用户是 root ,密码;
2、show databsaes; 可查看数据库列表,注意要写分号,忘了分号的号,可以ctrl + c 重来,默认有4个数据库,最好不要动它们;
3、use xxx选择使用 xxx 数据库;
4、show tables 查看所有表,如果不知道表名,可以先输入前几个字母,然后按 tab;
5、select * from 表的名字 查看表内容;
6.describe 表名描述表;
6、ctrl + d 退出,比如要退出 mysql、bash 等;
7、docker-machine ip得到虚拟机的 ip;
8、命令行创建数据库:create database dbdemo character set utf8mb4 collate utf8mb4_unicode_ci;;
9、使用 join 连接表:
select users.name as uname,orders.amount as amount from users inner join orders on users.id = orders.user_id;
10、事务
start transaction;
语句1;
语句2;
语句3;
commit;
//只要有一句出错,则全都不生效;
//显示评论数时,第一步,新增记录;
//第二步,评论数加 1 ,可以用事务。
11、mysql 存储引擎 show engines;默认是 InnoDB,支持事务,遵循 ACID、支持行锁和外键;
12、索引;
//创建
create unique 索引名 on 表名(column_name(length));
show index in 表名
总结
1、docker run --name mysql名字 -e MYSQL_ROOT_PASSWORD=密码 -p 本机端口号:容器端口号 -d mysql:版本 把 mysql 安装在一台电脑上;
2、docker container start mysql1 开启有 mysql 的电脑;
3、docker exec -it mysql1 bash 打开电脑上的 mysql1 软件;
4、mysql -u root -p 用账号和密码登录软件;
5、用 mysql 语句操作软件。
数据库
1、可以高效访问的数据集合称为数据库;
2、根据保存格式,分为:关系型数据库(最广泛)、面向对象型数据库;
3、DBMS:用来管理数据库的系统称为数据库管理系统,如:MySQL、PostgreSQL、SQL Server、DB2、Oracle。
Node.js 连接数据库
1、连接 yarn add mysql
2、创建数据库,复制代码,这样 node.js 客户端就连上了 mysql 服务器,然后就可以操作数据库;,注意 mysql 的 utf-8 是个 bug ,不要用,用 utf8mb4
//mysql创建数据库,并且指定编码utf8mb4,
//如果已存在,就不创建的SQL命令
CREATE DATABASE IF NOT EXISTS 数据库名 DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
运行命令后报错:
code: 'ER_NOT_SUPPORTED_AUTH_MODE',
errno: 1251,
原因:mysql8.0 默认的密码认证方案是 'caching_sha2_password',而目前node默认的密码认证方案是'mysql_native_password',所以即使密码是对的,但是却无法认证成功。
解决方案:
docder exec -it mysql名 bash //进入要操作的数据库
mysql -u root -p;
alter user root identified with mysql_native_password by 'mysql密码';
//此时得到提示Query OK, 0 rows affected (0.01 sec),这里是修改密码的认证方式
flush privileges;
//此时得到提示Query OK, 0 rows affected (0.01 sec),这里是重启权限
exit
3、创建表 ;
`CREATE TABLE IF NOT EXISTS user(
name text,
age int
)`
4、对表增删改查
drop table 表名;
show tables;
describe 表名;
5、添加记录
//增加行
INSERT INTO table_name ( field1, field2,...fieldN ) VALUES
( value1, value2,...valueN );
//增加列
alter table users add id serial; //添加 id 列,类型是 serial;
//删除列
ALTER TABLE 表名 DROP i;
6、对记录增删改查:不要对数据进行 delete / update 操作,一定要加 where 语句,否则整个表的数据都会被修改。
delete from 表名 where name='shenjingwa';
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause];
select name,age from users;
MySQL 数据类型
数字类型
bit、bool/boolean、tinyint/smallint/mediumint/int/bigint、decimal、float、double、 serial (序列号,可以自增长,等价于 bigint unsigned not null auto_increment unique)
字符串类型
char(100)、 //长度为 100 字符串,长度永远不变;
varchar(100)、 //最大长度为 100 的可变字符串,长度可变;
binary(1024)、 //长度为 1024 的二进制;
varbinary(1024)、 //最大长度为 1024 的二进制,长度可变;
blob、 //长度很长的二进制;
text、 //很长的文本,一般不用于搜索;
enum('v1','v2')、 //字符串要么是 v1 ,要么是 v2;
set('v1','v2') //可以是 v1,可以是 v2,也可以是 v1 和 v2 ;
时间和日期类型
date、 //只包括年月日,不包括时间;
time、 //只包括 时分秒 等时间,没有日期;
datetime、 //日期加时间;
timestamp、 //时间戳,基于 1970年0点0分,过了多少秒;
year //只有年
JSON 类型
其它特殊类型
2、mysql 中将日期输出为 ISO 8601 格式:
SELECT DATE_FORMAT(date, '%Y-%m-%dT%TZ') AS date_formatted
FROM table_name
ORDER BY id DESC
ORM
Object-relational mapping :像操作对象一样操作数据库
Sequelize.js
可以不用写 sql 语句,用操作对象的方式来操作数据库。
yarn add sequelize
yarn add --dev @types/sequelize
yarn add mysql2
const { Sequelize, Model, DataTypes } = require('sequelize');
const sequelize = new Sequelize('数据库名','root','135790',{
dialect:'mysql'
});
//创建 user 模型
class User extends Model {}
//初始化 user
User.init({
username: DataTypes.STRING,
birthday: DataTypes.DATE
}, { sequelize, modelName: 'example' });
//改变
async function update(){
await User.update({ id: 33 }, {
where: {
id: 3
}
});
}
update()
//查询
async function selectExample(){
const users = await User.findAll();
console.log(users.every(user => user instanceof User)); // true
console.log("All users:", JSON.stringify(users, null, 2));
sequelize.close()
}
selectExample()