《数据库系统》实验---实验三答案
- 格式:docx
- 大小:16.33 KB
- 文档页数:4
《数据库原理与应用》实验指导书主编:李正茂合肥学院计算机科学与技术系2017年7月前言数据库原理与应用课程实验作为课程实践性环节之一,是教学过程中必不可少的重要内容。
通过实验,使学生加深理解、验证巩固课堂教学内容;增强对数据库管理系统一些知识的感性认识;培养学生理论与实践相结合以及用所学知识分析和解决实际问题的能力。
本书是《数据库原理与应用》课程的实验配套书,实验分为课内必修内容。
指导教师在每次实验前应讲清实验目的、基本原理、实验要求等,并指导学生做好实验预习,并在规定的时间内完成相关课程实验。
在实践教学中着重培养运用所学知识分析和解决实际问题的能力,注重动手能力的提高。
实验课程教学中应在老师指导下,以学生为主体,充分调动学生的积极性和能动性,重视学生动手能力的培养。
课内实验后,学生将实验结果等内容写出实验报告,应符合实验教学的要求,并得到指导教师认可。
实验报告由个人独立完成,每人一份。
报告应字迹整齐,程序代码、运行结果等符合要求。
指导教师对每份实验报告进行审阅、评分。
该实验课程内容是对理论教学内容的应用与验证。
实验成绩=实验报告成绩(50%) +自主学习实验项目1(20%)+自主学习实验项目2(30%)。
本书根据理论课的教学进度,共开设12个课内实验项目(其中2个综合性实验项目)和2个自主学习实验项目。
目录实验准备熟悉上机环境 (4)实验一建立数据库 (19)实验二建立数据表 (22)实验三修改表和数据完整性 (26)实验四数据操作及完整性约束 (29)实验五 SQL数据查询一 (32)实验六 SQL数据查询二 (35)实验七视图的应用 (38)实验八游标的应用 (40)实验九存储过程及应用 (43)实验十触发器及应用 (46)实验十一用户管理和权限管理 (48)实验十二数据库概念数据模型和逻辑数据模型设计 (52)自主实验项目1:实验考核 (54)自主实验项目2:按照要求设计并实现实验方案 (55)实验准备熟悉上机环境一、安装前准备:1.SQL Server 2008 的版本SQL Server 2008 主要有三个版本:精简版(32位),SQL速成版(32位),工作组版(32位和64位),网络版(32位和64位),企业版和开发人员版(32位和64位)。
数据库管理与维护(SQL Server 2008)鲍丽红天水师范学院目录目录实验一SQL Server 2008安装 (1)实验二数据库创建和管理 (2)实验三数据库数据表的创建和管理 (3)实验四数据库的数据查询 (5)实验五Transact-SQL的编程实现 (6)实验六销售管理数据库中视图的应用 (7)实验七数据库中索引的应用 (8)实验八存储过程的应用 (9)实验九触发器的应用 (10)实验十数据库安全性管理 (11)实验十数据库的日常维护 (12)实验十二自动化管理(选做) (13)实验一SQL Server 2008安装【实训目的】1、了解安装SQL Server 2008 的硬件和软件的要求2、掌握SQL Server 2008 的安装方法3、掌握对象资源管理器与查询编辑器的使用【实训内容】1、在本地计算机上练习安装SQL Server2008 R2版本。
2、练习启动、暂停和关闭SQL Server2008的某一服务器。
实验二数据库创建和管理【实训目的】1、掌握数据库创建的方法2、掌握数据库扩容和收缩的方法3、掌握查看数据库信息方法4、掌握数据库的分离和附加的方法【实训内容】1、创建了一个library数据库,该数据库的主数据文件逻辑名称为Library_data,物理文件名为Library.mdf,初始大小为10MB,最大尺寸为无限大,增长速度为10%;数据库的日志文件逻辑名称为Library_log,物理文件名为Library.ldf,初始大小为3MB,最大尺寸为5MB,增长速度为1MB。
2、对library数据库进行扩容,添加一个5 MB的数据文件和一个5MB的事务日志文件。
3、对数据库library进行修改,将事务日志文件的大小增加到15MB,将数据文件library1和library2分别增加到15MB和30MB。
同时增加两个文件组,分别包含一个数据文件,逻辑文件名library3和library4,物理文件名为library2.ndf和library4.ndf,初始大小都为15MB,最大尺寸为无限制。
《数据库原理与应⽤》实验报告完整版数据库原理与应⽤实验报告实验课程:数据库原理及应⽤专业:学号:学⽣姓名:年⽉⽇实验⼀创建和维护数据库⼀、实验⽬的1. 掌握在Windows 平台下安装与配置MySQL 5.7 的⽅法。
2. 掌握启动服务并登录MySQL 5.7 数据库的⽅法和步骤。
3. 了解⼿⼯配置MySQL 5.7 的⽅法。
4. 掌握MySQL 数据库的相关概念。
*5. 掌握使⽤Navicat ⼯具和SQL 语句创建数据库的⽅法。
*6. 掌握使⽤Navicat ⼯具和SQL 语句删除数据库的⽅法。
⼆、实验要求1. 学⽣提前准备好实验报告,预习并熟悉实验步骤;2. 遵守实验室纪律,在规定的时间内完成要求的内容。
三、实验内容及步骤1. 在Windows 平台下安装与配置MySQL 5.7 版。
2. 在服务对话框中,⼿动启动或者关闭MySQL 服务。
3. 使⽤Net 命令启动或关闭MySQL 服务。
*4. 分别⽤Navicat ⼯具和命令⾏⽅式登录MySQL。
5.在my.ini ⽂件中将数据库的存储位置改为D:\MYSQL\DATA。
6. 创建数据库。
*①使⽤Navicat 创建学⽣信息管理数据库gradem。
②使⽤SQL 语句创建数据库MyDB。
7. 查看数据库属性。
*①在Navicat 中查看创建后的gradem 数据库和MyDB 数据库的状态,查看数据库所在的⽂件夹。
②利⽤SHOW DATABASES 命令显⽰当前的所有数据库。
8. 删除数据库。
*①使⽤Navicat 图形⼯具删除gradem 数据库。
②使⽤SQL 语句删除MyDB 数据库。
③利⽤SHOW DATABASES 命令显⽰当前的所有数据库。
10. 配置Path 变量,确保MySQL 的相关路径包含在Path 变量中。
四、思考题MySQL的数据库⽂件有⼏种?扩展名分别是什么?格式⽂件.frm 描述表的结构(列、列类型、索引,等等)数据⽂件.ISD(ISAM) 或.MYD (MyISAM) 包含表的数据─即它的⾏索引⽂件ISD(ISAM) 或.MYI (MyISAM) 包含数据⽂件中任何索引的索引树。
《数据库原理与应用》课程学习指导书何小卫编2005年5月于浙江师范大学教学大纲 (2)第一章绪论 31. 知识点与重点 (3)2.重要问题 (6)第二章关系数据库 61.知识点与重点 (6)2.重要题型 (9)第三章SQL 91. 知识点与重点 (9)2.重要题型 (13)3.问题 (17)第四章关系系统与查询优化181.知识点与重点 (18)2.重要题型 (20)第五章关系数据理论211. 知识点与重点 (21)2.重要题型 (23)第六章数据库设计241.知识点与重点 (24)2.重要题型 (29)第七章数据库恢复301. 知识点与重点 (30)2.重要题型 (33)第八章并发控制331. 知识点与重点 (33)2.重要题型 (37)第九章数据库安全371. 知识点与重点 (37)2.重要题型 (39)第十章数据库完整性391. 知识点与重点 (39)2.重要题型 (41)实验一Sql Server 数据库、表的管理 42实验二基本表的定义、删除、修改,建立和删除索引 43 实验三查询、数据更新、视图 44实验四嵌入式SQL的使用 45实验五数据库设计 46《数据库原理与应用》教学大纲一、课程概述数据库原理与应用是一门专业技术基础课,是计算机领域中最重要的技术之一,是软件学科的一个独立分支,包括数据库系统理论与数据库设计与应用两大部分。
通过对本课程的学习,可以获得有关数据库系统的基本理论知识,提高计算机理论水平;另一方面,通过对数据库系统理论的分析以及对数据库设计理论的学习,并结合相关学科的理论与实践知识,可以培养解决信息管理与工程设计中的实际问题的能力。
二、教学目的和要求本课程是计算机专业高年级学生的一门专业课,本课程在介绍数据库的基本知识、基本理论原理、方法技术的基础上,通过实验使学生掌握数据库创建、维护、查询等操作,并能在嵌入式环境中实现对数据库的操作,并能运用数据库的基本知识和软件工程的基本思想进行数据库的设计与实现。
《数据库原理与应用》实验指导 2013 / 2014 学年第二学期姓名:______wcg ________学号:___090312114______班级:____计科121__ ____指导教师:_______txy_ ___计算机科学与工程学院2014实验一SQL Server使用初步一、实验目的1、熟悉SQL Server2000的组成及基本功能。
2、掌握SQL Server2000的登录及注册。
3、掌握SQL Server2000企业管理器的使用方法。
4、熟悉查询分析器的基本使用。
二、实验预习1、什么是数据库管理系统DBMS?你所知道的DBMS有哪些?数据库管理系统是位于用户和操作系统之间的一层数据库管理软件。
常见的DBMS有:Oracle,Microsoft SQL Server,Access,MySQL及PostgreSQL等。
2、SQL Server 2000(2005)的安装步骤?步骤一:准备计算机以安装SQL Server 2005:检查计算机硬件,软件的要求,系统配置检查器的要求和妨碍性问题以及安全注意事项。
步骤二:安装SQL Server 2005:使用SQL Server 2005 安装向导运行安装程序,或从命令提示符安装。
步骤三:配置SQL Server 2005 安装:安装完成后,可以使用图形化使用工具和命令提示实用工具配置SQL Server。
三、实验内容和要求1、注册服务器基本步骤:(1)打开企业管理器(2)右击SQL Server组→新建SQL Server注册(3)添加可用的服务器(实际数据库服务器的名称或IP地址)(4)选择身份验证模式(选“系统管理员分配给我的登录信息”)(5)输入正确的登录名和密码(6)选择SQL Server组(选“在现有的SQL Server组中添加SQL Server”)(7)完成注册若注册成功,则显示注册成功的信息。
2、连接SQL Server服务器(1)右键单击上面注册的数据库服务器,选择连接,建立与数据库服务器的连接。
数据库原理及应用实验教案第一章:数据库基础1.1 实验目的了解数据库的基本概念掌握数据库的基本操作1.2 实验环境安装有数据库管理系统(如MySQL、Oracle或SQL Server)的计算机数据库管理系统的客户端工具1.3 实验内容实验一:创建数据库和表学习使用数据库管理系统的命令行工具或图形界面工具创建数据库学习使用SQL语句创建表实验二:数据库的简单操作学习使用SQL语句进行数据的插入、查询、更新和删除操作第二章:数据库设计2.1 实验目的掌握数据库设计的基本步骤和方法学会使用实体-关系模型设计数据库2.2 实验环境安装有数据库管理系统(如MySQL、Oracle或SQL Server)的计算机数据库管理系统的客户端工具2.3 实验内容实验三:实体-关系模型设计学习实体-关系模型的基本概念和表示方法根据给定的需求设计实体-关系模型实验四:将实体-关系模型转换为数据库模式学习将实体-关系模型转换为数据库模式的方法将设计的实体-关系模型转换为数据库模式第三章:SQL语言3.1 实验目的掌握SQL语言的基本操作学会使用SQL语言进行数据库的创建、查询和更新操作3.2 实验环境安装有数据库管理系统(如MySQL、Oracle或SQL Server)的计算机数据库管理系统的客户端工具3.3 实验内容实验五:SQL语言的基本操作学习使用SQL语言创建数据库、表、视图和索引学习使用SQL语言进行数据的插入、查询、更新和删除操作第四章:数据库的安全与保护4.1 实验目的了解数据库的安全与保护的基本概念和方法学会使用数据库管理系统的权限管理和备份恢复功能4.2 实验环境安装有数据库管理系统(如MySQL、Oracle或SQL Server)的计算机数据库管理系统的客户端工具4.3 实验内容实验六:数据库的权限管理学习使用数据库管理系统的权限管理功能,创建用户和角色,分配权限实验七:数据库的备份与恢复学习使用数据库管理系统的备份与恢复功能,进行数据库的备份和恢复操作第五章:数据库应用系统设计与实现5.1 实验目的掌握数据库应用系统的设计与实现的基本步骤和方法学会使用数据库管理系统进行应用程序的开发5.2 实验环境安装有数据库管理系统(如MySQL、Oracle或SQL Server)的计算机数据库管理系统的客户端工具编程语言环境和开发工具(如Java、Python或C等)5.3 实验内容实验八:数据库应用系统的设计与实现学习使用数据库管理系统进行应用程序的连接、查询和更新操作实验九:实现简单的数据库应用功能使用编程语言环境和开发工具,实现用户登录、数据查询和数据增删改等功能实验十:测试与优化数据库应用系统对实现的数据库应用系统进行测试和优化,确保系统的稳定性和性能第六章:数据库性能优化6.1 实验目的学习数据库性能优化的基本策略和方法。
《数据库实验》实验报告《数据库实验》实验报告黄爱蓉编审湖北汽车⼯业学院电⼦信息科学系⼆〇〇七年⼀⽉实验⼀:建⽴数据库及基本表实验报告⼀、实验⽬的1、了解SQL Server数据库的逻辑结构和物理结构;2、了解SQL Server的基本数据类型;3、学会在企业管理器中创建数据库和表;4、使⽤SQL查询分析器⽤CREA TE、DROP、ALTER语句创建和删除数据库,创建、删除、更新基本表。
⼆、实验内容1、创建数据库和查看数据库属性。
2、创建表。
3、查看和修改表结构。
4、熟悉企业管理器和查询分析器⼯具的使⽤⽅法三、实验步骤1、在企业管理器中创建数据库和数据表。
(1) 使⽤企业管理器建⽴图书管理数据库,数据库名为BM,初始⼤⼩为10MB,最⼤为50MB,数据库⾃动增长,增长⽅式是按5%⽐例增长;⽇志⽂件初始为2MB,最⼤可增长到5MB,按1MB增长。
数据库的逻辑⽂件名和物理⽂件名均采⽤默认值。
详细步骤:(2) 在企业管理器中查看图书管理数据库的属性,并进⾏修改,使之符合要求。
(3) 通过企业管理器,在建好了图书管理数据库BM中建⽴图书(book)、读者(reader)和借阅(borrow)3个表,其结构为:图书(书号,类别,出版社,作者,书名,定价);读者(编号,姓名,单位,性别,电话);借阅(书号,读者编号,借阅⽇期)。
创建上述三个表的步骤:三个表各个字段的数据类型:2、在查询分析器中创建数据库和数据表(1) 创建数据库S-C 的sql语句:(2) 在数据库S-C下,创建基本表学⽣表student(sno,sname,ssex,sage,sdept)的sql语句:创建基本表课程表course(cno,cname, ccredit)的sql语句:创建基本表成绩表sc(sno,cno,grade)的sql语句:(3) 在窗⼝下分别键⼊DROP TABLE Student及DROP TABLE SC命令,运⾏后观察结果。
《数据库管理与开发》实验报告课程号:B0900990-0实验项目:数据库设计、创建,表及各种对象的创建、管理与应用(2)、全部选中之后然后点击“执行”,就会执行相应的语句,并在命令窗口显示“命令已经成功完成”。
如下图所示:(3)、然后刷新左边的数据库,就会出现我们所建立的OnlineShopping数据库。
(4)、然后找到E盘的OnlineShopping文件夹,点击进入之后就会看到包含我们所建立的数据文件和事务日志文件。
说明创建数据库成功。
2.在数据库中建表。
(1)、创建“客户表”。
(2)、创建“商品表”。
(3)、创建“生产厂商表”。
(4)、创建“商品类别表”。
(5)、创建“订单总表”。
(6)、创建“订单明细表”。
(7)、创建“供应表”。
注意这个表有点特殊的是:由两个属性共同的作为主键,要用CONSTRAIT 主键名PRIMARY KEY(属性A,属性B)(8)、创建“评论表”。
(9)、表全部创建完成之后,刷新数据库,可以看到这些表。
3、在数据库中创建索引。
说明:索引包含“唯一性索引”,“主键索引”,“聚集索引”。
因为生成的表的时候系统自动的为每一个表设置了“主键索引”如图所示,“聚集索引”是指表中的各记录的物理顺序与键值的逻辑顺序一致。
一张表中只能有一个“聚集索引”。
而系统中的这个主键索引也是聚集索引,所以不能再对表格创建聚集索引。
所以我下面创建的是唯一性索引,全部都是非聚集索引。
(1)、在“客户表”中创建了一个按“身份证号”列建立的唯一索引“Customer”。
说明:这里创建的是唯一索引,唯一索引的含义是对于表中的任何两行记录来说,索引键的值都各不相同。
并且要注意,如果表中一个字段或者多个字段的组合在多行记录中具有NULL值,则不能将这个字段或者字段组合作为唯一索引键。
因为对于每一个表的主键系统都自动的设置了相应的索引,在“客户表”中,身份证号是绝对不能相同的,所以可以设置为唯一索引键。
(2)、在“商品表”中创建了一个按“单价”列建立的非聚集索引“Goods”。
华北科技学院计算机系综合性实验实验报告课程名称《数据库原理及应用教程》实验学期2011 至2012 学年第 2 学期学生所在系部计算机学院年级专业班级学生姓名学号任课教师郭红实验成绩计算机系制《数据库原理及应用教程》课程综合性实验报告教师基信息与学生成绩查询视图:4.物理设计该数据库中每一个关系模式的主码分别为系统自动设置的索引,如学生关系模式中的学号,教师关系模式中的教师号,系别中的系号等,同时,通过对实际操作的思考,为了查询某系的老师的方便,我们还需要在Teacher表中建立一个“系号”Dno的索引;又因为查询操作很多都通过学生姓名查找的,所以还需要在Student表姓名列sname上建立一个索引等,这样大大简化查询操作。
5.数据库的实现(1)创建库、表在该教务成绩管理系统中包括了学生表、教师表、选课表、系别表、授课表、课程表六个表。
在此,我以学生表为例进行说明表的创建。
一个完整的表必须包括对实体完整性、参照完整性、用户定义完整性的三种完整性的定义。
在学生表中,首先考虑表的实体完整性要求,在该学生表中学号被设为主码,用PRIMARY KEY定义,且该表含有多个属性,所以学号就是表级约束条件,从而完成了学生表的实体完整性的定义。
其次,对于学生表的参照完整性,系号(Dno)是该学生表的外码,同时它还是班级系别Sdept表的主码,所以对其用FOREING KEY短语进行定义,并用REFERENCES短语指明该外码是参照那些表的主码,从而完成对表的参照完整性的定义。
最后,是表的用户定义完整性,在该学生表中,结合实际情况我们不难想到应该定义一个姓名Sname为非空的约束条件和性别Ssex只能为“男”或“女”二者选其一的约束条件,其中姓名的非空用NOT NULL定义即可,而性别用CHECK语句定义即可。
创建学生表的代码为:CREATE TABLE student(Sno CHAR(10)PRIMARY KEY,Sname CHAR(20)NOT NULL,Ssex CHAR(2)CHECK(Ssex IN('男','女')),Sage SMALLINT,Dno CHAR(10),FOREIGN KEY (Dno)REFERENCES Sdept(Dno));创建的学生表截图如下:(2)创建用户该教务管理系统的主要用户有学生用户,老师用户,教务管理员和系统管理员等四种,所以需要创建这四种类型的用户,并授予其相应的权限。
实验三复制表CREATE TABLE test3_01 AS(SELECT * FROM pub.student_31)增加五个列ALTER TABLE test3_01 ADD (总成绩int,平均成绩int,总学分int,排名int,院系编号varchar(2))(1)使用update语句,利用pub.student_course、pub.course,统计“总成绩”;UPDATE test3_01SET 总成绩=(SELECT SUM(成绩)FROM pub.student_coursewhere test3_01.学号=pub.student_course.学号GROUP BY 学号)(2)使用update语句,利用pub.student_course、pub.course,统计“平均成绩”;UPDATE test3_01SET 平均成绩=(SELECT avg(成绩)FROM pub.student_coursewhere test3_01.学号=pub.student_course.学号GROUP BY 学号)(3)使用update语句,利用pub.student_course、pub.course,统计“总学分”create table a as SELECT 学号,sum(学分) 总学分FROM pub.student_course,pub.coursewhere pub.course.课程号=pub.student_course.课程号and pub.student_course.成绩>=60GROUP BY 学号UPDATE test3_01SET 总学分=(select 总学分from awhere test3_01.学号=a.学号)drop table a(4)将总成绩的名次放入“排名”列中,总成绩相同的学生的排名也相同(即一个名次可以多个人),没有成绩的排名置空值。
(提醒:可是使用oracle的rownum伪列实现);create table a as select rownum 排名次,总成绩from (select distinct 总成绩from test3_01 group by 总成绩order by 总成绩desc nulls last)update test3_01set 排名=(select 排名次from a where a.总成绩=test3_01.总成绩)drop table a(5)利用pub.department,pub.department_31两个表,填写院系编号内容,没有对应的院系编号填写为00。
create table a as select * from pub.departmentunion select * from pub.department_31update test3_01set 院系编号=(select 院系编号from a where a.院系名称=test3_01.院系名称)update test3_01set 院系编号=‘00’where test3_01.院系编号is nulldrop table a2、(6)剔除姓名列中的所有空格update test3_02 set 姓名=replace(姓名,' ','')(7)剔除院系名称列中的所有空格update test3_02 set 院系名称=replace(院系名称,' ','')(8)对性别列进行规范(需要先确定哪些性别数据不规范,也就是那些和大多数不一样的数据)update test3_02 set 性别=substr(性别,1,1) where 性别like '_性'update test3_02 set 性别=replace(性别,' ','')(9)对班级列进行规范(需要先确定哪些班级不规范)。
update test3_02 set 班级=substr(班级,1,4)(10)年龄为空值的根据出生日期设置年龄列,年龄不为空值的数据不要改变莫名其妙成功提交。
3.在学生表pub.student中统计名字(姓名的第一位是姓氏,其余为名字,不考虑复姓)的使用的频率,将统计结果放入test3_11中,表结构如下。
create table a as select substr(姓名,2) 名字from pub.studentcreate table test3_11 as select 名字,count(*) 频率from a group by 名字drop table a4.在学生表pub.student中统计名字(姓名的第一位是姓氏,不作统计,名字指姓名的第二个之后的汉字)的每个字使用的频率,将统计结果放入test3_12中,表结构如下create table a as (select substr(姓名,2,1) 字from pub.studentunion all select substr(姓名,3,1) 字from pub.student)create table test3_12 as select 字,count(*)频率from a group by 字delete from test3_12 where 频率=556drop table a//简介选择表中的某一行记录:(理解:rownum是oracle系统顺序分配为从查询返回的行的编号) select * from (select rownum a,t.* from testtab t) where a=2;select * from (select rownum a,t.* from testtab t) where a=3;select * from (select rownum a,t.* from testtab t) where a=4;不能为:select * from (select rownum,t.* from testtab t) where rownum=2;或select * from testtab where rownum=2;返回多行记录:select * from testtab where rownum<=10;返回某段记录:(如取记录表中4-10行)select * from (select rownum no,testtab.* from testtab where rownum<=10) where no>=4;返回有条件且经过排序的某段记录:select rownum num1,tt.* from(select rownum num,t.* from(select EcodeInfo.* from EcodeInfo where a=1 order by ecode desc) t) ttwhere num>19 and rownum<20>以为oracle是先提取记录再排序的,而oracle的rownum是在提取记录就已经生成,它先于排序操作,所以必须使用子查询先排序。
不能为:select * from tsettab where rownum>10;返回最后一行记录:select * from (select rownum a,t.* from testtab t) where a=(select count(*) from testtab);返回最后N行记录:select * from (select rownum a,t.* from testtab t) where a=(select count(*)-N from testtab);----------------select * from adminrole where rownum<=4minusselect * from adminrole where rownum<2>select * from(select rownum row_id ,b.* from (select a.* from sorttable a order by sortid)b)where row_id between 5 and 9;oracle截取字符串的函数substr的用法2009年01月20日13:27oracle中,可以用substr函数截取字符串.语法:substr( string, start_position, [ length ] )取子字符串,从start_position开始,取length个,length为可选,如果length为空则返回start_position后的所有字符。
实例:substr('This is a test', 6, 2) would return 'is'substr('This is a test', 6) would return 'is a test'substr('TechOnTheNet', 1, 4) would return 'Tech'substr('TechOnTheNet', -3, 3) would return 'Net'substr('TechOnTheNet', -6, 3) would return 'The'substr('TechOnTheNet', -8, 2) would return 'On'select substr('TechOnTheNet', -3, 2) from dualstart_position为负数时,表示从字符串尾巴倒着数。