由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Database版 - table的每行数据是以二叉树结构存在硬盘里的吗?
相关主题
SQL问题请教: add one more column数据库入门知识之3(关系数据库)
请教 sql 表操作请教C++制作数据库的问题
请问mysql 里如何创建超宽表求教长文本录入
MySQL 如此之慢?请教
Mysql limits急! 急!向sybase表中插入数据不好用?
MySQL row selection question请问sql server7 中 updatetext的用法,在asp中如何使用
MySQL,文本数据,同一行数据中,多于一种分隔符的读取SQL Server 中如何设置Unique字段.
MYSQL 的LOG SIZE怎么在不停 变大有关m# sql server text字段类型一问
相关话题的讨论汇总
话题: 数据话题: dept话题: pk话题: 删除话题: keyid
进入Database版参与讨论
1 (共1页)
c*********e
发帖数: 16335
1
如果table的每行数据是以二叉树结构存在硬盘里,那么我删去一行数据之后,这行的
primary key对应的数据是空的。比如现在有100行数据在一个表里,我删去了
primary key是keyid=5的那一行数据,那么我再加新的一行数据进这个表,新的数据的
keyid应该是5,而不是101,对不对?
但是,在使用mysql之类数据库的时候,现在有100行数据在一个表里,我删去了
primary key是keyid=5的那一行数据,那么我再加新的一行数据进这个表,新的数据的
keyid是101。 这说明数据不是按照二叉树存储在硬盘里的。
到底怎么回事呢?mysql, oracle,sql server,每个数据库软件不一样?
e****7
发帖数: 4387
2
这个primary key 是不是identity column? 所以才自己递增。
n******1
发帖数: 3756
3
mysql 有key id ?

【在 c*********e 的大作中提到】
: 如果table的每行数据是以二叉树结构存在硬盘里,那么我删去一行数据之后,这行的
: primary key对应的数据是空的。比如现在有100行数据在一个表里,我删去了
: primary key是keyid=5的那一行数据,那么我再加新的一行数据进这个表,新的数据的
: keyid应该是5,而不是101,对不对?
: 但是,在使用mysql之类数据库的时候,现在有100行数据在一个表里,我删去了
: primary key是keyid=5的那一行数据,那么我再加新的一行数据进这个表,新的数据的
: keyid是101。 这说明数据不是按照二叉树存储在硬盘里的。
: 到底怎么回事呢?mysql, oracle,sql server,每个数据库软件不一样?

e****7
发帖数: 4387
4

嗯,多半这个primary key column 加了auto_increment

【在 n******1 的大作中提到】
: mysql 有key id ?
s**********o
发帖数: 14359
5
TABLE硬盘存储不是B-TREE么,什么时候变BINARY TREE了?
LOGICAL存储和PHYSICAL存储不是一回事好不好,怎么硬盘
存储当然是不同的软件不同的操作系统是不同的。LZ明显
地基本功不扎实,很多概念都不懂,你的PK是个AUTO INCREMENT的
INDENTITY吧,否则怎么会只增不减,学得什么呀。
c*****d
发帖数: 6045
6
clustered table是b-tree结构
heap table不是
另外你这个问题根本和b-tree一点关系没有,就是这个字段有一个auto increment

【在 c*********e 的大作中提到】
: 如果table的每行数据是以二叉树结构存在硬盘里,那么我删去一行数据之后,这行的
: primary key对应的数据是空的。比如现在有100行数据在一个表里,我删去了
: primary key是keyid=5的那一行数据,那么我再加新的一行数据进这个表,新的数据的
: keyid应该是5,而不是101,对不对?
: 但是,在使用mysql之类数据库的时候,现在有100行数据在一个表里,我删去了
: primary key是keyid=5的那一行数据,那么我再加新的一行数据进这个表,新的数据的
: keyid是101。 这说明数据不是按照二叉树存储在硬盘里的。
: 到底怎么回事呢?mysql, oracle,sql server,每个数据库软件不一样?

f**d
发帖数: 1952
7
刚开始学数据库,试者回答一下,错的话,请改正。
PK很多是auto-number。PK本身一般是不能删除的,因为很多时候PK是另一个表的FK。
当增加一行新数据时,就会相应地分配一个新的PK值,否则,会发生在其它表(FK表)
中数据的不对应(不一致,混乱)。
至于表上的数据是如果存在硬盘上的,这个好象不在数据库考虑的范围里。

【在 c*********e 的大作中提到】
: 如果table的每行数据是以二叉树结构存在硬盘里,那么我删去一行数据之后,这行的
: primary key对应的数据是空的。比如现在有100行数据在一个表里,我删去了
: primary key是keyid=5的那一行数据,那么我再加新的一行数据进这个表,新的数据的
: keyid应该是5,而不是101,对不对?
: 但是,在使用mysql之类数据库的时候,现在有100行数据在一个表里,我删去了
: primary key是keyid=5的那一行数据,那么我再加新的一行数据进这个表,新的数据的
: keyid是101。 这说明数据不是按照二叉树存储在硬盘里的。
: 到底怎么回事呢?mysql, oracle,sql server,每个数据库软件不一样?

c*****d
发帖数: 6045
8
PK是可以删除的,但是确实要保证没有FK指向这个PK的值
或者是你保证,或者是数据库保证
比如,employee和department表
employee(employee_id, dept_id)
1, A
2, A
3, B
4, B
department (dept_id)
A
B
C
department中的dept_id是PK,你删除C没问题,删除A部门要么你自己先删除employee
中A部门的员工,要么用cascade constraints自动删除

【在 f**d 的大作中提到】
: 刚开始学数据库,试者回答一下,错的话,请改正。
: PK很多是auto-number。PK本身一般是不能删除的,因为很多时候PK是另一个表的FK。
: 当增加一行新数据时,就会相应地分配一个新的PK值,否则,会发生在其它表(FK表)
: 中数据的不对应(不一致,混乱)。
: 至于表上的数据是如果存在硬盘上的,这个好象不在数据库考虑的范围里。

c*********e
发帖数: 16335
9
okay,就你这个可能和我的问题有点沾边。接着你的这个帖子问,
department (dept_id)
dept_id=1, A
dept_id=2, B
dept_id=3, C
dept_id=4, D
删除了department里面的C行之后,如果我想加一行新数据到department里面,让这行
新数据的dept_id=3,而不是dept_id=5,可以吗?

PK是可以删除的,但是确实要保证没有FK指向这个PK的值
或者是你保证,或者是数据库保证
比如,employee和department表
employee(employee_id, dept_id)
1, A
2, A
3, B
4, B
department (dept_id)
A
B
C
D
department中的dept_id是PK,你删除C没问题,删除A部门要么你自己先删除employee
中A部门的员工,要么用cascade constraints自动删除

【在 c*****d 的大作中提到】
: PK是可以删除的,但是确实要保证没有FK指向这个PK的值
: 或者是你保证,或者是数据库保证
: 比如,employee和department表
: employee(employee_id, dept_id)
: 1, A
: 2, A
: 3, B
: 4, B
: department (dept_id)
: A

c*****d
发帖数: 6045
10
这要看你这个字段是怎么定义的
如果是auto increment,不行,只能是5
如果是个普通的字段,可以

【在 c*********e 的大作中提到】
: okay,就你这个可能和我的问题有点沾边。接着你的这个帖子问,
: department (dept_id)
: dept_id=1, A
: dept_id=2, B
: dept_id=3, C
: dept_id=4, D
: 删除了department里面的C行之后,如果我想加一行新数据到department里面,让这行
: 新数据的dept_id=3,而不是dept_id=5,可以吗?
:
: PK是可以删除的,但是确实要保证没有FK指向这个PK的值

y*****g
发帖数: 677
11
我觉得你们所有的人都没有正确回答提问者的问题。
每行数据在硬盘里的存储相当复杂,很少人真正去研究它,而且也没有太多的必要。
MySQL 和其他的数据库实施的方法不一样。也INNODB ENGINE 为例,缺省的PAGE SIZE
是16K,它 有向前和向后的指针,指向其他的INDEX NODE, 数据就存在这个INDEX PAGE
里, 如果这个是LEAF NODE 的话。
未完待续
n******1
发帖数: 3756
12
说实在,他的问题并不准确,包括他补充的问题
其实Database System Concepts 这本书里面也提到很多存储的细节,当然针对每个数
据库的实现情况都不大一样

SIZE
PAGE

【在 y*****g 的大作中提到】
: 我觉得你们所有的人都没有正确回答提问者的问题。
: 每行数据在硬盘里的存储相当复杂,很少人真正去研究它,而且也没有太多的必要。
: MySQL 和其他的数据库实施的方法不一样。也INNODB ENGINE 为例,缺省的PAGE SIZE
: 是16K,它 有向前和向后的指针,指向其他的INDEX NODE, 数据就存在这个INDEX PAGE
: 里, 如果这个是LEAF NODE 的话。
: 未完待续

1 (共1页)
进入Database版参与讨论
相关主题
有关m# sql server text字段类型一问Mysql limits
二个简单Access问题MySQL row selection question
有没有PostgreSQL的多表多字段查询利器?MySQL,文本数据,同一行数据中,多于一种分隔符的读取
how to write this sql statementMYSQL 的LOG SIZE怎么在不停 变大
SQL问题请教: add one more column数据库入门知识之3(关系数据库)
请教 sql 表操作请教C++制作数据库的问题
请问mysql 里如何创建超宽表求教长文本录入
MySQL 如此之慢?请教
相关话题的讨论汇总
话题: 数据话题: dept话题: pk话题: 删除话题: keyid