内容转载自 爱可生开源社区 作者:Peter Zaitsev 我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎。...这个看似简单的问题实际上在 MySQL 中非常复杂。MySQL 支持许多存储引擎(其中一些根本不在磁盘上存储数据), 不同的存储数据格式。...简化一下:我们如何在磁盘上查找存储在其自己的表空间中的 InnoDB 表的表大小(前提是 innodb_file_per_table=1 )。...在我们得到答案之前,先展示通过 sysbench 运行预先获得的图表(批量数据插入表): ?...结论 回答一个微不足道的问题“这个表在磁盘上占用了多少空间?” 在 MySQL 中真的不是一个简单的问题 - 显而易见的数据,可能会得到错误的答案。
查看binlog过期时间,设置的时间为90天,这个值默认是0天,也就是说不自动清理,可以根据生产情况修改,本例修改为7天 mysql> show variables like 'expire_logs_days...-----------+-------+ | expire_logs_days | 90 | +------------------+-------+ 1 row in set (0.00 sec) mysql...将会new一个新文件用于记录binlog) 我们执行flush logs; mysql> flush logs; Query OK, 0 rows affected, 64 warnings (0.16...sec 如果binlog非常多,不要轻易设置改参数,有可能导致io争用,这时候可以使用purge命令予以清除: 将bin.000055之前的binlog清掉: mysql>purge binary logs...to 'bin.000055'; 将指定时间之前的binlog清掉: mysql>purge binary logs before '2017-05-01 13:09:51';
问题的原因一点都不简单,涉及的知识点: Python 是如何保存运行时的数据(各种变量的赋值与获取) 运行帧栈(frame)概念 本文对 frame 不作深入介绍 ---- 全局与本地储存区 先看一段非常简单的代码...都以字典的形式保存数据,而字典的 key 就是一些变量名字 调用堆栈列表中,第一行就是当前执行作用域, 是模块的意思 其实 locals 和 globals 字典都来自于 frame 在执行模块代码之前...还是之前的规则, 先 locals 后 globals 进行查找 ,显然这次从 globals 找到,因此 a 的值是 1 于是 x 变量创建完毕,locals 里面保存了 x 相关数据 接下来执行函数中的最后一句代码...global 关键字可以让我们在函数里面修改全局变量 其实约等价于: 行5:直接修改 globals 字典,同时避免在 locals 里面创建了变量 ---- exec 的问题 回到 exec 的问题上...与 locals 为2个独立的字典 执行里面代码 a=100 ,只在 locals 字典里面保存了变量 a 执行函数里面的代码, 此时函数 globals 就是模块 frame 的 globals,但是上一步没有把
关于字符串在JVM的哪里 字符串对象在JVM中可能有两个存放的位置:字符串常量池或堆内存。...使用常量字符串初始化的字符串对象,它的值存放在字符串常量池中; 使用字符串构造方法创建的字符串对象,它的值存放在堆内存中; 另外String提供了一个API, java.lang.String.intern...(),这个API可以手动将一个字符串对象的值转移到字符串常量池中 JDK1.7之后虽然字符串常量池也转换到了堆中,但是其实字符串常量池是在堆中独立开辟的空间,我们创建一个普通字符串和一个字符串对象结构类似于下图...代码验证 这里其实我们可以看出一些intern()的特性了. intern源码分析 我们来看intern方法的实现,intern方法的底层是一个native方法,在Hotspot JVM里字符串常量池它的逻辑在注释里写得很清楚...总结 在Java应用恰当得使用String.intern()方法有助于节省内存空间,但是在使用的时候,也需要注意,因为StringTable的大小是固定的,如果常量池中的字符串过多,会影响程序运行效率。
PT工具在MYSQL中的使用其实已经好像有“半个世纪了”,其出名的原因主要是因为pt-osc,如果你不知道,那你真的用过MYSQL,其实还有另外两家 FB-OST , GH-OST....1 有些操作中,会引起高负载的写操作 2 在原表和新表切换的过程中更名,可能有失败的可能(虽然这样的情况不多,但可能存在) 3 要求多,主键(具有唯一性的),表有外键的时候需要添加参数,并且很可能还是有问题...大家可以想一下,如果我同事更改15个表,要产生多少trigger,多少了connections 要被消耗,系统的工作负载会非常的重,MYSQL 不喜欢这样,而使用了binlog他不管修改多少表,他对于MYSQL...,到结束拷贝后,在将binlog 里面的数据进行提取,然后在新表上操作,待完成后在更换两个表rename,达到与原来加trigger的目的一样的效果。...,那就需要指定这个参数 -nice-ratio float 在每次操作之间需要等待的时间 -throttle-additional-flag-file 保存throttle的设置的路径
SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } executeUpdate创建DB并使用他的前两个...(Util.java:411) at com.mysql.jdbc.Util.getInstance(Util.java:386) at com.mysql.jdbc.SQLError.createSQLException...(SQLError.java:1053) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4074) at com.mysql.jdbc.MysqlIO.checkErrorPacket...(MysqlIO.java:4006) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2468) at com.mysql.jdbc.MysqlIO.sqlQueryDirect...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
尝试在 SQL Server 2008 中保存表时出现错误消息:"保存的更改不允许的" 解决方法: 启动SQL Server 2008 Management Studio 工具菜单----选项----Designers...(设计器)----表设计器和数据库设计器----阻止保存要求重新创建表的更改 取消勾选即可 ? ...项目当中随着需求变更等经常会发生字段增减变化等现象,不能修改表设计着实让人恼火。...一旦数据库在不通知实体生成工具的情况下,做了表结构的更改,那带来的后果必然是导致实体类文件的应用出错。尽管它可能会为开发人员带来数据库字段更改上的麻烦,但却降低了底层与上层结合时发生错误的几率。...所以这样看来,“阻止保存要求重新创建表的更改”这一默认选项的设置还是别有一番深意的。
站在正常的业务逻辑中: 如果班级没有名字,你不知道你在哪个班级 如果教室名字可以为空,就不知道在哪上课 所以我们在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中。...列描述comment 列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解,。...要注意的是,这只是最后显示的结果,在MySQL中实际存储的还是2....对于自增长:默认是从1开始插入的,如果默认插入了一个值作为起始值,则从这个起始值加1开始 所以我们在创建表的时候可以给自增长设置一个起始值: mysql> create table t22( -...此时,在实际使用的时候,可能会出现什么问题? 有没有可能插入的学生信息中有具体的班级,但是该班级却没有在班级表中?
collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准 2、创建表的案例 create table users ( id int, name varchar(20) comment...MyISAM; 3、查看表结构 desc 表名 示例: 4、修改表 在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。...案例: 4.1.在users表中添加两条记录 mysql> insert into users values(1,'a','b','1982-01-04'),(2,'b','c','1984-01- 04...'); 4.2.在users表添加一个字段,用于保存图片路径 mysql> alter table users add assets varchar(100) comment '图片路径' after...(100) | YES | | NULL | | +----------+--------------+------+-----+---------+-------+ 插入新字段后,对原来表中的数据没有影响
表与表之间的关系 表1 foreign key 表2 则表1的多条记录对应表2的一条记录,即多对一 利用foreign key的原理我们可以制作两张表的多对多,一对一关系 多对多: 表1的多条记录可以对应表...2的一条记录 表2的多条记录也可以对应表1的一条记录 一对一: 表1的一条记录唯一对应表2的一条记录,反之亦然 分析时,我们先从按照上面的基本原理去套,然后再翻译成真实的意义,就很好理解了...1、先确定关系 2、找到多的一方,把关联字段写在多的一方 一对多 多对一或者一对多(左边表的多条记录对应右边表的唯一一条记录) 需要注意的: 1.先建被关联的表,保证被关联表的字段必须唯一。...2.在创建关联表,关联字段一定保证是要有重复的。 示例: 这是一个书和出版社的一个例子,书要关联出版社(多个书可以是一个出版社,一个出版社也可以有好多书)。 谁关联谁就是谁要按照谁的标准。...图片 创建表 书要关联出版社 被关联的表 create table press(id int primary key auto_increment, name char(20)); 关联的表 create
这需要调查下insert buffer功能、insert buffer merge的流程以及删除表的流程。...innodb主线程(svr_master_thread)merge的主流程如下: 主线程从ibuf树的叶子节点读取页号和space号,并记录到一个二元数组中(未加锁); 主线程对二元组中space进行检测是否在表空间缓存中...如果检测到大于0,意味着还有依赖的I/O未完成,睡眠20ms后重试; 此时认为已经没有冲突的操作了,刷出所有脏页面或删除所有给定的表空间的页面; 从表空间缓存删除指定space的记录; 删除对应数据文件...两线程的交互如下图所示: ? 不出意外的话,在打中断点时必然有线程在执行对应表的删除操作。...的space id,如果space id是相同的,直接删除对应ibuf的记录(当前分配的最大space id记录在系统表空间,space id占4个字节,低于0xFFFFFFF0UL,分配时读取系统表空间保存的值
二、默认值 默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值。...三、列描述 没有实际含义,专门用来描述字段(相当于注释),会根据表创建语句保存,用来给程序员或DBA来进行了解。...'学号', name varchar(5) ); 创建好表之后,我们可以追加主键 2.删除主键 alter table 表名 drop primary key; 案例: 3.复合主键 在创建表的时候...索引: 在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结 构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。...索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。 索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。
站在正常的业务逻辑中: 如果班级没有名字,你不知道你在哪个班级。 如果教室名字为空,就不知道在哪上课。 所以我们在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中。...而如果为我们没有在创建表的时候显示声明默认值,MySQL会优化,自动加上默认值为NULL。 四....列描述 列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA(数据库管理员)来进行了解。 可以看到通过desc是看不到注释信息的,得用show才能看到。...并且建表之后添加主键需要保证在表中需要设置主键的那列元素不能冲突。...主要是因为方框内的设定,意思是下一次插入没有指定则就是1002。 那是不是对于每个空表,插入没有指定的值的时候都是从1开始呢?其实我们可以在创建表的时候就指定: 这样就指定初始为500。
反过来,在 mysql 角度,凡是插入进来的数据,都是符合数据约束的!约束的最终目的就是保证数据的完整性和可预期性。因此我们需要更多的约束条件!...,如下: 假设我们需要创建一个班级表,包含班级名和班级所在的教室,站在正常的业务逻辑中: 如果班级没有名字,你不知道你在哪个班级 如果教室名字可以为空,就不知道在哪上课 所以我们在设计数据库表的时候,一定要在表中进行限制...三、列描述 列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或 DBA 来进行了解。...的值由原来的 1 变成 00001,这就是 zerofill 属性的作用,如果宽度小于设定的宽度(这里设置的是 5),自动填充 0;要注意的是,这只是最后显示的结果,在 MySQL 中实际存储的还是1...建立外键的本质其实就是把相关性交给 mysql 去审核了,提前告诉 mysql 表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql 不允许你插入。
约束的本质: 通过技术手段倒逼程序员插入正确的数据。反过来站在mysql的视角,凡是插入进来的数据,都是符合数据约束的。 约束的最终目标: 保证数据的完整性和可预期性。 为什么数据库这么严格?...二.表的非空约束 1.NULL与’ '比较 在MySQL数据类型已经说过,这二者是不同的,NULL代表什么都没有,而' '代表一个空串。 在select语句中,NULL不会参与到相应的计算操作中。...这是由于在表结构内部存在一个能够存储下一个id值的值,当下一条数据插入,就会将这个值赋值给新的数据对应的id字段: 而我们手动插入的值,实际上就会更改这个值,即将手动的值+1保存到此位置。...如果将学生表和班级表结合成一个表,那么在插入数据时,就需要插入大量的字段造成没必要的冗余。若将其分成两个表,那么通过一一对应的映射,来减少没必要的数据。 为什么会造成没必要的冗余?...只有在student中不存在id=1的学生,才能删除。 这就叫做外键约束。外键的本质就是产生关联,增加约束,保证表和表之间的完整性。
背景 某次和领导吃饭,无意中提到了房子的话题,说了几句自己的心得经验(虽然没有再次实操的资本),却给领导留下了深深的印象(领导,你不是又要在郑州置业了吧)。 ?...前段时间一个老朋友也联系我咨询郑州房子的事情(难道就因为我在郑州吗?)。那朋友一连串问了我好几个为题,听说郑州现在房子降价了?现在该不该买?买这个XXX楼盘合适吗? ? 可是,我们是老朋友,你懂的。...本着负责任的态度,今天我们来一块分析下郑州的房价,数据爬取自某房中介网站(我只是数据的搬运工,不对数据真实性负责哈)。 ?...买房最关心的应该就是房屋的价格,下面我们来看下每个区域的价格分布。 首先对原始数据进行处理,去掉单位,方便后续计算。...单价1万5左右的房子最多。曾经有人问我,一个城市的房价多高最幸福,我想的是工资是房价的1.2倍,然后没有贷款…… ?
#前言:我们说过,库相当于一个文件夹,表相当于文件夹里的一个个文件,表里面的一条记录相当于一行内容,表中的一条记录有对应的标题,称为表的字段 #直观表 ?...字节 极大文本数据 #创建表的时候指定存储引擎 mysql> create table test ( -> id int(4) not null auto_increment,...#语法格式:drop table 表名> #例子:删除db库里面的student表 mysql> use db; Database changed mysql> show tables; #查看库中的表...#语法格式:alter table 表名 add 字段 类型 其他: #查看帮助:help alter table #例子:在test表中添加字段sex,age,qq,类型分别为char(4),int...> alter table test add age int(4) after name; #提示:after是后的意思,在name字段添加age Query OK, 0 rows affected
从以下地址下载emoji的utf8编码文件 https://gist.github.com/JoshyPHP/225b3c77005a89d81511 2. ...建立字典表 create table emoji_utf8(c varchar(10)); insert into emoji_utf8 select 0x23E283A3 ;insert into...in (39539523,39205786) and x.content like concat('%',c,'%'); 加distinct是因为存在同一表情符号对应两个utf8编码的情况
Oracle数据库中自带的4张表: dept、emp、bonus和salgrade是练习SQL查询的经典案例表,本文提供在MySQL中建这4张表的SQL语句 1....创建dept表 CREATE TABLE `dept`( `deptno` INT(2) NOT NULL, `dname` VARCHAR(14), `loc` VARCHAR...创建emp表 CREATE TABLE `emp` ( `empno` int(4) NOT NULL PRIMARY KEY, `ename` VARCHAR(10), `...创建bonus表 CREATE TABLE `bonus`( `ename` VARCHAR(10), `job` VARCHAR(9), `sal` INT, `comm...创建salgrade表 CREATE TABLE `salgrade` ( `grade` int, `losal` int, `hisal` int ) ENGINE
简介 在使用Typora编写markdown格式的时候,我有个痛点问题。就是在windows下,我保存的图片和文档不方便拷贝到其他电脑。 其实,一切的原因在于我不熟悉。 不过,没关系。...设置图片保存在本地的指定文件夹,并且以相对路径保存 用这种方式目前来看是最好的。或者说是最适合我的。 因为我没有兴趣去弄一个网络图床什么的,就是喜欢文档保存在电脑本地。...创建一个专门保存图片的文件夹 ? 配置保存路径 编辑 > 图片工具 > 全局图像设置 ? ? 注意:设置之后,重启一下Typora工具 复制图片,测试看看 ?...查看图片是否保存到文件夹 ? 好啦,经过测试。其实不一定要创建 assets 文件夹,图片保存的时候会自动创建。...迁移Typora的文件 因为是基于相对路径,那么只要拷贝markdown文件以及图片文件夹即可迁移。 ? ----
领取专属 10元无门槛券
手把手带您无忧上云