亲测!史上最全数据库基础?!

为什么要学习数据库

以前在程序中存储数据是一个变量,对象;数据都存储在内存中,程序运行结束后就销毁。

后来学习IO之后,将数据存储在文件中,做到持久存储,但是使用不方便。

学习专业的数据存储软件——数据库软件

数据库概述

数据库(DataBase/db)为了方便数据的存储和管理,它将数据按照特定的规则存储在磁盘上,就是一个存储数据的仓库

相关概念:

DB:数据库;存储数据的容器,他保存了一系列有组织的数据

DBMS:数据库管理系统;又称为数据库软件或数据库产品,用于创建或管理DB。

常见的数据库产品:

国外

  • MySQL 开源版本,也有付费版

  • Oracle数据库 付费版

  • SQL Server(微软)

  • DB2 (IBM)

国内(一般是政府项目使用)

  • 南大通用GBASE: 天津南大通用数据技术股份有限公司

  • 达梦:武汉达梦数据库股份有限公司

  • 人大金仓:北京人大金仓信息技术股份有限公司

  • 神通:神舟通用公司

Mysql数据库

MySQL是一个关系型数据库管理系统,具有快速、可靠和易于使用的特点,支持多种操作系统,支持多种编程语言连接。

关系型数据库?

以数据表为单位,表与表之间存在关联关系

非关系型数据库 redis:缓存(key:value)

结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

三种语言

在sql语言中根据操作不同,又分为不同类型的sql语句:

DDL

DDL(数据定义语言):用于创建和修改数据库表结构的语言。

创建删除数据库

-- 创建数据库,并设置字符集编码 并判断数据库是否存在
CREATE DATABASE IF NOT EXISTS test CHARSET utf8;
-- 删除数据库
DROP DATABASE test;
-- mysql数据库一旦创建不能修改,只能修改字符集编码
ALTER DATABASE test CHARSET gbk

创建数据库表

/*表  表名列   特定信息  姓名、性别...行   数据      张三 男
创建表的步骤确定表名:学生信息--学生表确定列名:学生的具体信息  姓名、性别、生日...列的数据类型:字符串型:char(n) 长度为n的定长字符串varchar(n) 最大长度为n的变长字符串日期时间类型:date  日期--年 月 日datetime  时间--年 月 日 时分秒数值:整数TINYINT 一个字节SAMALLINT 两个字节MEDIUMINT 三个字节INT 四个字节BIGINT 八个字节浮点数decimal(M,D) M表示总长,D表示小数点后几位TEXT列字符字符串  长文本类型
*/
-- 学生表  学号,姓名,性别,生日,电话,地址,身高,注册时间
CREATE TABLE student(num INT,name VARCHAR(10),gender CHAR(1),birthday DATE,phone CHAR(11),address VARCHAR(30),height DECIMAL(3,2),reg_time DATETIME
)
​
-- 删除表
DROP TABLE student
​
-- 创建表,并为列添加约束
/*学号  唯一,不能为空,而且只能有一个学号;可以添加主键约束(唯一不能重复,不能为空,一个表中只能有一个主键约束)PRIMARY KEY 设置主键AUTO_INCREMENT 设置主键列自动增长,只修饰主键列,而且为整数NOT NULL 不能为空约束 可添加到多个列UNIQUE 唯一约束 可添加到多个列DEFAULT '默认值' 添加默认值COMMENT '注释'  添加注释姓名,性别,生日,电话,地址,身高,注册时间
*/
CREATE TABLE student(num INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(10) NOT NULL,gender CHAR(1) NOT NULL,birthday DATE,phone CHAR(11) NOT NULL UNIQUE,address VARCHAR(30),height DECIMAL(3,2) NOT NULL,reg_time DATETIME
)
​
-- 修改表名
RENAME TABLE student to stu
RENAME TABLE stu to student
​
-- 复制表结构
CREATE TABLE stu LIKE student
​
-- 修改表,添加列
ALTER TABLE student ADD id INT
​
-- 修改表,添加外键约束
ALTER TABLE student ADD CONSTRAINT 约束名 FOREIGN KEY(majorid) REFERENCES major(id)

DML

DML:数据操纵语言;常用语句insert,delete,update

-- insert 插入
/*方式1: INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2…..,值n);方式2: INSERT INTO 表名 set 列名1=值1,..列名n=值n;方式3: INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2…..,值n),(值1,值2…..,值n);方式4:INSERT INTO 表名(列1,列2……,列n) 查询语句(查询的列数与插入列数匹配)
*/
​
INSERT INTO student(NAME,gender,birthday,phone,address,height,reg_time) VALUES('王天乐','女','2004-5-3','2123456789322','汉中',1.75,'2024-5-3')
INSERT INTO student(NAME,gender,birthday,phone,address,height,reg_time) VALUES('Jim','女','2004-5-3','2123456789452','England',1.75,'2024-5-3')
​
INSERT INTO student(NAME,gender,birthday,phone,address,height,reg_time)VALUES('张三','男','2004-5-3','13488404582','汉中',1.75,'2024-5-3'),('李四','女','2004-5-5','13488404552','汉中',1.65,'2024-2-3'),('窦鑫锐','男','2001-5-3','13688404582','汉中',1.35,'2044-5-3')​
INSERT INTO stu(NAME,gender,birthday,phone,address,height,reg_time) SELECT NAME,gender,birthday,phone,address,height,reg_time FROM studentINSERT INTO student SET NAME='王天乐',gender='女',phone='2123456789321'
​
-- update  修改  需要注意条件的准确性,否则修改所有数据
UPDATE  student SET address = '窦鑫锐' WHERE num = 1
-- delete 删除
DELETE FROM student WHERE num=1

DQL

DQL:数据查询语言查询是使用频率最高的一个操作,可以从一个表中查询数据,也可以从多个表中查询数据

-- 基本查询语法
-- select 查询的列 from 表名 where 条件 排序 数量限制 分组......
-- select 结果处理 from 表名
-- 结果处理
-- 查询特定的列
SELECT num,NAME,gender FROM student
-- 查询所有的列,在开发中一般不建议,使用哪些列查询哪些
SELECT * FROM student
-- sql中+ - * / 只能做算数运算,+不能连接字符串
SELECT num+100,NAME FROM student
-- 去除查询结果中重复数据,即查询到所有列都相同
SELECT DISTINCT NAME,gender,birthday FROM student

查询结果中使用函数

  • 单行函数会对查询的每条记录进行操作

  • 分组函数也称为聚合函数,统计函数,把多行最终处理为一行

-- 字符函数
-- length():获取参数值的字节个数
SELECT LENGTH(NAME) FROM student
-- char_length()获取参数值的字符个数
SELECT CHAR_LENGTH(NAME) FROM student
-- concat(str1,str2,.....):拼接字符串 AS 后面为别名
SELECT num,CONCAT(NAME,':',gender) AS NAME FROM student
-- upper()/lower():将字符串变成大写/小写
SELECT UPPER(NAME),LOWER(NAME) FROM student
-- substring(str,pos,length):截取字符串 位置从1开始
SELECT SUBSTRING(NAME,2,3) FROM student
-- instr(str,指定字符):返回子串第一次出现的索引,如果找不到返回0
SELECT INSTR(NAME,'三') FROM student
-- trim(str):去掉字符串前后的空格或子串,trim(指定子串 from 字符串)
SELECT TRIM(NAME) FROM student
SELECT TRIM('张' FROM NAME) FROM student
-- lpad(str,length,填充字符):用指定的字符实现左填充将str填充为指定长度
SELECT LPAD(NAME,5,'a') FROM student
-- rpad(str,length,填充字符):用指定的字符实现右填充将str填充为指定长度
SELECT RPAD(NAME,5,'b') FROM student
-- replace(str,old,new):替换,替换所有的子串
SELECT REPLACE(NAME,'i','I') FROM student
-- 逻辑处理
-- case when 条件 then 结果1 else 结果2 end; 可以有多个when
SELECT NAME,(CASE WHEN height>=1.80 THEN '高个子'WHEN height>=1.50 THEN '正常身高'ELSE '低个子' END) AS height,gender FROM student
-- ifnull(被检测值,默认值)函数检测是否为null,如果为null,则返回指定的值,否则返回原本的值 
SELECT NAME,IFNULL(adress,'暂未录入') AS address FROM student
-- if函数:if else的 效果 if(条件,结果1,结果2)
SELECT NAME,IF(height>=1.80,'高个子','正常身高') AS height FROM student
-- 数学函数
-- round(数值,小数位数):四舍五入  不写小数位数相当于只保留整数
SELECT NAME,ROUND(height,1) FROM student
-- ceil(数值):向上取整,返回>=该参数的最小整数
SELECT NAME,CEIL(height) FROM student
-- floor(数值):向下取整,返回<=该参数的最大整数
SELECT NAME,FLOOR(height) FROM student
-- truncate(数值,保留小数的位数):截断,小数点后截断到几位,不会四舍五入
SELECT NAME,TRUNCATE(height,1) FROM student
-- mod(被除数,除数):取余,被除数为正,则为正;被除数为负,则为负
SELECT NAME,MOD(num,3) FROM student
-- rand():获取随机数,返回0-1之间的小数
SELECT NAME,RAND() FROM student
-- 日期函数
-- now():返回当前系统日期+时间
SELECT NAME,NOW() FROM student
-- curdate():返回当前系统日期,不包含时间
SELECT NAME,CURDATE() FROM student
-- curtime():返回当前时间,不包含日期
SELECT NAME,CURTIME() FROM student
-- 可以获取指定的部分,年、月、日、小时、分钟、秒YEAR(日期列),MONTH(日期列),DAY(日期列) ,HOUR(日期列) ,MINUTE(日期列)SECOND(日期列)
SELECT NAME,YEAR(reg_time),MONTH(reg_time),DAY(reg_time) FROM student
-- str_to_date(字符串格式日期,格式):将日期格式的字符转换成指定格式的日期
SELECT STR_TO_DATE('2001-2-6','%Y-%m') FROM student
-- date_format(日期列,格式):将日期转换成字符串
SELECT DATE_FORMAT(birthday,'%y-%m') FROM student
-- datediff(big,small):返回两个日期相差的天数
SELECT DATEDIFF(CURDATE(),birthday) FROM student
-- 分组函数/聚合函数、统计函数
-- sum,avg一般处理数值类型的值,max,min,count可处理任意类型的值
-- sum(列名)求和
SELECT SUM(height) FROM student
-- avg(列名)平均值
SELECT AVG(height) FROM student
-- max(列名)最大值
SELECT MAX(height) FROM student
-- min(列名)最小值
SELECT MIN(height) FROM student
-- 计数count(*)、count(1)、count(列名),列的值为空不统计,推荐使用第一个
SELECT COUNT(*) FROM student
-- 条件查询 select 结果列 from 表名 where 条件SELECT * FROM student WHERE num=1
-- and 必须满足所有条件
SELECT * FROM student WHERE gender='男' AND height>=1.70 AND address='汉中'
-- or 满足一个条件即可
SELECT * FROM student WHERE gender='男' OR height>=1.70-- 不等于 != / <>
SELECT * FROM student WHERE gender!='男'
SELECT * FROM student WHERE gender<>'男'-- 模糊查询 LIKE 字符 %字符% 通配符
SELECT * FROM student WHERE NAME LIKE '张%'
SELECT * FROM student WHERE NAME LIKE '%三%'-- between and 两者之间,包含临界值
SELECT * FROM student WHERE height BETWEEN 1.70 AND 2.0-- in 判断某字段的值是否属于in列表中的某一项
SELECT * FROM student WHERE height IN(1.75,1.85,1.95)
-- not 取非
SELECT * FROM student WHERE height NOT IN(1.75,1.85,1.95)-- is (not) null  为(非)空
SELECT * FROM student WHERE address IS NULL
SELECT * FROM student WHERE address IS NOT NULL
-- union 合并多个查询结果,可以去除重复项
SELECT num,NAME,gender FROM student WHERE gender='男'
UNION
SELECT num,NAME,gender FROM student WHERE height>1.60
-- union all 合并多个查询结果,但是不去重
SELECT num,NAME,gender FROM student WHERE gender='男'
UNION ALL
SELECT num,NAME,gender FROM student WHERE height=1.75
-- 排序
-- order by 排序列 ASC/DESC ASC代表的是升序,DESC代表的是降序,如果不写,默认是升序
SELECT * FROM student ORDER BY height
SELECT * FROM student ORDER BY height ASC
SELECT * FROM student ORDER BY height DESC
​
-- 多个条件排序
SELECT * FROM student ORDER BY height DESC,birthday ASC
-- 什么排序都不写默认按照主键升序排列
SELECT * FROM student
-- 数量限制  limit 开始位置(开始位置为0),查询的数量  实际使用场景为数据分页显示,一次只查询一部分数据,提高查询效率
SELECT * FROM student LIMIT 0,2
SELECT * FROM student LIMIT 2,2
SELECT * FROM student LIMIT 4,2
-- limit 在sql语句的末尾出现
-- 分组查询  在分组函数中也可以使用分组函数来进行相应的操作
-- 将某类数据分到一个组中进行处理,例如性别查询
-- 查询男生,女生各有多少人,按照性别分组
-- GROUP BY 分组条件(列名)  用谁分组谁就可以出现在结果中
SELECT COUNT(*),gender FROM student GROUP BY gender 
-- 统计每年出生的人数
SELECT COUNT(*)AS number,YEAR(birthday) FROM student GROUP BY YEAR(birthday)
SELECT COUNT(*)AS number,DATE_FORMAT(birthday,'%Y')AS YEAR FROM student GROUP BY DATE_FORMAT(birthday,'%Y') 
-- 分组统计姓名,查询哪些姓名重复
-- where 是对原始表中的数据进行过滤
-- HAVING在GROUP BY后面使用,可以直接对分组后的数据进行查询
SELECT * FROM (SELECT COUNT(*)AS number,NAME FROM student GROUP BY NAME)AS t WHERE t.number>1
SELECT COUNT(*)AS number,NAME FROM student GROUP BY NAME HAVING number>1

多表设计_关联查询

数据库设计范式,好的数据库设计,事半功倍,不会有歧义

第一范式

第一范式是最基本的范式(确保每列保持原子性)。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。

第二范式

简单的来说就是要有主键;也就是要求其他字段都依赖于主键

通过主键可以精确的定位到某一行的数据

第三范式

不用的信息可以放在不同的表中,如果两张表有关系的话,只需要在另一张表中放另一张表的主键进行关联,关联表中其他的非主键信息就不需要了。

外键

外键:引用另外一个数据表的某条记录。

外键列类型与主键列类型保持一致

数据表之间的关联/引用关系是依靠具体的主键(primary key)和外键(foreign key)建立起来的.

  • 当主表中没有对应的记录时,不能将记录添加到从表

  • 不能更改主表中的值而导致从表中的记录孤立

  • 从表存在与主表对应的记录,不能从主表中删除该行

  • 删除主表前,先删从表

关联查询

关联查询也称多表查询

-- 查询学生信息   学号,姓名,性别,生日,专业
-- 如果不佳任何关联条件,会导致出现笛卡尔乘积现象
SELECT * FROM student,major-- 内连接,只把满足条件的筛选出来
SELECT * FROM student,major WHERE majorid=id
SELECT * FROM student s INNER JOIN major m ON s.majorid=m.id-- 外连接,
-- 左外连接 把左边表中所有数据查询出来,右边表中只会查询满足条件的
SELECT * FROM student s LEFT JOIN major m ON s.majorid=m.id-- 右外连接 把右边表中所有数据查询出来,左边表中只会查询满足条件的
SELECT * FROM student s RIGHT JOIN major m ON s.majorid=m.id-- 统计每个专业的学生
SELECT COUNT(s.num),m.name FROM student s RIGHT JOIN major m ON s.majorid=m.id GROUP BY m.name-- GROUP_CONCAT() 把同一组中,多个课程名称连接起来
-- 查询学生选课 
SELECTs.num,s.name,s.gender,m.name,GROUP_CONCAT(c.name) cnameFROM student s LEFT JOIN major m ON s.majorid = m.midLEFT JOIN student_course sc ON s.num = sc.student_numLEFT JOIN course c ON c.id = sc.courseidGROUP BY s.num,s.name,s.gender,m.name 
-- 自连接
SELECT * FROM AREA ap JOIN  AREA ac ON ap.id = ac.pid  JOIN AREA ax ON ac.id = ax.pid
-- 子查询 在一个查询语句中又出现了查询语句
-- 子查询可以出现在from 或者where后面
-- from之后称为表子查询(结果一般魏多行多列)把查询结果当作一张表
-- where  标量子查询(结果集只有一行一列)
--        列子查询(结果集只有一列多行)
-- 查询身高最高的学生 标量子查询
SELECT * from student WHERE height=(SELECT MAX(height) FROM student)
-- 列子查询
SELECT * from student WHERE height IN(SELECT height FROM student WHERE height=1.65 OR height=1.75)
-- 查询姓名重复  表子查询
SELECT * FROM (SELECT COUNT(*)AS number,NAME FROM student GROUP BY NAME)AS t WHERE t.number>1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/11015.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于POSIX的信号量模拟DAG上的并行计算的同步问题

本代码主题借鉴nju的jyy老师的代码 自己增加了随机生成DAG(有向无环图)(不保证连通)数据进行测试 运行打印结果即为并行计算DAG的拓扑序 #include <pthread.h> #include <semaphore.h> #include <unistd.h> #include <iostream> #include <vector&g…

2024最新最全【NMAP】零基础入门到精通

一、Nmap介绍 Nmap(Network Mapper&#xff0c;网络映射器)是一款开放源代码的网络探测和安全审核工具。它被设计用来快速扫描大型网络&#xff0c;包括主机探测与发现、开放的端口情况、操作系统与应用服务指纹识别、WAF识别及常见安全漏洞。它的图形化界面是Zenmap&#xff…

[AIGC] redis 持久化相关的几道面试题

文章目录 1. 什么是Redis持久化&#xff1f;2. Redis 的持久化机制是什么&#xff1f;各自的优缺点&#xff1f;2.1 RDB&#xff08;Redis DataBase&#xff09;&#xff0c;快照2.2 AOF&#xff08;Append Only File&#xff09;&#xff0c;日志 3. 优缺点是什么&#xff1f;…

Vue3的setup

Vue3的setup setup选项是一个接收props和context的函数是一个新的组件选项&#xff0c;作为Composition-API的入口点&#xff0c;只会被执行一次&#xff0c;用于建立数据与逻辑的连接。 注意点 在执行setup函数时&#xff0c;还没执行created生命周期方法&#xff0c;因此在s…

单核CPU调度

CPU MLFQ 调度 MLFQ即多级反馈队列调度。在给定时间片中&#xff0c;任务存在不同优先队列之中等待被执行&#xff0c;MLFQ根据优先级去决定哪个任务在该时间片执行 Round Robin Round Robin即RR&#xff0c;是基于时间片的轮询调度算法。给每个任务分配一个时间片&#xff…

pixhawk无人机飞控解锁

飞控解锁 GitBook 左手油门的遥控解锁是油门右下角拨&#xff0c;右手油门是油门最低&#xff0c;方向最右。 飞控如何加锁? 左手油门&#xff1a;油门左下角 右手油门&#xff1a;油门最低&#xff0c;方向最左 飞控解锁成功后&#xff0c;不推油门的情况下&#xff0c;…

基于SSM+Vue的物流管理系统

运行截图 获取方式 Gitee仓库

大众点评全国店铺基础信息采集-学习培训店铺-2024年5月

2024年5月最新采集大众点评全国(内地)-学习培训大类-店铺基础信息&#xff0c;93余万家 学习培训类店铺示例&#xff1a; 店铺id k40VtNBN3bixFJIU 店铺名称 梦想钢琴成人钢琴(珠江新城总部) 十分制效果评分 9.4 十分制服务评分 9.4 十分制环境评分 9.4 人均价格 1233 …

为什么数据库字符编码不一致会导致索引失效

引言 数据库字符编码不一致是数据库管理和优化过程中经常遇到的问题之一&#xff0c;尤其在涉及多语言环境和多应用时更为显著。本文旨在深入探讨字符编码不匹配如何影响SQL查询性能&#xff0c;导致索引失效&#xff0c;以及其背后的原理。 1. 字符编码与索引基础 字符编码…

【TypeScript模块简介以及使用方法】

TypeScript模块简介 TypeScript中的模块&#xff08;Modules&#xff09;是代码的封装体&#xff0c;它们可以包含变量、函数、类和接口等。在TypeScript中&#xff0c;模块可以被其他模块引用和使用&#xff0c;从而实现代码的复用和模块化开发。 TypeScript支持两种模块系统…

LORA学习笔记2——训练集处理

前言 对于ai训练来说&#xff0c;处理训练集是模型训练的重要环节。训练集的质量对最终模型的质量影响巨大。这里以二次元角色为例&#xff0c;记录下训练集处理的流程和一些心得。 素材准备 素材准备有以下几个需要注意的点&#xff1a; 通常训练二次元角色需要30张以上的…

14:HAL---CRC校验

103系列只有一个CRC 前言&#xff1a; CRC&#xff08;Cyclic Redundancy Check&#xff09;&#xff0c;即循环冗余校验&#xff0c;是一种根据网络数据包或电脑文件等数据产生简短固定位数校核码的快速算法&#xff0c;主要用来检测或校核数据传输或者保存后可能出现的错误。…

QX---mini51单片机学习---(8)8*8点阵屏

目录 1LED点阵屏简绍 2 8*8点阵屏电路图74 3 74HC595芯片 4实践编程 1LED点阵屏简绍 2 8*8点阵屏电路图74 怎么点亮&#xff0c;正极给高负极给低 不能同时静态显示&#xff0c;跟数码管动态显示一样&#xff0c;反复横跳&#xff0c;利用视觉效果 3 74HC595芯片 …

斐波那契数

509. 斐波那契数 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n) F(n - 1) F(n - 2)&#xff0c;其中 …

第四届上海理工大学程序设计全国挑战赛---昨日方舟

知识点&#xff1a;模拟 题目描述 《昨日方舟》是一款塔防类游戏。在游戏中&#xff0c;我们要通过部署角色来抵御怪物的入侵。在这款游戏中&#xff0c;有一名角色名字为 “今”&#xff0c;他的能力为能够在地图上部署小蛇&#xff0c;小蛇在某些条件下可以与其他小蛇合体…

关于 IIS 开启匿名访问网站仍要账号密码登录网站的解决方法

欢迎关注公总号【云边小网安】 问题提出&#xff1a;发现虽然勾选了允许匿名访问网站&#xff0c;但在访问某一网站的时候仍然需要登录账号密码 解决方法一&#xff1a;登录管理员账号密码解决方法二&#xff1a;添加访问网站文件夹的用户 访问某一网站本质上来讲&#xff0…

C++入门必读-Qt的安装与配置

QT简介 Qt是一个跨平台的C图形用户界面应用程序框架。它为应用程序开发者提供建立图形界面所需的所有功能。它是完全面向对象的&#xff0c;很容易扩展&#xff0c;并且允许真正的组件编程。 QT下载 访问下载网站: Index of /archive/qt 安装编译器 QT安装 建议安装之前将网络断…

1064 朋友数

solution 给出n个整数&#xff0c;统计可能的位数和&#xff0c;并按升序输出&#xff08;考虑用set实现&#xff09; #include<iostream> #include<set> using namespace std; int main(){set<int> st;int n, x, sum;scanf("%d", &n);while…

前端Vue架构

1 理解&#xff1a; 创建视图的函数&#xff08;render&#xff09;和数据之间的关联&#xff1b; 当数据发生变化的时候&#xff0c;希望render重新执行&#xff1b; 监听数据的读取和修改&#xff1b; defineProperty&#xff1a;监听范围比较窄&#xff0c;只能通过属性描…

Docker 直接运行一个 Alpine 镜像

由于镜像很小&#xff0c;下载时间往往很短&#xff0c;读者可以直接使用 docker run 指令直接运行一个 Alpine 容器&#xff0c;并指定运行的 Linux 指令&#xff0c;例如&#xff1a; PS C:\Users\yhu> docker run alpine echo 123 Unable to find image alpine:latest lo…