Myisam-存储引擎-动态格式-DELETED ROWS
在上一节<Mysql-MYISAM 动态格式数据存储结构>中,我们简单地谈到了:如果行被删除,那么其标志位为被置为"00".而且行的部分数据会被重新赋值.在这一章节中,我们将详细讨论:在动态格式的表中,如果行数据被删除了,这一行的数据将如何发生变化,以及其数据所包含的具体含义.[@more@]1.测试环境OS : LINUX 2.6.9-42.ELsmpDB : MYSQL 5.0.51aENGINE : MYISAM DEFAULT CHARSET=latin12. 动态格式表中被删除的记录存储2.1 模拟数据drop table if exists heyf ;create table heyf (id int , name varchar(50)) type myisam DEFAULT
10G中SQLPLUS的PAGESIZE与HEAD的关系
set pagesize 0 , set heading on ,HEAD,SQLPLUS ,ORA 10G[@more@]前几天数据提取,发现SPOOL出来的数据是没有HEAD的.环境: LINUX AIX + ORA 10G , 脚本如下:------------------------------------------------#! /bin/sh. /home/oracle/.bash_profilesqlplus -s itrade/aaaaaa <<EOFset echo offset linesize 10000set long 2000set term off verify off feedback off set pagesize 0 spool /tmp/report.txt ;select count(*) as aa from tab;spool off ;exitEOF exit 0---------------------------------------------------而我们
MYSQL 数据类型存储-数值型
探索MYSQL 数值类型的存储,以及解读方法.on Engine of myisam[@more@]1. 环境版本: OS : LINUX AS4 MYSQL: 5.0.51a-logENGINE : Myisam DEFAULT CHARSET=latin12. 本章研究的数值类型对象:TINYINT 1个字节 FIXEDSMALLINT 2个字节 FIXEDMEDIUMINT 3个字节 FIXEDINT, INTEGER 4个字节 FIXEDBIGINT 8个字节 FIXEDDECIMAL(M,N) >=4字节 FIXED3. 数值类型: TINYINT SMALLINT MEDIUMINT INT BIGINT 这几种数据存取方式都是一样的: 高位优先存储,符号位(0正,1负)drop table if exists heyf ; create table heyf (id TINYINT ) type myisam D
Myisam-存储引擎-MYI索引文件-2
进一步一剖析MYI索引文件的树形结构存储以及索引块的定位[@more@]1. 绪我们在上一节<Myisam-存储引擎-MYI索引文件-1>中,仔细地探讨了索引文件的结构以及各位的含义.从而让我们了解了MYI. 但是用的例子由于行数比较少, 所有KEY VALUE都存储到了ROOT块. 没有出现多层的索引树结构. 通过这个例子,我们来了解一下,当有索引树出现多层的时候,MYSQL是怎么处理的.2. 创建脚本:drop table if exists heyf ;create table heyf (id char(5)) type myisam DEFAULT CHARSET=latin1;drop procedure if exists proc1;delimiter $$create procedur
Myisam 存储引擎-MYI索引文件-1
深入挖握MYI索引文件的具体存储,以及定位数据文件的方法[@more@]-- Myisam 存储引擎的索引文件.MYI -11. 介绍.MYI文件是MYISAM表的索引文件,它一般与.MYD文件同时创建,并存放在相同的目录中,..MYI索引文件主要包括两个部分: The header information and The key values. 下面我们将从这两个部分介绍索引文件.2. The .MYI Header ".MYI Header "主要包括以下几块内容:Section Occurrences------- -----------state Occurs 1 timebase Occurs 1 timekeydef (including keysegs) Occurs once for each keyrecinfo Occurs once for
MYSQL-数据类型存储-DATE
MYSQL-数据类型存储-DATE on Engine of myisam[@more@]1. 环境版本: OS : LINUX AS4 MYSQL: 5.0.51a-logENGINE : Myisam DEFAULT CHARSET=latin12. 分析date 类型共占3个字节(24位),范围'1000-01-01'到'9999-12-31' , 格式'YYYY-MM-DD' ,其中:从左到右数1~15位: 存储年(共15位)16~19位: 存储月(共4位)20~24位: 存储日(共5位)比如," 2009-03-09",其中:十进制 十六进制 二进制-----------------------------------2009 -> 0X7D9 -> 000 0111 1101 100103 -> 0X03 -> 001109 -> 0X09 -> 01001-----------------
MYsql-存储过程-游标的嵌套
在ITPUB: http://www.itpub.net/viewthread.php?tid=1134085&pid=13049789&page=1&extra=#pid13049789上有人发贴说游标不能嵌套,自己搞了一下,答案确实是..[@more@]create table heyf_6 (empid int , deptid int );insert into heyf_6 values (1,20),(2,30),(5,20),(4,50),(6,20);--按DEPTID从小到大打印各个部分里的EMPIDDROP PROCEDURE IF EXISTS proc_empid;DELIMITER //CREATE PROCEDURE proc_empid()BEGINdeclare done int default 0;declare v_dept int ; declare cur_dept cursor For select distinct deptid from
Myisam 静态格式数据存储结构
Myisam 静态格式 数据的物理存储 行header 内部分析[@more@]1. 从简单的例子开始1.1 创建测试数据drop table if exists heyf_5 ;create table heyf_5 (id int , name char(10),addr char(20)) engine myisam DEFAULT CHARSET=latin1;insert into heyf_5 values (12,'hyf','street-1') ,(13,'steven','street-2') ; system hexdump /opt/mysql/data/test/heyf_5.MYD------------------------------------------------0000000 0cf1 0000 6800 6679 2020 2020 2020 73200000010 7274 6565 2d74 2031 2020 2020 2020 20200000020 2020 f120 0
MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能.
由于MYSQL没有提供类似ORACLE中OVER()这样丰富的分析函数. 所以在MYSQL里需要实现这样的功能,我们只能用一些灵活的办法:[@more@]1.首先我们来创建实例数据:drop table if exists heyf_t10;create table heyf_t10 (empid int ,deptid int ,salary decimal(10,2) ); insert into heyf_t10 values (1,10,5500.00),(2,10,4500.00),(3,20,1900.00),(4,20,4800.00),(5,40,6500.00),(6,40,14500.00),(7,40,44500.00),(8,50,6500.00),(9,50,7500.00);2. 确定需求: 根据部门来分组,显示各员工在部门里按薪水排名名次.显示结果预期如下:+-------+---
Oracle 行列转换小结
字符串-->多行多行--> 字符串[@more@] 多行-->字符串-- 建立测试数据drop table heyf_t8;create table heyf_t8 ( APP_ID VARCHAR2(20) , APP_CATEGORY_ID VARCHAR2(20) ); insert into heyf_t8 values ('1','A');insert into heyf_t8 values ('1','b');insert into heyf_t8 values ('1','c');insert into heyf_t8 values ('2','sdf');insert into heyf_t8 values ('2','B');insert into heyf_t8 values ('2','C');insert into heyf_t8 values ('2','C');insert into h
mysql开发-动态语句编写-引号使用
我们在写MYSQL存储过程的动态SQL时, 往往是先写好SQL原型,再根据需要来写成动态的形式.但往往这个过程是非常痛苦的,因为在这中间你可以需要处理很多个单引号及一些特殊字符.[@more@]我们在写MYSQL存储过程的动态SQL时, 往往是先写好SQL原型,再根据需要来写成动态的形式.但往往这个过程是非常痛苦的,因为在这中间你可以需要处理很多个单引号及一些特殊字符.(如果你写过ORACLE PL/SQL就会有相会的经验).不过呢,非常幸运的是,在MYSQL中支持双引号". 也就是说你基本不去改SQL原型,MYSQL会原样搬过来.比如,我们要的SQL原型如下: select *
SQL优化-关于ORDERED-HASH中错误选择连接字段对性能的影响
关于ORDERED-HASH中错误选择连接字段对性能的影响[@more@]在BOSS项目的优化过程中,遇到了这么一个情况:SELECT">heyf@VOUCHER>SELECT /*+ ordered use_hash(c t cr con ) */ count( distinct c.customer_id) FROM crm_customer c, (select t.customer_id,max(t.gmt_train) gmt_train from crm_train_record t where t.gmt_train >= to_date('2008-02-01', 'yyyy-MM-dd') - 5 and t.gmt_train < to_date('2009-02-26','yyyy-MM-dd')+