delete

【MYSQL】delete把我磁盘空间给"吃"了

旧街凉风 提交于 2020-01-18 03:59:33
前言 记得在很久之前,我在学习某个关于MYSQL的课程时,需要插入大量的随机数据,约500W,插入之后硬盘空间直接少了约10G(具体大小取决于你插入什么样的数据),到这里位置我都觉得一切正常。可在之后,让我觉得"魔幻"的事情发生了。 我当时想利用这批已插入的数据测测我电脑跑delete语句的速度,然后我就编写代码,用delete语句删除了大概80%的数据。 整个删除过程都很顺利,可当我删完后查看一下磁盘空间,发现磁盘只多了1G,我整个人都懵了,在约10G的数据里我可是删了80%,怎么才还给我1G?难道我装的MYSQL里有个病毒? 虽然当时通过百度的方法勉强让MYSQL"吐"出了4,5G空间,但我还是不明白为啥会这样,直到我前一段时间看到相关书籍有讲解这一块,才终于解开了疑惑。 小贴士:你可能会疑惑,明明删除了80%的数据,但为什么才"吐"出来4G多?那是因为占用磁盘的可不止我们插入的数据,还有我们的插入&删除时候的操作记录,即binlog,而且根据binlog的格式不同,占用的存储空间也会有差异。 PS:无特别说明,环境默认是MYSQL5.7.21+InnoDB+默认配置。 Delete过程的空间去哪了 在这里我同样先无视锁机制、内存变化等因素,因为我们在讨论的主要是:执行Delete过程中,被删除的数据所占有的存储空间到底怎么了? 为了方便,我在这里借用一下掘金小册的图描述过程:

对象的动态建立和释放

元气小坏坏 提交于 2020-01-17 21:28:27
1 new 和 delete基本语法 1)在软件开发过程中,常常需要动态地分配和撤销内存空间,例如对动态链表中结点的插入与删除。在C语言中是利用库函数malloc和free来分配和撤销内存空间的。C++提供了较简便而功能较强的运算符new和delete来取代malloc和free函数。 注意: new 和 delete 是运算符,不是函数,因此执行效率高。 2 )虽然为了与 C 语言兼容, C++ 仍保留 malloc 和 free 函数,但建议用户不用 malloc 和 free 函数,而用 new 和 delete 运算符。 new运算符的例子: new int; //开辟一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针) new int(100); //开辟一个存放整数的空间,并指定该整数的初值为100,返回一个指向该存储空间的地址 new char[10]; //开辟一个存放字符数组(包括10个元素)的空间,返回首元素的地址 new int[5][4]; //开辟一个存放二维整型数组(大小为5*4)的空间,返回首元素的地址 float *p=new float (3.14159); //开辟一个存放单精度数的空间,并指定该实数的初值为//3.14159,将返回的该空间的地址赋给指针变量p 3)new和delete运算符使用的一般格式为: 用 new

1-2.Kubectl命令行工具

◇◆丶佛笑我妖孽 提交于 2020-01-17 15:30:45
1.kubectl用法 $~: kubectl [command] [TYPE] [NAME] [flags] [command] 子命令。用于操作Kubernetes集群资源对象。 可取值:[create | delete | describe | get | apply] [TYPE] 资源对象的类型。区分大小写 备注:可以通过单数形式、复数形式、简写形式表示。 # 例:不同写法的Type,但是效果一致 kubectl get pod pod1 kubectl get pods pod1 kubectl get po pod1 [NAME] 资源对象名称。区分大小写 备注: 如果不指定名称,将返回属于 TYPE 的所有对象列表。 # 例:返回所有对象列表 kubectl get pods [flags] kubectl子命令的可选参数 2.kubectl操作实例 创建资源对象 # 由配置文件(*.yaml)创建一次性对象 # 创建一个对象 kubectl create -f service.yaml # 创建对个对象 kubectl create -f service.yaml -f pod.yaml 查看资源对象 # 查看所有Pod列表 kubectl get pods # 查看指定对象 kubectl get service,pod 资源对象详情 # 显示Node的详细信息

API规范约定,让你写出高质量的API!

三世轮回 提交于 2020-01-17 11:29:34
摘要 API的设计原则: 控制API的粒度和数量 命名要遵循简单、可读、统一原则; 优先设计API,然后编码 多说一句: 在现在流行的微服务、敏捷开发等这些项目一般为了更高效的开发,节约编写文档的成本,API服务都会使用Swagger来生成描述。 URL设计【针对后端开发】 HTTP规范 动词目前暂时以下面两种 HTTP 方法,对应 CRUD 操作。 GET:读取(Read) POST:新建(Create,Update,Delete) PUT:更新(Update) PATCH:更新(Update),通常是部分更新 DELETE:删除(Delete) 命名规范 简洁 简洁 繁琐 captcha get-captcha-image info getUserInfo cars getAllCars 可读 可读好 可读性差 delete delete-sysuser add addDetIstr update updateDetIstr get appGetByNO API臃肿 接口数量控制 反对不经过设计的API,导致API接口失控,接口过多,影响前端调试。 能合并的接口,尽量合并,不要写重复的接口 一个类的接口不要超过6个,如下图所示: 返回值规范 禁止返回无效的字段,给前端人员增加联调的沟通成本的同时暴露底层信息。如下图所示: API接口注释规范 HTTP状态码 常用状态码 2xx

数据库报错Cannot delete or update a parent row: a foreign key constraint fails

爱⌒轻易说出口 提交于 2020-01-17 01:48:15
(1)SQL语句 (2)表的关系图 存在问题: 无法删除或更新父行:外键约束失败 原因:存在外键约束 存在外键约束的规则: (1)级联删除,就是删除主键表的同时,外键表同时删除。 (2)、约束/限制当在主键表中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。(即外键表约束主键表) (3)SET NULL当取值为Set Null时,则当在主键表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(,一样是外键表约束主键表,不过这就要求该外键允许取null)。 解决方法 先关闭外键约束,执行删除操作,然后再开启外键约束 来源: CSDN 作者: 十五期 赵千乔 链接: https://blog.csdn.net/weixin_40486955/article/details/104011048

Mysql delete删除操作,表占空间大小不变

北城余情 提交于 2020-01-16 18:50:30
以下记录最近在数据清洗的时候,遇到的两个问题。 大纲: Mysql执行事务sql,中途报错,执行的相关表空间增大,可见数据依旧不变。 Mysql执行delete删除语句后,表空建没有释放,数据长度不变。 问题分析: 1. Mysql执行事务sql,中途报错,执行的相关表空间增大,可见数据依旧不变 查看当前会话隔离级别 select @@tx_isolation; 查看当前系统隔离级别 select @@global.tx_isolation; 查看当前系统正在执行的事务 SELECT * FROM information_schema.INNODB_TRX; 事务的特性: START TRANSACTION开启一个事务,COMMIT提交事务或者ROLLBACK回滚事务。事务开启后,要么执行成功,要么回滚,回滚将不对数据库做任何改动。 以上这句话没错,错就错在我错误理解成了,事务在执行中报错后,数据库会自动回滚。 而事实是开启一个事务后,事务执行中报错,数据库不会自动回滚或者提交,所有已经执行的语句会有状态标记,等待你手动执行回滚或者提交。 手动执行commit提交,已执行的正确语句,修改的数据,会正常入库或者执行。手动执行rollback回滚,系统会回滚已经执行的数据,至原始状态,但是,这里如果是insert语句,则会产生数据碎片,占用空间。 如果表中设置了唯一索引,或者其他限制键

kubernetes cronjob

天涯浪子 提交于 2020-01-16 17:47:06
CronJob Cron Job 管理基于时间的 Job ,即: 在给定时间点只运行一次 周期性地在给定时间点运行 一个 CronJob 对象类似于 crontab (cron table)文件中的一行。它根据指定的预定计划周期性地运行一个 Job,格式可以参考 Cron 。 前提条件 当前使用的 Kubernetes 集群,版本 >= 1.8(对 CronJob)。对于先前版本的集群,版本 < 1.8,启动 API Server(参考 为集群开启或关闭 API 版本 获取更多信息)时,通过传递选项 --runtime-config=batch/v2alpha1=true 可以开启 batch/v2alpha1 API。 典型的用法如下所示: 在给定的时间点调度 Job 运行 创建周期性运行的 Job,例如:数据库备份、发送邮件。 CronJob Spec .spec.schedule :调度,必需字段,指定任务运行周期,格式同 Cron .spec.jobTemplate :Job 模板,必需字段,指定需要运行的任务,格式同 Job .spec.startingDeadlineSeconds :启动 Job 的期限(秒级别),该字段是可选的。如果因为任何原因而错过了被调度的时间,那么错过执行时间的 Job 将被认为是失败的。如果没有指定,则没有期限 .spec

C++ 栈和堆的区别

房东的猫 提交于 2020-01-16 05:27:04
    C++中的存储区分为全局数据区、代码区、堆、栈。   全局数据区存放静态数据、全局变量、常量。   代码区存放所有类成员函数和非成员函数的代码。   栈区存放用于函数的返回地址、形参、局部变量、返回类型。   堆区存放余下的内存(new和delete)。   堆和栈的区别: 1、申请方式不同:栈是系统自动分配,堆是程序员申请。 2、系统响应不同:   栈:只要栈的剩余空间大于所申请的空间,系统就会为程序提供内存,否则栈溢出。     堆:系统收到申请空间的请求后,会遍历一个操作系统用于记录内存空闲地址的链表,当找到一个空间大于所申请空间的堆结点后,就会为该结点从记录内存空闲地址的链表中删除,并将该结点的内存分配给程序,然后在这块内存区域的首地址处记录分配的大小,这样我们在使用delete来释放内存的时候,delete才能正确地识别并删除该内存区域的所有变量。另外,我们申请的内存空间与堆结点的内存空间不一定相等,这是系统会自动将堆结点上多出来的那部分内存空间回收到空闲链表中。 3、空间大小不同:栈是一块连续的区域,大小一般是1~2M;堆是不连续的区域,空间很大,上限取决于有效的虚拟内存。 4、碎片问题:栈是后进先出的队列,内存是连续的,而堆则在多次的new和delete后会产生很多碎片。 5、生长方向:栈是向下,堆是向上。 6、分配方式:堆是动态分配,没有静态分配

- avoid using JavaScript unary operator as property name: "delete" in expression v-on:cli

时间秒杀一切 提交于 2020-01-15 23:05:38
我在写vue语句 给一个按钮绑定了 @click="delete" 就报了这样一个错误 官方提示 是 避免使用 delete这个可能是一个关键字 所以以后 尽量减少使用 delete 命名 方法名 来源: CSDN 作者: yunchong_zhao 链接: https://blog.csdn.net/yunchong_zhao/article/details/103995002

oracle练习-day03

China☆狼群 提交于 2020-01-15 22:34:52
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Oracle day03 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 01 .创建表空间 - - 删除表空间 drop tablespace heima38_space including contents and datafiles; - - 创建表空间 create tablespace heima38_space - - 表空间名称 datafile 'c:\heima.dbf' - - 表空间的对应的文件路径 size 10M - - 表空间初始化的大小 autoextend on - - 自动增长 next 10M - - 每次增长 10M - - 02 .创建用户赋权限 create user heima38 identified by heima38; - - 为用户授权 oracle角色权限 connect :连接数据库权限 resource:数据库基本操作的权限 dba:数据库管理员的权限 - - 为heima38授予dba权限 grant dba to heima38; - - 实现的项目中为heima授予 grant connect