Access数据库实验教程:从E-R图设计到SQL查询实践
简介这份名为《数据库及其应用》实验报告的doc文档面向正在学习数据库基础、尤其是Access操作的学生群体。报告围绕某学校教学管理系统案例从概念设计阶段的E-R模型学生、专业、学院、课程、成绩等实体入手完整记录了向关系模型转换的过程以及各表字段属性、主键设置、表间关系与参照完整性配置。同时实验详细说明了Access数据库窗口的基本操作、字段格式、输入掩码与查阅控件设置并覆盖了查询对象建立、SQL的SELECT/INSERT/UPDATE/DELETE语句应用、参数查询和动作查询以及文本/Excel数据导入导出等数据交换内容。内容既包含实验目的与要求也配有具体操作步骤和完整数据描述适合用于复习数据库设计流程或作为课程实验报告模板。资源包为单个doc文件体积仅1.45MB目前已有111人学习浏览对需要快速掌握Access数据库建库、查询与数据交换操作的初学者有较高参考价值。1. 数据库作业.doc拆解这份Access实验报告能教会你多少数据库实操这份《数据库作业.doc》文件名叫得像随手一交的课程作业实际内容是一份把Access从建库、建表、完整性设置、SQL查询到数据交换整条链路都走完的实验报告。它最值钱的地方不在那十几张截图里而在思考题问出的那些「为什么」——为什么成绩表要加一个自动编号主键、学号掩码为什么用0不用9、参照完整性勾不勾级联删除差别有多大。对正在写数据库课程设计的人来说它是可以直接照着做的完整样例对想快速补齐Access基础的人它也把增删改查、导入导出的每个参数都摆到了明处。我拆这份文档时最大的感受是能抄的SQL不少但真正值得花时间记的是那些踩过坑才会被追问到的细节。整体读下来它不只是一份交差的作业而是一套可以逆向还原出「数据库设计→创建→应用」全过程的实验教材。2. 从E-R图到关系模型五张表的设计顺序与主键取舍这部分是实验报告第一幕也是很多人做课程设计时最容易跳过的环节。拿到需求直接开Access建表建到一半才发现缺关联字段只能回头改表——这种体验几乎每个人都遇到过。先画E-R图、再定关系模型看着多花半小时实际省下的是后续反复改表的半天。2.1 实体识别是个体力活但外键不能混进实体属性里拿到「学生教学管理系统」这个需求先把名词圈出来学生、专业、学院、课程、成绩。这一步看起来简单但初学者很容易把「专业号」直接塞进学生表当普通字段。学生确实需要知道自己读哪个专业但「专业号」这个概念层面的归属是专业实体进了学生表就成了外键而不是学生自己的属性。判断一个字段该不该放在某张表里标准很朴素它描述的是不是这条记录「自己」的属性。学生表里有学号、姓名、性别、生日、民族、籍贯、简历、登记照这些都是学生自己的属性而专业号描述的是「他读的专业」不是「他这个人」所以只能以外键形式出现。同理课程表里的学院号引用的也是学院实体不是课程自身属性。按这个标准把实体和属性拆干净后面建表时才不会混乱。2.2 转换成关系模型五张表的最终结构E-R图转关系模型有三条常见规则实体变表属性变字段1:N关系把「一」方主键加到「N」方当外键M:N关系要拆成独立的关系表。前两条比较直白第三条是重点。学生和课程之间是M:N关系——一个学生选多门课一门课被多个学生选。如果不用中间表直接在学生表里塞课程号要么同一学号重复出现多行要么可选课程数量没法固定。所以必须拆出一张「成绩」表。拆完之后五张表的字段结构如下表名字段说明学生学号、姓名、性别、生日、民族、籍贯、专业号、简历、登记照专业号为外键引用专业表专业专业号、专业、专业类型、学院号学院号为外键引用学院表学院学院号、学院、院长主键为学院号课程课程号、课程名、学分、学院号学院号为外键成绩学号、课程号、成绩学号课程号联合标识一条选课记录我一般会让学生在正式建表前先在一张纸上把这张表画出来标好主键和外键再打开Access。这张纸就是数据库设计阶段的「图纸」后面建表、设关系、录数据都对照着它做基本不会跑偏。2.3 没有合适主键时成绩表为什么要加自动编号id这是实验报告思考题里最值得展开的一个点。按关系模型理论成绩表用学号课程号做联合主键完全合法两个字段合起来能唯一确定一条选课记录。但实验要求单独加一个「成绩id」自动编号字段并设为主键很多人不理解。原因有两条。第一主键的职责是稳定标识一行记录联合主键只要其中一个外键值变动整条记录的历史标识就断了比如学生转专业后学号变了成绩表里所有旧记录的主键逻辑全部失效。第二无业务含义的自增id在维护表间关系时更省事Access建立一对多关系时对联合主键的支持不如单字段主键友好。操作上就是在成绩表设计视图里加一行「成绩id」数据类型选「自动编号」选中后点工具栏钥匙按钮设为主键。自动编号字段你不需要也不允许手动输入Access自动生成1、2、3……这也是它适合做主键的原因永不重复、永不需改。2.4 建表和录数据的顺序决定了你会不会遇到外键拒绝把实验报告里的建库建表步骤串起来常见做法是启动Access用「文件→新建→空数据库」建库文件名设「学生教学管理系统」存到E:\教学管理\然后在表对象里用设计视图逐张建表每个字段定义名称和数据类型五张表全部建完后用「工具→关系」把所有外键关系拖出来关系设置好后再进数据表视图录入。这里有一个很容易被忽略的顺序问题不要每建完一张表就急着输数据先把五张表全部建完、关系设置好再按「学院→专业→学生→课程→成绩」的顺序录数据。因为表之间有外键约束录入顺序错了会被直接拒绝——专业号在专业表里不存在时学生记录根本存不进去。另外注意Access的表名不要带「表」字后缀实验后续SQL里用的都是「学生」「课程」这种名字你建表时叫「学生表」后面所有SQL都要跟着改名纯属给自己找麻烦。提示Access 2003的「关系」窗口里拖字段建关系双击连线可以打开「编辑关系」对话框参照完整性的三个选项都集中在里面勾选。3. 字段类型与完整性约束格式、掩码、查阅控件怎么配表结构搭起来之后真正让数据库变得「严谨」的是约束和字段属性。这一章拆实验报告里的重头戏主键、参照完整性、用户定义完整性以及一堆字段属性的实际配置方法。这些属性单个看不难难的是理解它们为什么那么配。3.1 数据类型怎么选直接决定后面会不会翻车Access的数据类型一共十来种这个实验里实际用到的是文本、备注、日期/时间、数字、货币、自动编号、OLE对象。选型上有两个经验值得记住。第一像学号、课程号、专业号这种内容为数字但绝不参与数学运算的字段一律用文本。如果把学号存成数字类型导入导出时前导零丢失、显示成科学计数法这类问题马上找上门第5章的坑里会详细展开。第二成绩字段要用数字类型但三个属性必须一起配字段大小选「小数」、格式选「固定」、小数位数填1。否则你录入87.5表里显示的可能是87但库里存的还是87.5一求和结果完全对不上。把五张表的字段类型整理成一张表建表时对照着用字段示例数据类型关键属性学号文本字段大小8输入掩码00000000生日日期/时间格式选长日期籍贯文本字段大小20可空成绩数字小数格式固定小数位数1学分数字小数默认值0登记照OLE对象通过插入对象方式录入简历备注可存长文本实验报告里建教师表时给了一段标准SQL这段在Access的SQL视图里可以直接执行CREATE TABLE 教师( 工号 TEXT(6) PRIMARY KEY, 姓名 TEXT(10), 性别 TEXT(1), 生日 DATE, 职称 TEXT(8), 基本工资 MONEY, 学院号 TEXT(1) REFERENCES 学院(学院号) );逻辑说明这条语句同时完成了建表、设主键、建立外键关联三件事。TEXT(6)里的6是字段大小MONEY对应Access的货币类型REFERENCES关键字把学院号指向学院表。注意Access对SQL语法比较挑剔实际执行时把多余空格清掉分号保留或去掉都行。参数说明TEXT(10)存姓名大多数时候够用但少数民族姓名较长建议扩到20基本工资用MONEY类型比数字类型省心它自带两位小数和货币格式不用自己设小数位数。3.2 输入掩码0、9、#、A四个占位符的区别实验报告里专门问了一个问题定义学号掩码时不用0而用9或#有什么区别这是理解掩码的关键。Access的输入掩码占位符里0表示该位置必须填数字一个都不能少9表示该位置可以填数字也可以留空#更宽松数字、空格、加减号都接受A表示必须填字母或汉字。所以学号用00000000含义就是「固定8位每位都是数字」一旦输不满8位或出现字母Access直接拒绝。如果换成99999999则允许输8位以下比如学号「110702」也能存进去——对固定长度学号来说这就是事故。实际操作时选中「学号」字段在字段属性的「输入掩码」框里填00000000再配合「格式」属性一起用。这里要记住掩码管输入、格式管显示两者不要混。给一张速查表建表时对照着选掩码字符含义适用场景0必须填数字不可省略固定8位学号9可选数字电话分机、选填编号#数字或空格可选宽松编号A必须填字母或汉字姓名、拼音缩写L必须填字母车牌、代码至于实验报告问的「姓名定义10位掩码写什么」答案是AAAAAAAAAA。姓名通常不固定长度真实项目一般不强制设掩码但作业要求这么写的话10个A能覆盖绝大多数情况。3.3 有效性规则与有效性文本课前预防比事后清理便宜用户定义的完整性在这个实验里有三个体现字段大小限制、有效性规则、格式控制。其中最容易被忽略的是「有效性文本」。给「性别」字段设置有效性规则常见做法是在字段属性「有效性规则」里写男 Or 女然后在「有效性文本」里写「性别只能输入男或女」。这两样必须成对出现规则负责拦截数据文本负责告诉用户为什么被拦。只写规则不写文本的话Access会弹一个生硬的「您输入的表达式包含无效数据」之类的提示新手根本看不懂错在哪。同样的思路可以扩展到成绩字段有效性规则写0 And 100有效性文本写「成绩必须在0到100之间」。这样比单纯设置字段大小更贴近业务成绩表里就不会出现「99分多打一个9变成999」这种低级错误。3.4 参照完整性三选项勾选前想清楚后果「编辑关系」对话框里勾上「实施参照完整性」之后「级联更新相关字段」「级联删除相关记录」才会变成可勾选状态。这三个选项的控制意义实验报告思考题里反复问实际理解起来并不复杂勾选情况对主表的操作影响对子表的操作影响只勾实施参照完整性主表主键被引用时不能改不能删外键值必须存在于主表加勾级联更新主表主键改了子表外键自动跟着改无需手动同步加勾级联删除删主表记录子表关联记录一起删除子表静默丢数据最后一个选项是很多课程设计翻车的起点在专业表上勾了级联删除然后删了一个专业结果该专业所有学生、所有选课成绩一起没了。所以我的习惯是练习阶段只勾「实施参照完整性」不勾级联真实项目里如果确实要级联删除务必在删除前先复制一份mdb文件做备份。4. SQL查询全解析从表达式到动作查询的完整命令实验二是整份报告里干货密度最高的部分。里面的SQL语句不是摆设几乎每条都能直接套到自己项目的查询场景里。下面按「先能进SQL视图再能读语句最后能自己写」的顺序拆解。4.1 SQL视图怎么进一个多数人靠鼠标点错的地方先解决最基础的入口问题在Access 2003里点数据库窗口左边的「查询」对象选择「在设计视图中创建查询」打开后先不要急着拖表进去直接点工具栏上的「视图」按钮——就是那个带白色小箭头的图标——在下拉菜单里选「SQL视图」。很多新手以为SQL视图是「查询→新建→SQL视图」实际上2003版本里它藏在设计视图的「视图」下拉菜单里。Access允许在SQL视图、设计视图、数据表视图之间来回切换这个特性非常实用。你可以先在SQL视图里写一句SELECT * FROM 学生;切到数据表视图看结果再切回设计视图看可视化设置对应的SQL结构逆向理解设计视图里每个格子对应SQL的哪个部分比死记菜单高效得多。4.2 表达式练习Access的运算符和函数先混个脸熟实验报告给了一组SQL表达式这些语句没有FROM子句直接在SQL视图里运行即可目的是练习Access的函数和运算符。挑三个有代表性的说SELECT -5.12 ^ 2 (17 MOD 3);SELECT Hello , World!, LEFT(清华大学出版社, 2) RIGHT(清华大学出版社, 3);SELECT 你毕业的年份是, VAL(LEFT([你的学号], 4)) 4;逻辑说明第一句练的是幂运算^和取余MOD注意Access里幂运算不是Python那种**写法而且负数的幂容易出精度问题别在后续查询里依赖它。第二句练的是字符串拼接和LEFT/RIGHT截取Access里文本拼接用最稳妥在两侧都是文本时可以但只要有一侧是数字就会尝试做数值加法行为容易跑偏。第三句把学号当字符串处理取前4位再转数值加4是典型的学号→入学年份推算方法。参数说明[你的学号]是Access的参数占位符运行时会弹出输入框让你填值。如果不想弹框也可以硬编码成1110010207这种具体值。4.3 五条查询覆盖课程设计里八成需求实验报告里那几段带JOIN和子查询的SELECT值得单独拿出来逐行说。第一条是三表连接查学院、专业、学生的完整数据SELECT * FROM ((学院 INNER JOIN 专业 ON 学院.学院号 专业.学院号) INNER JOIN 学生 ON 专业.专业号 学生.专业号);逻辑说明这里用两个INNER JOIN把三张表串起来。Access的多表连接语法要求括号成对出现这一点和MySQL、SQL Server不一样容易踩坑少一层括号直接语法报错。ON后面的等值条件决定了关联方式只要其中一张表的主键不是唯一值结果行数就可能翻倍。参数说明SELECT *在调试阶段可以用但交作业或做正式报表时建议改成显式列名只取需要的字段查询可读性和执行效率都好很多。第二条查「工商管理专业的所有女生」是连接过滤的典型组合SELECT 专业.专业, 学生.* FROM 专业 INNER JOIN 学生 ON 专业.专业号 学生.专业号 WHERE 专业.专业 工商管理 AND 学生.性别 女;注意WHERE里不要写关联条件。有些初学者喜欢把专业.专业号 学生.专业号从ON挪到WHERE里结果也能出但那是先做笛卡尔积再筛选三张表数据一大就会明显变慢。这是性能习惯问题从一开始就写对比较好。第三条查平均成绩80分以上的学生是分组查询的教科书写法SELECT 学生.学号, 姓名, AVG(成绩) AS 平均分 FROM 学生 INNER JOIN 成绩 ON 学生.学号 成绩.学号 GROUP BY 学生.学号, 姓名 HAVING AVG(成绩) 80;逻辑说明GROUP BY里的字段和SELECT里的非聚合字段必须一致否则Access报错或返回不稳定结果。HAVING是在分组后过滤WHERE是在分组前过滤——把AVG(成绩) 80写进WHERE是错的聚合函数不允许出现在WHERE子句里。参数说明AS 平均分是别名Access的别名不需要引号但中文别名最好保持一致别一会儿「平均分」一会儿「avgScore」后面引用会乱。第四条查没有学生数据的专业用的是NOT IN子查询SELECT 专业号, 专业 FROM 专业 WHERE 专业号 NOT IN (SELECT 专业号 FROM 学生);逻辑说明子查询返回有学生的专业号列表外层取不在这个列表里的专业。这是一类经典需求——「查没有关联记录的主表数据」。但这里有个隐藏问题如果子查询结果里出现NULLNOT IN会直接返回空集什么也查不出来。Access里稳妥的做法是改用LEFT JOINSELECT 专业.专业号, 专业.专业 FROM 专业 LEFT JOIN 学生 ON 专业.专业号 学生.专业号 WHERE 学生.专业号 IS NULL;这个写法通过左连接保留专业表的全部记录再用IS NULL筛出右边没匹配上的记录。数据有缺失时这个写法比NOT IN可靠得多。第五条查选课人数最多的课程是TOP N 分组排序的用法SELECT TOP 1 课程.课程号, 课程名 FROM 课程 INNER JOIN 成绩 ON 课程.课程号 成绩.课程号 GROUP BY 课程.课程号, 课程名 ORDER BY COUNT(*) DESC;逻辑说明ORDER BY COUNT(*) DESC 按选课人数倒序TOP 1取第一个。如果要同时取并列第一的多个课程Access不支持TOP 1 WITH TIES需要把COUNT结果再包一层查询。参数说明TOP后面跟的数字是取的记录条数TOP 5、TOP 10同理。注意Access的TOP是从结果集第一行开始取具体取到哪几行完全取决于ORDER BY排序。4.4 DML语句增删改各有各的脾气实验二里有一组数据操作命令对应常说的数据库增删改查里的「增删改」INSERT INTO 课程 (课程号, 课程名, 学分, 学院号) VALUES (06020101, 会计学原理, 3, 06);UPDATE 课程 SET 学分 学分 1 WHERE 学院号 04;DELETE FROM 课程 WHERE 学院号 09 AND 课程号 NOT IN (SELECT 课程号 FROM 成绩);逻辑说明INSERT指定字段列表和值列表顺序和VALUES顺序要一一对应建议显式写字段名而不是省略这样哪列填什么一目了然。UPDATE是批处理利器SET后面可以直接写加减表达式。DELETE带子查询是精准删除的基本操作NOT IN查的是没有被学生选的课。注意这行命令执行后没有后悔药Access 2003里DELETE不可撤销。参数说明文本值在Access里用双引号括起来不是单引号——这是Access和MySQL习惯差异最大的地方。写惯MySQL再回来写Access第一件事就是记着把单引号全改成双引号或者统一用Access的格式。4.5 交叉表查询和参数查询两个能直接拿去当报表的功能交叉表查询相当于Excel的透视表。实验里把学号、姓名放行课程名放列成绩放交叉位置生成出来的就是一张「学生×课程」的成绩矩阵。手工搭建的方法是新建查询选择「交叉表查询向导」行字段选2个列字段选1个交叉值选成绩的聚合方式默认用「第一项」或「合计」。行标题字段最多选3个列标题1个交叉值1个这是Access向导的限制不是能随便突破的。参数查询更简单在设计视图的「条件」行写带方括号的占位符比如在出生日期条件里写 [请输入日期]民族条件里写LIKE [请输入民族]运行时Access会依次弹输入框SELECT 学生.学号, 学生.姓名, 学生.民族, 学生.生日 FROM 学生 WHERE 生日 [请输入日期] AND 民族 [请输入民族];参数不一定要通过菜单设置类型直接写在SQL语句里也能用。但通过「查询→参数」菜单给参数指定数据类型后输入非法值时弹错信息更友好不会报一堆英文错误。4.6 动作查询和SQL语句的对应关系动作查询是Access特有的「写操作查询」它和SQL命令的对应关系是动作查询类型对应SQL本例用途生成表查询SELECT INTO把优秀学生结果存成新表追加查询INSERT INTO ... SELECT把80-85分段的学生补进名单更新查询UPDATE把无学生选修的课程学分减1删除查询DELETE删除名单里均分85以下记录设计视图里做生成表查询时右键查询窗口空白处→查询类型→生成表然后输入目标表名。生成的表是独立表对象不随源数据自动更新这是它和「查询对象」的本质区别——查询对象每次运行都是实时结果生成表是运行那一刻的快照。5. 数据交换常见问题排查分隔符、编码与主键五个坑实验三讲的是Access和外部文件之间的导入导出篇幅不大但实际做起来踩坑率非常高。这一章前半部分讲标准流程后半部分按「现象→原因→解决」格式列几条我见过的真实排错记录。5.1 导出到文本文件和Excel选项藏在向导里先做一条查询「学生成绩单」字段为学号、姓名、专业、课程号、课程名、成绩。导出文本文件的路径是选中查询→文件→导出→文件类型选「文本文件」。向导第一步选「带分隔符」还是「固定宽度」——要输出逗号分隔、不含引号、含字段名的文件选「带分隔符」分隔符选逗号勾选「第一行包含字段名称」文本限定符选「无」。导出Excel更简单导出时文件类型选「Microsoft Excel 5.0/97」保存后默认每张表一个工作表。如果希望在Excel里预设列宽、页眉这些格式导出后在Excel里再调Access不负责这些。5.2 导入文本和Excel字段类型和主键要手控导入文本文件时Access的导入向导会逐列预览。关键是在「数据类型」那一列手动指定特别是文本型数字字段。导入「学生成绩单」文本时学号、课程号必须指定为文本否则前导零全部丢失。导入Excel时向导最后一步会问「让我选择主键」「我自己选择主键」「不要主键」建议选「我自己选择主键」并指定学号。如果导入目标是新建空表Access默认不加主键这本身没问题但如果后续还要和其他表建关系最好在导入完成后立即到设计视图里补上主键免得后面返工。5.3 五个真实翻车记录坑一导出的文本文件用Excel打开中文乱码现象逗号分隔的txt文件双击用Excel打开后中文全是乱码。原因Access 2003导出文本文件默认按系统ANSI编码中文Windows下是GBK而新版Excel默认按UTF-8读取无BOM的文本文件两边编码对不上。解决别双击打开。在Excel里用「数据→自文本→选择文件」导入向导第一步把「文件原始格式」改成「936简体中文GBK」再按向导操作一遍即可正常显示。如果机器是统一环境也可以导出后用记事本另存为UTF-8再给Excel用。坑二导入Excel时学号前面的0不见了主键设置失败现象学号00110702导入后变成110702导致部分记录主键重复、导入中断。原因Excel里这一列被自动识别为数值格式底层数据已经是110702。这不是显示问题是数据本身丢了。解决在Excel里先把学号列设为「文本」格式重新输入完整学号保存后再导入导入向导里也把该列数据类型指定为「文本」。两步都做才稳。坑三导入时提示「字段名重复」或「主键无效」现象单列主键没问题但导入「学生成绩单」时原表有学号课程号两个字段要作为联合主键向导一直提示无效。原因Access导入向导不直接支持设置联合主键只能在导入完成后进设计视图手动设。解决导入时选「不要主键」完成导入然后立刻进设计视图按住Ctrl选中学号和课程号两行点工具栏主键按钮。这个操作在Access 2003里亲测可用。坑四导入Excel后日期列变成一串数字现象生日字段导入后显示为45217之类的数字。原因Access的日期/时间字段导出到Excel时被转为日期序列值重新导入时Excel又把它当成了普通数字。解决在Access里先做一条查询用FORMAT([生日],yyyy/mm/dd)生成文本型日期列导出这个查询结果再从文本文件导入字段类型指定为「日期/时间」。绕开Excel日期格式就能保住。坑五追加导入时反复报主键冲突现象把「学生成绩单」文本文件导入为表后数据更新版再次导入时总是提示主键已存在导入中断。原因第一次导入的数据还留在表里第二次导入的主键值重复Access默认不会覆盖只会报错中止。解决如果目标表要求全量替换导入前先执行DELETE FROM 学生成绩单;清空旧数据。如果只要增量需要在SQL里用NOT EXISTS过滤不能在导入向导里直接覆盖。另一个常见做法是每次导入成一个带时间戳的新表名比如学生成绩单_20240512查询时再拼接避免动原表。提示Access 2003导入导出前的备份就是把mdb文件复制一份放旁边成本极低。做任何批量写操作前复制一下比事后找后悔药靠谱得多。6. 进阶用法用SQL三连查快速验证Access库结构把这份实验报告从头到尾走完再往后的提升方向是把「验证库结构」变成一个固定动作。我自己的习惯是每次新建完数据库不急着点开数据表视图先到SQL视图里跑三条验证查询三分钟就能判断库建得对不对。6.1 三连查速查表验证目标SQL示例预期结果关系是否建对SELECT COUNT(*) FROM 成绩;数字与录入条数一致外键约束是否生效INSERT INTO 成绩 VALUES (不存在, 06010101, 90);被拒绝字段类型是否选对SELECT 学号, 成绩 FROM 成绩;学号左对齐成绩右对齐联合主键是否生效INSERT INTO 成绩 VALUES (1110010207, 06010101, 90); 再执行一次第二次被拒绝第一条验证关系比如跑一次SELECT COUNT(*) FROM ((学院 INNER JOIN 专业 ON 学院.学院号专业.学院号) INNER JOIN 学生 ON 专业.专业号学生.专业号);如果返回行数大于学生总数说明有重复匹配多半是某张表主键不唯一。第二条验证字段类型在数据表视图看学号列是否左对齐文本而不是右对齐数字右对齐说明类型设错了。第三条验证完整性试着执行一条外键不存在的INSERT语句看Access是否拒绝——能拒绝说明参照完整性生效直接让你插入就说明关系没建对。这三条跑完基本能确认库的骨架是稳的。这套方法不只适用于这份实验报告的场景换到SQL Server、MySQL也一样先用连接查询验关系再用插入语句验约束最后用对齐方式判断字段类型。Access里练出来的SQL底子换个数据库只是把引号和个别函数改一改的问题。从那以后我每次在Access里搭原型库都强制先走一遍「画ER图→建表→三连查验证→删库重建」的流程真正填业务数据之前就把结构问题全清掉。这份实验报告的价值就在这它提供的不是一份可以照抄的作业而是一条步骤齐全、连坑都标好了的路。希望帮到你。本文还有配套的精品资源点击获取