数据库 MYSQL的概念
数据库的概念
数据库是按照数据结
构来组织、存储和管理数据的系统,它允许用户高效地存储、检索、更新和管理数据
database:用来组织,存储,管理数据的仓库
数据库的管理系统:DBMS,实现对数据的有效储值,关系和存取的系统软件
数据可分为关系型数据库和非关系型数据库
关系型数据库:
mysql
oracle
sql-server(没人用,windows研发),postgresql(大象数据库)
influsdb
非关系型数据库:
es :elasttic search 索引型非关系数据库
redis:缓存型数据库
promethus:时序性的非关系数据
monggoDB:文档型非关系数据库
关系型数据库
1、关系型数据库是一张表,数据存储在表格当中,
2、数据时保存在表里面,关系型数据库的表与表之间是有关联的,数据之间也是有关联的
3、一个关系型数据库可以有多个库,库里面保存的是表,表里面有数据,但是每个库是独立的,数据库当中,多张表存储在库中,通过表与表之间的字段进行关联
表有行和列:
列:列又叫字段,描述对象的属性
行:描述对象的信息
行+列组成一张表
关系型数据库:并发量很低,一旦访问大量集中,数据库会很快崩溃
非关系型数据库
有库,库里面保存的是键值对 的形式进行保存
非关系型数据库:用户第一次访问redis数据库,在redis上生成一个缓存的键值对,下一次访问redis数据库,直接访问缓存键值对
非关系数据库,可以高并发读写,对海量依旧可以保持搞笑的存储和访问,而且也实现高可用的架构
mysql数据库
mysql数据库的类型
mysql的数据库的数据类型,也是所有关系数据库的数据类型
数据类型 含义
int(n) 数据类型是整数,n表示数据的长度显示,范围在-2147483648到2147483647之间。
char() 都是保存字符串类型的数据,保存固定长度的字符
varchar() 都是保存字符串的数据,保存可变长度的字符
text 存储大文本数据
date 用来存储日期,YYYY-MM-DD年月日
datetime 用来存储日期,YYYY-MM-DD HH:MM:SS年月日时分秒
timestamp 可以自动存储当前的时间戳YYYY-MM-DD HH:MM:SS
float(n,m) 浮点数,带小数点的值,n总位数,M小数点后几位,单精度浮点数
double(n,m) 双精度浮点数
image 存储图片或者是多媒体文件
char和varchar的区别:
1、char的字段,无论是否有值,char都会占据4个字节(硬盘空间)
2、varchar是按照实际的字符长度进行记录,但是在结尾会多加一个字符,多一个字节
3、varchar比char节省磁盘空间
4、读写速度,char比varchar要快的多,char的存储方式是连续磁盘空间,varchar多次查询之后,会产生磁盘文件的碎片
数据库的存储引擎和事务
事务由4个特性组成:
1、原子性:事务是整个数据库工作的最小单位,不可分割的,要么全部执行成功,要么全部失败。所有的已成功的都会被撤销
2、一致性:事务执行前后,数据完整性约束是不能被破坏的,满足所有条件约束的情况下,事务才能被提交
3、隔离性:事物之间的执行是隔离的,一个事务的执行不能受到其他事务的干扰
4、数据的持久性:事务一旦被提交,将永久性的保存到数据库中,保证数据不会丢失
事务:插入数据,更新数据,删除数据
mysql:默认使用innoDB支持事务,执行行级锁定,支持外键的存储引擎
数据库的管理
管理数据库的语法:sql语句
名词 | 含义 |
---|---|
database | 数据库 |
table | 表 |
row | 行 |
column | 列 |
index | 索引 |
view | 视图 |
user | 用户 |
privilege | 权限 |
procedure | 存储过程 |
sql语句的规范
1、sql语句不区分大小写,但是建议用大写
sql可以是单行也可以是多行,默认以“;”结尾
如果是多行表示一个sql语句,关键词必须要在一行
2、库名,表名,列名和行的值,是严格区分大小写的
3、命名规则:
表
库
都必须以字母为开头,不要使用sql的保留字段,
表名和库名尽量不要使用特殊字符
sql语句的分类
1、DDL:数据库定义语言,创建数据库,表示,索引等等语句
create:创建
drop:删除
ALTER:修改---->只能对表修改
2、DML:数据库操作语言,对表里面的数据进行管理
select :查
update 更新数据
insert:差输入
delete:删除数据
3、DQL:查询语句,查询数据表中符合条件的数据
select
4、DCL:数据空控制语言,对数据库用户的权限进行控制
GRANT:赋权
REVOKE:取消权限
5、TCL:事务控制语句
commit:提交
rollback:回滚
savepoint:保存点,用来回滚
mysql配置
mysql的配置:
create DATABASE XY104;
#创建一个库create table xy103 (
id int not null,
#声明表中字段的名称和字段的类型,not null表示一定要写入数据
name char(10) not null,
#字段的名称是name,长度是10个字符,值一定要有
address varchar(48) DEFAULT'地址不详',
#DEFAULT默认的给这一列的数据生成一个值,不写入数据,默认就是地址不详
score FLOAT(3,1)
);
select * from xy103;
#select 查询,* 所有, from 表名
desc xy103;
#查看表结构drop table xy103;
#删除表
drop database xy104;
#删除库
表的增删改查
select * from xy103;
查询xy103表名的所有列插入数据:
insert into 表名 (字段1,字段2,字段3.....)values(字段1的值,字段2的值....)更新表的数据 update
update xy103 score=90 where name=;
#修改xy103的表的数据,score=90,where条件进行定位删除表中的数据行delete
delete from xy103 where score=92.9;查询语句的进阶用法select
select * from xy103 limit 2;
#只查看表的前两行
select * from xy103 limit 2,3;
#查看指定范围的行:表示只查看表的第3行到第5行
select distinct address from xy103;
#查看并去重address这一列
#distinct去重模糊查询:
select * from xy103 where address like '%4%';
#查询address这一列含有4的
select * from xy103 where address like '%4';
#查询address这一列以4开头的
select * from xy103 where address like '4%';
#查询address这一列以4结尾的对表结构进行修改
1、修改表名
alter table xy103 rename xy104;
2、增加字段
alter table xy104 add birday date not null;
3、修改字段类型
alter table xy104 modify colum birday varchar(20);
4、修改列的名称
alter table xy104 change birday birthday char(20);
5、删除字段
alter table xy104 drop birthday;create table if not exists xy105 (
id int(4) primary key auto_increment,
#auto_increment:该字段的值会自增长,必须是唯一的,主键或者是唯一约束
name char(12) not null,
);
#if not xeists,只有当前的库中,没有xy105这张表才会进行创建
mysql当中的六个约束:
1、主键约束:primary key ,用于标识表中的每一行,逐渐的字段的值必须是唯一的,且不能为空,且一个表只能有一个主键
2、外键约束:用来建立表与表之间的关系,一张表的外键和另一张表的主键的值要匹配,保证数据的引用完整性foreign key
3、非空约束:not null,插入或者是更新的操作这个字段必须要有值
4、唯一性约束:unique key ,类似于主键的唯一性,但是一个表可以有多个唯一性约束
5、默认值约束:default,默认的给这一列的数据生成一个值
6、自增约束:auto_increment,一般都是和主键一起使用,唯一性和数据类型都有要求
创建主从表
1、创建主表
create table student (
crad_id int(11) primary key,
stu_name varchar(50) not null,
stu_email varchar(255) unique key,
);
2、从表
create table class (
stu_id int(11) primary key auto_increment,
address varchar(123) default '地址不详',
crad_id int(11) not null,
foreign key (crad_id) references student (crad_id)
);
多表联合查询时,表与表之间的关联不要超过3张表,超过之后,速度会下降
相关文章:
数据库 MYSQL的概念
数据库的概念 数据库是按照数据结 构来组织、存储和管理数据的系统,它允许用户高效地存储、检索、更新和管理数据 database:用来组织,存储,管理数据的仓库 数据库的管理系统:DBMS,实现对数据的有效储值&am…...
docker 容器的基本使用
docker 容器 一、docker是什么? 软件的打包技术,就是将算乱的多个文件打包为一个整体,打包技术在没有docker容器之前,一直是有这种需求的,比如上节课我把我安装的虚拟机给你们打包了,前面的这种打包方式是…...
Nginx IP优化限制策略
Nginx 如何限制每个 IP 地址的连接数,优化资源分配? Nginx 限制每个 IP 地址的连接数 Nginx 提供了多种机制来限制单个 IP 地址所能建立的同时连接数,这对于防止资源耗尽和提高服务稳定性至关重要。以下是几种有效策略: 1. 使用…...
某科技局国产服务器PVE虚拟化技术文档
环境介绍 硬件配置 服务器品牌:黄河 型号:Huanghe 2280 V2 Cpu型号:kunpeng-920 磁盘信息 :480SSD * 2 ,4T*4 网卡:板载四口千兆 如下表 四台服务器同等型号配置,均做单节点虚拟化,数据保护采用底层r…...
新能源汽车锂离子电池各参数的时间序列关系
Hi,大家好,我是半亩花海。为了进一步开展新能源汽车锂离子电池的相关研究,本文主要汇总并介绍了电动汽车的锂离子电池的各项参数,通过 MATLAB 软件对 Oxford Dataset 的相关数据集进行数据处理与分析,进一步研究各项参…...
单片机:实现自动关机电路(附带源码)
单片机实现自动关机电路 在许多嵌入式系统或便携式设备中,自动关机功能非常重要,尤其是在电池供电的设备中,防止设备长时间开启以节省电能。自动关机电路的基本功能是检测设备是否处于待机状态,若一定时间内未收到用户操作信号或…...
/etc/fstab 文件学习systemd与该文件关系
文章目录 一、文件字段1.1、设备标识1.2、挂载点1.3、文件系统类型1.4、挂载选项1.5、dump1.5、fsck顺序 二、/etc/fstab 与systemd 的关系2.1、/etc/fstab 与systemd 的关系2.2、systemd 之前/etc/fstab生效过程2.3、systemd 时代/etc/fstab生效过程 三、相关知识3.1、如何更具…...
springcloud基础
一 SpringCloud简介 1.1 SpringCloud是什么 SpringCloud,基于SpringBoot提供了一套微服务解决方案,包括服务注册与发现,配置中心,全链路监控,服务网关,负载均衡,熔断器等组件,除了基于NetFli…...
全面解析 Kubernetes 流量负载均衡:iptables 与 IPVS 模式
目录 Kubernetes 中 Service 的流量负载均衡模式 1. iptables 模式 工作原理 数据路径 优点 缺点 适用场景 2. IPVS 模式 工作原理 数据路径 优点 缺点 适用场景 两种模式的对比 如何切换模式 启用 IPVS 模式 验证模式 总结 Kubernetes 中 Service 的流量负载…...
HTML+CSS+JS制作汽车网站(内附源码,含5个页面)
一、作品介绍 HTMLCSSJS制作一个汽车网站,包含首页、新车发布页、预约试驾页、最新资讯页、品牌故事页等5个静态页面。其中每个页面都包含一个导航栏、一个主要区域和一个底部区域。 二、页面结构 1. 顶部导航栏 包含logo、主导航菜单(首页、新车、二…...
GraalVM完全指南:云原生时代下使用GraalVM将Spring Boot 3应用转换为高效Windows EXE文件
一、前言 在现代软件开发中,启动速度和资源利用率常常是衡量应用性能的关键指标。对于基于Spring Boot的应用来说,虽然它们易于开发和部署,但JVM的启动时间有时会成为一个瓶颈。本文介绍如何使用GraalVM将Spring Boot 3应用编译成原生Windows可执行文件(EXE),从而显著提…...
微软开源GraphRAG的使用教程-使用自定义数据测试GraphRAG
微软在今年4月份的时候提出了GraphRAG的概念,然后在上周开源了GraphRAG,Github链接见https://github.com/microsoft/graphrag,截止当前,已有6900Star。 安装教程 官方推荐使用Python3.10-3.12版本,我使用Python3.10版本安装时,在…...
C++ 中的字面量类型定义
在 C 中,字面量类型(Literal Type)是指可以作为字面量使用的类型。字面量是指代码中直接写出的常量值,比如整数 42、浮点数 3.14、字符串 "hello" 等。而字面量类型则是支持创建这些字面量的类型。 C 中的字面量类型定…...
LeetCode:101. 对称二叉树
跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:101. 对称二叉树 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输…...
Docker Compose 配置指南
目录 1. Docker Compose 配置1.1 基本配置结构1.2 docker-compose.yml 的各部分1.3 常用配置选项 2. Docker Compose 使用方法2.1 创建 Docker Compose 配置文件2.2 启动服务2.3 查看容器状态2.4 查看服务日志2.5 停止服务2.6 重新构建服务 3. Docker Compose 常用命令3.1 dock…...
【Linux开发工具】自动化构建-make/Makefile
🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:Linux 🌹往期回顾🌹:【Linux开发工具】gcc和g 🔖流水不争,争的是滔滔不 一、make和Makefile简介1.1 什么是…...
VSCode 搭建Python编程环境 2024新版图文安装教程(Python环境搭建+VSCode安装+运行测试+背景图设置)
名人说:一点浩然气,千里快哉风。—— 苏轼《水调歌头》 创作者:Code_流苏(CSDN) 目录 一、Python环境安装二、VScode下载及安装三、VSCode配置Python环境四、运行测试五、背景图设置 很高兴你打开了这篇博客,更多详细的安装教程&…...
Python 异步协程:从 async/await 到 asyncio 再到 async with
在 Python 3.8 以后的版本中,异步编程变得越来越重要。本文将系统介绍 Python 标准库中的异步编程工具,带领大家掌握 async/await 语法和 asyncio 的使用。 从一个简单的场景开始 假设我们在处理一些耗时的 I/O 操作,比如读取多个文件或处理…...
矩阵-向量乘法的行与列的解释(Row and Column Interpretations):中英双语
本文是学习这本书的笔记 网站是:https://web.stanford.edu/~boyd/vmls/ 矩阵-向量乘法的行与列的解释 矩阵-向量乘法(Matrix-Vector Multiplication)是线性代数中的基本操作,也是机器学习、数据科学和工程中常用的数学工具。本文…...
针对超大规模病理图像分析!华中科技大学提出医学图像分割模型,提高干燥综合征诊断准确性
口干、眼干、皮肤干,每天伴有不明原因的肌肉酸痛和全身乏力,如果以上症状你「中招」了,除了考虑冬季天气干燥外,还应该警惕一种常见却总是被我们忽视的疾病——干燥综合征 (Sjgren’s Syndrome, SS)。 干燥综合征是以外分泌腺高度…...
混合开发环境---使用编程AI辅助开发Qt
文章目录 [toc]1、说明2、演示视频 1、说明 新时代的浪潮早就已经来临,上不了船的人终将被抛弃,合理使用AI辅助开发、提升效率是大趋势 注意:不要被AI奴隶 合理使用AI辅助编程,十倍提升效率。 大部分的编程AI都有vs code插件&…...
Unity复刻胡闹厨房复盘 模块一 新输入系统订阅链与重绑定
本文仅作学习交流,不做任何商业用途 郑重感谢siki老师的汉化教程与代码猴的免费教程以及搬运烤肉的小伙伴 版本:Unity6 模板:3D 核心 渲染管线:URP ------------------------------…...
[前端]HTTP库Axios
一、Axios简介 Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 node.js 环境。它是一个流行的 JavaScript 库,用于发起 HTTP 请求,如 GET、POST、DELETE 等。Axios 提供了易于使用的 API,支持请求和响应的拦截、转换数据格…...
Excel中index()函数
函数功能概述 INDEX 函数用于返回表格或区域中的值或对值的引用。它可以根据指定的行和列的位置从一个单元格区域中提取数据。这个函数有两种形式:数组形式和引用形式。语法结构(数组形式) INDEX(array, row_num, column_num)array࿰…...
linux-----文件命令
文件和目录的基本概念 文件类型: 普通文件:这是最常见的文件类型,用于存储数据,如文本文件、二进制文件等。文本文件可以用文本编辑器打开并查看内容,二进制文件则包含机器可执行的代码或其他特定格式的数据。目录文件…...
lua dofile 传参数
cat 1.lua arg[1] 111 arg[2] 222 dofile(./2.lua) cat 2.lua print("First argument is: " .. arg[1]) print("Second argument is: " .. arg[2]) 执行 lua 1.lua,结果为: First argument is: 111 Second argument is: 222 l…...
【ETCD】【实操篇(二)】如何从源码编译并在window上搭建etcd集群?
要在 Windows 上编译 etcd 及 etcdctl 工具,并使用 bat 脚本启动 etcd 集群,首先需要准备好开发环境并确保依赖项正确安装。下面是从 etcd 3.5 源码开始编译和启动 etcd 集群的详细步骤: 目录 1. 安装 Go 环境2. 获取 etcd 源码3. 编译 etcd…...
重温设计模式--备忘录模式
文章目录 备忘录模式(Memento Pattern)概述定义: 作用:实现状态的保存与恢复支持撤销 / 恢复操作 备忘录模式UML图备忘录模式的结构原发器(Originator):备忘录(Memento)&…...
如何借助边缘智能网关实现厂区粉尘智能监测告警
在诸如木制品加工、纺织品加工、塑料橡胶制品加工等多种工业生产场景中,粉尘问题的隐患和风险不可小觑。如果缺少对生产环境中粉尘的监测和管理,可能发生易燃易爆、环境污染和工人尘肺等生产事故。 针对工业场景中的粉尘状况监测、管理及预警,…...
解析mysqlbinlog
一、前置设置 ps -ef | grep mysql 查看mysql进程对应的安装目录 需设置mysql binlog日志模式为 ROW 二、执行命令 [rootlocalhost bin]# mysqlbinlog --verbose --base64-outputdecode-rows /usr/local/mysql/data/binlog.000069 > 1.sql 查看文件具体内容...
【gym】理解gym并测试gym小游戏CartPole (一)
一、gym与文件位置的联合理解 import gym import inspect# 加载 CliffWalking 环境 env gym.make(CliffWalking-v0)# 获取环境的类 env_class type(env)# 获取环境类所在的文件路径 file_path inspect.getfile(env_class)print(f"The source code for CliffWalking-v0…...
【jvm】内存泄漏的8种情况
目录 1. 说明2. 静态集合类持有对象引用3. 单例模式4. 内部类持有外部类5. 未关闭的连接6. 变量不合理的作用域7. 改变对象的哈希值8. 缓存Cache泄漏9. 监听器和回调 1. 说明 1.内存泄漏(Memory Leak)指的是程序中动态分配的内存由于某种原因没有被释放…...
android:sharedUserId 应用进程声明介绍
背景 adb install 安装系统软件报错,原因是签名不一致,进程改变。 代码分析 AndroidManifest.xml 定义的 android:sharedUserId 应用归属进程不同,从phone切换到system。 初始配置 <manifest xmlns:android="http://schemas.android.com/apk/res/android"c…...
WPSJS:让 WPS 办公与 JavaScript 完美联动
随着办公自动化需求的日益增长,WPS Office 推出了 WPSJS,这是一款强大的开发者工具,允许开发者通过 JavaScript 脚本与 WPS 办公软件进行互动。无论是在表格中自动填充数据、在文档中修改格式,还是在演示文稿中插入动态内容&#…...
【Linux进程】进程间通信(共享内存、消息队列、信号量)
目录 前言 1. System V IPC 2. 共享内存 系统调用接口 shmget ftok shmat shmdt shmctl 共享内存的读写 共享内存的描述对象 3. 消息队列 msgget msgsnd msgctl 消息队列描述对象 4. 信号量 系统调用接口 semget semctl 信号量描述对象 5. 系统层面IPC资源 6.…...
负载均衡的原理
负载均衡(Load Balancing)是一种计算机技术,用于在多个服务器、网络连接、计算资源之间合理分配工作负载,以提升应用程序的可用性、性能和可扩展性,以下是详细介绍: 工作原理 流量分配:负载均衡…...
Flash Attention
op融合 原始方法: 痛点:多次读取、写入显存。 解决:中间结果不保存,1个kernel顺序算完多个操作。 反向传播时用到这些中间结果要求导,怎么办? 答:类似activation checkpointing,重新…...
Craft CMS 模板注入导致 Rce漏洞复现(CVE-2024-56145)(附脚本)
0x01 产品描述: Craft CMS 是一个灵活且强大的内容管理系统(CMS),专为创意团队和开发人员设计,提供高度可定制、直观且性能优越的网站和内容管理解决方案。它以用户友好的界面、强大的插件生态系统以及支持现代web开发最佳实践的特性而闻名0x02 漏洞描述: 由于模板…...
步进电机位置速度双环控制实现
步进电机位置速度双环控制实现 野火stm32电机教学 提高部分-第11讲 步进电机位置速度双环控制实现(1)_哔哩哔哩_bilibili PID模型 位置环作为外环,速度环作为内环。设定目标位置和实际转轴位置的位置偏差,经过位置PID获得位置期望,然后讲位置期望(位置变化反映了转轴的速…...
Sigrity Optimize PI CapGen仿真教程文件路径
为了方便读者能够快速上手和学会Sigrity Optimize PI和 Deacap Generate 的功能,将Sigrity Optimize PI CapGen仿真教程专栏所有文章对应的实例文件上传至以下路径 https://download.csdn.net/download/weixin_54787054/90171471?spm1001.2014.3001.5503...
open Feign日志输出
openFeign默认是没有日志输出的,只有在open Feign所在的包的级别达到debug才会有输出,而且级别有四级。 四种日志级别: OpenFeign只会在FeignClient所在包的日志级别为DEBUG时,才会输出日志。而且其日志级别有4级: NON…...
进程间关系与守护进程
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 进程间关系与守护进程 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1. 进程组 什…...
C++设计模式:组合模式(公司架构案例)
组合模式是一种非常有用的设计模式,用于解决**“部分-整体”**问题。它允许我们用树形结构来表示对象的层次结构,并且让客户端可以统一地操作单个对象和组合对象。 组合模式的核心思想 什么是组合模式? 组合模式的目的是将对象组织成树形结…...
ubuntu 安装docker
Step1:更新系统软件包 sudo apt update Step2:安装依赖包【用于通过HTTPS来获取仓库】 sudo apt install apt-transport-https ca-certificates curl software-properties-common Step3:添加Docker官方GPG密钥 sudo -i curl -fsSL https://…...
PSDK的编译与ROS包封装
本文档讲述在NIVIDIA开发板上使用大疆提供的Payload SDK获取无人机实时GPS信息的方法,以及基于Payload SDK发布ROS GPS话题信息的方法。 文章目录 0 实现目标1 Payload SDK1.1 PSDK 源码的编译1.2 PSDK 的使用 2 遥测数据的读取2.1 示例代码结构2.2 读取机载GPS信息…...
【工作流】工作顺序
背景 当时的情况是:没有产品经理,后端直接和需求方对接;前端只能短时间投入大部分时间要忙别的;只有3个角色:需求方,后端,前端; 当时直接执行的 直接使用会议了解需求,…...
Unity2021.3.16f1可以正常打开,但是Unity2017.3.0f3却常常打开闪退或者Unity2017编辑器运行起来就闪退掉
遇到问题: 从今年开始,不知道咋回事,电脑上的Unity2017像是变了个人似得,突然特别爱闪退掉,有时候还次次闪退,真是让人无语,一直以来我都怀疑是不是电脑上安装了什么别的软件了,导致…...
Java基础面试题20:Java语言sendRedirect()和forward()方法有什么区别?
Java基础面试题:Java语言sendRedirect()和forward()方法有什么区别? 在 Java Web 开发中,sendRedirect() 和 forward() 是两个非常常用的方法,但它们有一些核心区别。我们来用最简单的方式给你解释清楚。 一、sendRedirect() 和 …...
2、光同步数字传送网的特点
同步复用 光同步数字传送网(SDH)采用同步复用方式。它将多个低速信号复用成高速信号,与准同步数字体系(PDH)的异步复用不同。在 SDH 中,各支路信号与复用后的高速信号是同步的,这种同步复用的方…...
3.4 stm32系列:定时器(PWM、定时中断)
一、定时器概述 1.1 软件定时原理 使用纯软件(CPU死等)的方式实现定时(延时)功能; 不精准的延迟: /* 微秒级延迟函数* 不精准* stm32存在压出栈过程需要消耗时间* 存在流水线,执行时间不确定…...