数据库实验六:存储过程实验
掌握数据库PL/SQL编程语言,以及数据库存储过程的设计和使用。定义一个存储过程来更新支出表中教科书的总费用。BEGIN UPDATE expenditureSET amount = WHERE expenditure_type = "textbook";BEGIN UPDATE sc_summarySET capacity = newCapacityWHERE cno = sc_summary.cno;定义一个存储过程来更新学生的加权平均分数信息并返回分数。在MYSQL中,ALTER PROCEDURE语句用于修改存储过程的某些特征。COMMENT "计算指定学生的平均加权成绩";指定只有定义者有权限。在MYSQL中,要获取OUT值,需要先声明一个变量,然后执行函数或存储过程来获取结果
实验6 存储过程实验 实验6.1 存储过程实验 1. 实验目的
掌握数据库PL/SQL编程语言,以及数据库存储过程的设计和使用。
二、实验内容及要求
存储过程的定义、存储过程的运行、存储过程的重命名、存储过程的删除、存储过程的参数传递。 掌握PL/SQL编程语言和编程规范,规范存储过程的设计。
3 实验重点与难点
实验重点:存储过程的定义和操作。
实验难点:存储过程的参数传递方法。
4. 实验过程
(1)不带参数的存储过程
定义一个存储过程来更新支出表中教科书的总费用。
DELIMITER $
CREATE PROCEDURE proc_calTextBookExpense()
BEGIN UPDATE expenditureSET amount = (SELECT SUM(total_price)FROM textbook_order)WHERE expenditure_type = "textbook";
END$
DELIMITER ;
执行存储过程。
CALL proc_calTextBookExpense();
(2)带参数的存储过程
定义一个存储过程来更新特定课程的容量。
DELIMITER $
CREATE PROCEDURE proc_updateCourseCapacity(cno CHAR(9), newCapacity SMALLINT)
BEGIN UPDATE sc_summarySET capacity = newCapacityWHERE cno = sc_summary.cno;
END$
DELIMITER ;
执行存储过程。
call proc_updateCourseCapacity('21', 100);
(3) 带有局部变量的存储过程
定义一个存储过程来更新学生的表现信息。
/*成绩表,记录成绩信息*/
create table grade(sno char(9) PRIMARY KEY,avg_grade FLOAT,avg_weight_grade FLOAT
)
/*存储过程*/
DELIMITER $
CREATE PROCEDURE proc_updateGrade(sname CHAR(20))
BEGIN /*局部变量声明*/DECLARE sno CHAR(9);DECLARE avg_grade SMALLINT;DECLARE avg_weight_grade FLOAT;/*查询sno存储到局部变量*/SELECT student.sno INTO snoFROM student WHERE student.sname = sname;/*计算成绩表-算数平均成绩*/SELECT SUM(grade) / COUNT(*) INTO avg_gradeFROM SCWHERE SC.sno = sno;/*计算加权平均成绩*/SELECT SUM(grade*Ccredit) / SUM(Ccredit) INTO avg_weight_gradeFROM SC,courseWHERE SC.sno = sno AND SC.cno = course.cno;/*更新成绩表*/INSERT INTO grade VALUES (sno, avg_grade, avg_weight_grade) ON DUPLICATE KEY UPDATE grade.avg_grade = avg_grade, grade.avg_weight_grade = avg_weight_grade;
END$
DELIMITER ;
执行存储过程。
call proc_updateGrade('李勇');
查看执行结果。
SELECT * FROM grade;
(4) 带输出参数的存储过程
定义一个存储过程来更新学生的加权平均分数信息并返回分数。
/*存储过程*/
DELIMITER $
CREATE PROCEDURE proc_updateAvgWGrade(sname CHAR(20), out result REAL)
BEGIN /*局部变量声明*/DECLARE sno CHAR(9);DECLARE avg_weight_grade FLOAT;/*查询sno存储到局部变量*/SELECT student.sno INTO snoFROM student WHERE student.sname = sname;/*计算加权平均成绩*/SELECT SUM(grade*Ccredit) / SUM(Ccredit) INTO avg_weight_gradeFROM SC,courseWHERE SC.sno = sno AND SC.cno = course.cno;SELECT avg_weight_grade INTO result;/*更新成绩表*/INSERT INTO grade VALUES (sno, avg_grade, avg_weight_grade) ON DUPLICATE KEY UPDATE grade.avg_grade = avg_grade, grade.avg_weight_grade = avg_weight_grade;
END$
DELIMITER ;
执行存储过程并获取返回结果。
set @result = 0;
call proc_updateAvgWGrade('李勇', @result);
select @result;
(5)修改存储过程
在MYSQL中,ALTER PROCEDURE语句用于修改存储过程的某些特征。 如果要修改存储过程的内容,可以先删除原来的存储过程,然后创建一个同名的新存储过程; 如果要修改存储过程的名称,可以先删除原来的存储过程,然后创建一个不同名称的新存储过程。 过程。
MySQL中修改存储过程的语法格式如下:
ALTER PROCEDURE 存储过程名称 [特性...]
Characteristics 指定存储过程的特征。 可能的值为:
COMMENT 'string' 代表评论信息。
在存储过程中添加注释信息:
ALTER PROCEDURE proc_updateAvgWGrade
COMMENT "计算指定学生的平均加权成绩";
指定只有定义者有权限。
ALTER PROCEDURE proc_updateAvgWGrade MODIFIES SQL DATA SQL SECURITY DEFINER;
SHOW CREATE PROCEDURE proc_updateAvgWGrade;
(6)删除存储过程
删除存储过程proc_updateAvgWGrade。
DROP PROCEDURE proc_updateAvgWGrade;
5. 实验总结
用户定义的函数和存储过程可以具有 IN、OUT 和 INOUT 参数。 在MYSQL中,要获取OUT值,需要先声明一个变量,然后执行函数或存储过程来获取结果。 不能传入NULL来获取结果集。 存储过程的名称或内容无法修改,只能修改其特征。 用户定义函数只能通过SELECT调用,而存储过程只能通过call调用。
6.思考问题
(1)尝试总结几种调试存储过程的方法
可以通过在存储过程中添加RAISE语句进行调试,也可以使用OUT参数来测试存储过程中的中间结果是否正确。
(2)存储过程中的SELECT语句格式与普通的SELECT语句格式有什么区别? 执行方法有何不同?
存储过程中的SELECT语句与普通SELECT语句的区别在于,存储过程中的SELECT语句通过INTO子句给变量赋值,而普通SELECT语句一般直接返回结果集。
实验6.2 自定义功能实验1.实验目的
掌握数据库PL/SQL编程语言和数据库自定义函数的设计和使用。
二、实验内容及要求
自定义函数定义、自定义函数操作、自定义函数重命名、自定义函数删除、自定义函数参数传递。 掌握PL/SQL和编程规范,以标准化的方式设计自定义函数。
3 实验重点与难点
实验重点:自定义函数的定义和操作。
实验难点:自定义函数的参数传递方法。
4. 实验过程
(1) 自定义函数不带参数
定义一个自定义函数来更新支出表中教科书的总成本并返回成本。 由于MYSQL启用了二进制日志记录,因此需要将log_bin_trust_function_creators修改为TRUE,这意味着当存储函数的创建者可信时,不会创建写入二进制日志并导致不安全事件的存储函数。
/*与6.1中的存储过程类似,将结果返回*/
set global log_bin_trust_function_creators=TRUE;
DELIMITER $
CREATE FUNCTION func_calTextBookExpense()
RETURNS REAL
BEGINDECLARE res REAL;UPDATE expenditureSET amount = (SELECT SUM(total_price)FROM textbook_order)WHERE expenditure_type = "textbook";SELECT SUM(total_price) INTO resFROM textbook_order;RETURN res;
END$
DELIMITER ;
调用该函数,返回值以结果集的形式返回并显示。
SELECT func_calTextBookExpense();
(2)带参数的自定义函数
定义一个自定义函数来更新特定课程的容量并返回剩余容量。
DELIMITER $
CREATE FUNCTION func_updateCourseCapacity(cno CHAR(9), newCapacity SMALLINT)
RETURNS REAL
BEGIN DECLARE res REAL;UPDATE sc_summarySET capacity = newCapacityWHERE cno = sc_summary.cno;SELECT capacity - snum INTO resFROM sc_summaryWHERE cno = sc_summary.cno;RETURN res;
END$
DELIMITER ;
调用该函数。
SELECT proc_updateCourseCapacity('21', 100);
(3) 带有局部变量的自定义函数
定义一个函数,更新学生的加权平均分数信息并返回分数。
DELIMITER $
CREATE FUNCTION func_updateAvgWGrade(sname CHAR(20))
RETURNS FLOAT
BEGIN /*局部变量声明*/DECLARE sno CHAR(9);DECLARE avg_weight_grade FLOAT;/*查询sno存储到局部变量*/SELECT student.sno INTO snoFROM student WHERE student.sname = sname;/*计算加权平均成绩*/SELECT SUM(grade*Ccredit) / SUM(Ccredit) INTO avg_weight_gradeFROM SC,courseWHERE SC.sno = sno AND SC.cno = course.cno;/*更新成绩表*/INSERT INTO grade VALUES (sno, avg_grade, avg_weight_grade) ON DUPLICATE KEY UPDATE grade.avg_grade = avg_grade, grade.avg_weight_grade = avg_weight_grade; /*返回结果*/RETURN avg_weight_grade;
END$
DELIMITER ;
调用该函数。
SELECT func_updateAvgWGrade('李勇');
(4)修改自定义函数
与存储过程类似,修改自定义函数只能修改其特性,而不能修改其名称或函数体。
/*添加注释*/
ALTER FUNCTION func_updateAvgWGrade COMMENT "使用函数计算指定学生的平均加权成绩";
/*修改函数为定义者权限*/
ALTER FUNCTION func_updateAvgWGrade MODIFIES SQL DATA SQL SECURITY DEFINER;
(5)删除自定义函数
删除func_updateAvgWGrade函数。
DROP FUNCTION func_updateAvgWGrade;
5. 实验总结
在MYSQL中,自定义函数在定义时需要声明返回值的类型,并在函数结束后使用RETURN语句返回值。 MYSQL的FUNCTION语句只能通过RETURN返回一个值,不能通过OUT参数返回多个值。 只能通过SELECT语句调用,不能使用call语句调用。
6.思考问题
(1)尝试分析自定义函数和存储过程的区别和联系。
自定义函数和存储过程都是用来执行一些SQL语句,完成计算值等操作。
两者的区别在于:
(2)如何让自定义函数返回多个值? 如何利用?
在MYSQL中,自定义函数不能使用OUT或INOUT参数,因此只能返回一个值。 其他数据库管理系统,如POSTGRELSQL,可以指定OUT参数返回多个值,返回值的类型可以是TABLE,即可以返回一个结果集。 对于OUT参数,可以先定义一个变量,然后调用函数并传入该变量来获取返回值。
实验 6.3 光标实验 1. 实验目的
掌握PL/SQL游标的设计、定义和使用,了解PL/SQL游标按行操作和SQL按结果集操作的区别和联系。
二、实验内容及要求
游标定义和游标使用。 掌握各类游标的特点、区别和联系。
3 实验重点与难点
实验重点:游标定义和使用。
实验难度:光标类型。
4. 实验过程
(1)普通光标
定义一个存储过程来更新 sc_summary 表中每门课程的课程注册人数。
DELIMITER $
CREATE PROCEDURE procCursor_calSCnum()
BEGINDECLARE sc_cno CHAR(9);DECLARE sc_num SMALLINT;DECLARE done BOOL;DECLARE mycursor CURSOR FORSELECT CnoFROM sc_summary;DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;OPEN mycursor;SELECT FALSE INTO done;WHILE NOT done DO/*处理每一条选课统计记录*/FETCH mycursor INTO sc_cno;/*计算选课人数*/SELECT COUNT(*) INTO sc_numFROM SCWHERE sc.Cno = sc_cno;/*更新选课人数*/UPDATE sc_summarySET sc_summary.snum = sc_numWHERE sc_summary.Cno = sc_cno;END WHILE;/*关闭游标*/CLOSE mycursor;
END$
DELIMITER ;
执行存储过程,查询选课统计表,选课数量更新。
CALL procCursor_calSCnum();
select * from sc_summary;
(2)REFCURSOR类型游标
REF CURSOR是动态游标,而一般CURSOR是静态游标。 一般CURSOR结果集的类型在定义时就确定了,不能更改,而动态游标可以打开任何形式的结果集,检索任何类型的记录数据。 MYSQL中只能使用静态游标,定义时的SELECT语句必须确定,不能更改。
(3)带参数的游标
MYSQL中的游标不能带参数。
5. 实验总结
游标逐条处理数据库记录,而不是一起处理结果集。 声明游标和游标结束处理的异常需要按顺序声明。 REF CURSOR 是动态游标。 打开游标时,可以指定一条SELECT语句来生成游标的结果集。 游标的结果可以使用RECORD类型保存。 MYSQL 不支持动态游标,并且没有 RECORD 类型。 游标不能使用参数,只能声明变量来完成处理。
6.思考问题
尝试分析解释REFCURSOR类型游标的优点。
REFCURSOR类型游标使用灵活,可以多次打开不同的SELECT结果集来一一处理不同类型的数据。 如果使用通用游标,则只能为需要处理的结果集的所有SELECT语句预先声明一个游标。
类型是确定的并且不能更改,而动态游标可以打开任何形式的结果集并检索任何类型的记录数据。 MYSQL中只能使用静态游标,定义时的SELECT语句必须确定,不能更改。
(3)带参数的游标
MYSQL中的游标不能带参数。
5. 实验总结
游标逐条处理数据库记录,而不是一起处理结果集。 声明游标和游标结束处理的异常需要按顺序声明。 REF CURSOR 是动态游标。 打开游标时,可以指定一条SELECT语句来生成游标的结果集。 游标的结果可以使用RECORD类型保存。 MYSQL 不支持动态游标,并且没有 RECORD 类型。 游标不能使用参数,只能声明变量来完成处理。
6.思考问题
尝试分析解释REFCURSOR类型游标的优点。
REFCURSOR类型游标使用灵活,可以多次打开不同的SELECT结果集来一一处理不同类型的数据。 如果使用通用游标,则只能为需要处理的结果集的所有SELECT语句预先声明一个游标。
大家好,我们又见面了,我是你们的朋友全战军。
硬盘分区有三种类型:主磁盘分区、扩展磁盘分区和逻辑分区。
一块硬盘可以有1个主分区和1个扩展分区,也可以只有1个主分区而没有扩展分区。 可以有多个逻辑分区。
主分区是硬盘的引导分区。 它是独立的,也是硬盘的第一个分区。 如果正常划分的话就是C盘。
主分区划分完毕后,剩余部分可以划分为扩展分区。 一般将剩余部分划分为扩展分区,或者不完全划分。 剩下的部分就被浪费掉了。 但扩展分区不能直接使用。 它以逻辑分区的形式使用,因此扩展分区可以分为多个逻辑分区。 它们的关系是包含关系,所有逻辑分区都是扩展分区的一部分。
卷
硬盘上的存储区域。 驱动器使用文件系统(例如 FAT 或 NTFS)格式化卷并为其分配驱动器号。 单击“Windows
您可以通过单击“资源管理器”或“我的电脑”中的相应图标来查看驱动器的内容。 一个硬盘包含许多卷,一个卷可以跨越许多磁盘。
启动音量
包含窗户
操作系统及其支持文件的卷。启动卷可以是系统卷,但不一定是系统卷
动态音量
驻留在动态磁盘上的卷。 Windows 支持五种类型的动态卷:简单、跨区、条带、镜像和 RAID-5
roll.动态卷使用文件系统(例如 FAT 或 NTFS)进行格式化,并为其分配了驱动器号
_____1 条带化卷 (STRIPED
VOLUME)类似于跨区卷。 也是由两个或多个硬盘组成,但每个硬盘贡献的空间大小必须相同。 当文件保存到条带卷时,系统会将数据分散在每个硬盘的空间中。 如果使用专业的硬件设备和磁盘(如阵列卡、SCSI硬盘),文件访问将会得到改善。 效率并减少CPU负载。
____2 跨度卷 (SPANNED
VOLUME)可以由两个或多个硬盘上的存储空间组成,每个硬盘提供的硬盘空间不必相同。例如,如果第一个硬盘提供30MB的空间,第二个硬盘提供30MB的空间提供 70MB 空间,合并后的跨区卷将具有 100MB 空间。
____3基本卷(basicvolume)是指基本磁盘上的卷。 基本卷包括主分区、扩展分区内的逻辑驱动器和 Windows NT
使用 4.0 或更早版本创建的卷、条带、镜像或 RAID – 5 套。 动态磁盘上不能创建基本磁盘。 请注意,这仅在运行 Windows 2000 时有效
在服务器计算机上创建新的容错集,例如镜像卷和 RAID –
5卷。 在创建这些卷之前,必须将磁盘升级为动态磁盘。 但是,用户可以使用运行 Windows 2000 的计算机
Professional 计算机在运行 Windows 2000 Server 的远程计算机上创建镜像卷和 RAID-5 卷。
_____4 镜像卷是具有容错能力的动态卷。 它通过使用卷的两个副本或镜像复制存储在卷上的数据来提供数据冗余。 写入镜像卷的所有数据都会写入位于不同物理磁盘上的两个镜像。
如果其中一个物理磁盘发生故障,故障磁盘上的数据将不可用,但系统可以使用未受影响的磁盘继续运行。 当镜像卷中的一个镜像发生故障时,必须破坏该镜像卷,以便另一个镜像成为具有独立驱动器盘符的卷。 然后可以在具有相同或更大可用空间的另一个磁盘中创建新的镜像卷。 创建镜像卷时,最好使用相同大小、型号和制造商的磁盘。
由于双写操作会降低系统性能,因此许多镜像卷配置都使用双工模式。 在此模式下,镜像卷中的每个磁盘都有自己独立的磁盘控制器。双工镜像卷具有最佳的数据可靠性,因为整个输入/输出都被复制
(输入/输出)
子系统。 这意味着如果一个磁盘控制器发生故障,其他控制器(及其上的磁盘)将继续正常运行。 如果不使用双控制器,则出现故障的控制器将使镜像卷中的两个镜像都无法访问,直到更换控制器为止。
系统音量
用于在 x86 计算机上使用 BIOS 加载 Windows 的包
硬件特定文件的卷。启动卷可以是系统卷,但不一定是系统卷
关于动态磁盘
不知道大家是否遇到过这样的情况:安装某个软件时,规定必须安装在磁盘的某个分区上,但是这个分区的磁盘空间不够用。 我应该怎么办? 您肯定会想到一些可以更改磁盘分区大小的软件。 使用第三方软件来解决是一个非常好的方法,而笔者提供了另一种方法,那就是“动态磁盘”。
什么是“动态磁盘”? “动态磁盘”有什么作用? 磁盘的用途可以分为两类:一类是“基本磁盘”。 “基本盘”很常见,我们平时使用的磁盘类型基本上都是“基本盘”。 “基本盘”有26个英文字母的限制,也就是说该盘的盘符只能是26个英文字母之一。 由于 A 和 B 已被软盘驱动器占用,因此磁盘上唯一可用的驱动器号是 C~Z。
24、另外,一个“基本盘”上只能创建四个主分区(注意是主分区,不是扩展分区); 另一种磁盘类型是“动态磁盘”。 “动态磁盘”不限于26个英文字母,它以“卷”命名。 “动态磁盘”的最大优点是可以将磁盘容量扩展到非连续的磁盘空间。 正是这个特性可以帮助我们解决上面的问题。
如何知道您的磁盘属于什么类型的磁盘? 方法很简单,点击“开始→程序→管理工具→计算机管理”(Windows 2000
服务器系统),在计算机管理选项中找到磁盘管理,单击鼠标左键,从右侧的参数显示中可以看到。
那么,“基本磁盘”和“动态磁盘”是什么关系呢? 它们可以互相转换吗? 如果您的磁盘是“基本磁盘”,您可以将其升级为“动态磁盘”,但请注意,您的磁盘中必须至少有1MB的未分配空间。 升级方法非常简单:右键单击“磁盘管理”界面右侧的磁盘盘符,在菜单中选择升级到“动态磁盘”。 在此过程中,计算机会重新启动,重新启动次数=磁盘分区数-1(如果磁盘分为4个分区,则需要重新启动3次)。 升级过程会自动完成,升级过程中磁盘上的数据不会丢失。
升级完成后,即可使用它来解决上述问题。 方法是:在磁盘管理中点击未分配的空间,选择创建新卷,然后按照提示一步一步操作(注意:创建过程中选择的替换文件夹必须为空,例如选择C ABC文件夹卷下的 ABC 文件夹必须为空)。 返回C卷,你会发现ABC文件夹已经变成了“动态磁盘”图标,就大功告成了。 磁盘空间不足的问题已经解决,赶紧安装程序吧!
注意:从“基本盘”升级到“动态盘”时,磁盘数据不会改变,但从“动态盘”返回“基本盘”时,磁盘中的所有数据都会丢失。 所以一定要谨慎使用这个功能。
使用动态磁盘,卷的数量没有限制,并且卷的大小可以随时更改。 但动态磁盘无法通过Win98/XP
家庭访问,Win2000/WinXP
不能在Pro双操作系统环境下使用,需要特别注意。 另外,一旦升级为动态盘,就无法恢复到原来的基本盘(除非重新分区),所以最好不要升级启动盘,以确保安全。
许多铁杆DIY爱好者拥有不止一个硬盘,而这些硬盘往往容量相对较小。 在下载或安装大型软件时,经常会遇到磁盘空间不足的情况。 利用Win2000/XP的“动态磁盘”功能,可以将两块硬盘合二为一,减少了很多不便。 但是,此方法不适用于可移动硬盘。
使用动态磁盘,卷的数量没有限制,并且卷的大小可以随时更改。 但动态磁盘无法通过Win98/XP
家庭访问,Win2000/WinXP
不能在Pro双操作系统环境下使用,需要特别注意。 另外,一旦升级为动态盘,就无法恢复到原来的基本盘(除非重新分区),所以最好不要升级启动盘,以确保安全。
下面我们以将两个硬盘和添加的第三个硬盘合并为一个驱动器为例。 为了防止因操作失败而损坏原始数据,建议在开始操作前备份所有数据:
1、点击“我的电脑-管理-计算机管理-存储-磁盘管理”。
2. 右键单击要升级为动态磁盘的硬盘编号,然后选择“升级为动态磁盘”。 合并多个硬盘时,右键单击前一个硬盘,选择“升级到动态磁盘”。 在“升级这些基本磁盘”中,选择要合并在一起的所有磁盘。 在本例中,我们取消启动磁盘(磁盘0)并选择磁盘1和磁盘2。
3、确认无误后,点击“升级”,两个磁盘将升级为“动态磁盘”,但合并尚未完成。 合并之前,必须将附加硬盘(磁盘 2)设为“未分配”,因此必须先删除该卷。 右键单击“磁盘 2”部分并选择“删除卷”。
4、右键单击磁盘1,选择“扩展卷-扩展卷向导-可用磁盘-磁盘2-添加”,再次运行“我的电脑-管理”。 如果磁盘1和磁盘2的卷名相同,则合并成功。
动态磁盘的 5 种卷类型:
1. 简单卷:构成单个物理磁盘空间的卷。 它可以由磁盘上的单个区域组成,也可以由同一磁盘上连接在一起的多个区域组成。 可以在同一磁盘内扩展简单卷。
2、跨区卷:简单卷也可以扩展到其他物理磁盘,因此由多个物理磁盘的空间组成的卷称为跨区卷。 简单卷和跨区卷都不属于 RAID 类别。
3、条带卷:以条带形式将数据存储在两个或多个物理磁盘上的卷。条带卷上的数据交替均匀地分配到这些磁盘上(以条带的形式)。 条纹卷全部
视窗2000
可用的性能最佳的卷,但它不提供容错功能。 如果条带卷上任何一个磁盘上的数据损坏或磁盘出现故障,则整个卷上的数据都将丢失。 条带卷可以视为硬件 RAID 中的 RAID0。
4. 镜像卷:在两个物理磁盘上复制数据的容错卷。 它通过使用始终位于另一个磁盘上的卷副本(镜像)复制卷中的信息来提供数据冗余。 如果其中一个物理磁盘发生故障,故障磁盘上的数据将不可用,但系统可以使用未受影响的磁盘继续运行。 镜像卷可以视为硬件 RAID 中的 RAID1。
5. RAID-5 卷:具有数据和奇偶校验的容错卷,有时分布在三个或更多物理磁盘上。 奇偶校验用于在阵列发生故障后重建数据。 如果物理磁盘的一部分发生故障,您可以使用剩余的数据和奇偶校验信息在磁盘的故障部分上重新创建数据。 类似于硬件RAID中的RAID5,在硬件IDE中
在RAID中,RAID5比较少见,通常只出现在SCSI RAID卡和高端IDE RAID卡中。 普通IDE
RAID卡仅提供RAID0、RAID1和RAID0+1。
微软操作系统(DOS、WINDOWS等)中磁盘文件存储管理的最小单位称为“簇”
一个文件通常存储在一个或多个簇中,但它必须至少单独占用一个“簇”。 换句话说,两个文件不能存储在同一个簇中。
CLUT的原意是“一组”或“一组”,即一组扇区(一条磁道可以分为若干个大小相等的弧,称为扇区)。 由于扇区的单位太小,将其捆绑在一起形成一个更大的单位更便于灵活管理。 簇的大小通常是可变的,由操作系统在所谓的“(高级)格式化”过程中指定,因此管理更加灵活。
通俗地说,文件就像一个家庭,数据就是人,也就是家庭成员; 集群是单位和套房; 扇区是组成这些单元套房的相同大小的房间。
一个家庭可以居住在一个或多个单元,但两个家庭的成员不能同时居住在一个单元。