《2022年数据库实验问题汇总 3.pdf》由会员分享,可在线阅读,更多相关《2022年数据库实验问题汇总 3.pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据库实验问题汇总(XZ 20080408)1.PRIMARY KEY和 FOREIGN KEY的用法不理解,格式不明确。尤其是后者,有同学不知道FOREIGN KEY()括号里的字段名是谁的?REFERENCES TABLE_NAME()括号里的字段名是从哪里来的?(问题很普遍)解答:(1)定义主键的格式:CONSTRAINT PK_TABLE_NAME PRIMARY KEY(COLUMN_NAME).其中 PK_TABLE_NAME为此约束的名字,可省去,省去时系统自动取名为“PK_”后面跟表的名字。后面小括号里的内容为要将其设为主键的列,可不只一个。若为多个,用“,”分开。主键的意义在
2、于,可以靠主键将各元组唯一区别开来。将某列定义为主键后,该列的值具有唯一性和非空性。(2)定义外键格式:CONSTRAINT FK_KEYNAME FOREIGN KEY(COLUMN_NAME1)REFERENCES TABLE_NAME(COLUMN_NAME2)。其中,前面部分可省去。FK_KEYNAME 为该约束的名字。COLUMN_NAME1是当前表中的某列名,表示其为参照列。TABLE_NAME 为被参照表的名字,COLUMN_NAME2为被参照列的名字,存在于被参照表中。需要注意的是,COLUMN_NAME1和 COLUMN_NAME2的名字可以不同,但数据类型及长度必须一致。2
3、.约束的定义语句不理解,特别是名字的意义。(较普遍)解答:约 束 是 为 了 保 证 数 据 库 的 完 整 性 而 存 在 的。一 般 的 定 义 格 式 为:CONSTRAINT CON_NAME,,后面跟具体的约束内容。PRIMARY KEY、FOREIGN KEY、UNIQUE、CHECK等都是约束。CON_NAME为此约束的索引(或叫名字),可以不加,但有些约束还是加上名字比较好,像 FOREIGN KEY约束,如果取了名字FK_1,那么在想去掉此约束的时候,就直接可以用 DROP CONSTRAINT FK_1。另外,约束分为列约束和表约束,列约束是指在某列定义时后面跟着把约束写上
4、,如下面的 PRIMARY KEY 约束:CREATE TABLE Courses(Cno CHAR(12)CONSTRAINT PK_Courses PRIMARY KEY,Cname CHAR(30)而表约束是指在表的定义中,单用一条语句说明某约束。如:CREATE TABLE Courses(Cno CHAR(12),Cname CHAR(30),CONSTRAINT PK_Courses PRIMARY KEY(Cno)3.如何使 Scredit列具有“大于等于0”的约束?不知道CHECK 约束,或者不会用。(较普遍)解答:名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共
5、4 页 -CHECK 约束通过限制用户输入的值来加强域完整性。也就是说为某列加了CHECK 约束后,再对该列插入数值时,都要检查是否满足该约束条件。作为一个约束,它满足题2 中讲的约束的一般使用规则。CHECK 后面可以跟所有WHERE 语句中可用的逻辑表达式。例如:使用 CHECK 约束来限定F2 列只能为0-100 分:CREATE TABLE Table2(F1 INT,F2 INT,CONSTRAINT CHK_F2 CHECK(F2=0 AND F2=100),)4.关于小数类型字段的定义,可否设定精确位数,尤其是小数点后的位数?(很普遍)解答:在 SQL Server 2000中有
6、两种小数类型:DECIMAL和 NUMERIC,和两种近似数值类型:FLOAT与 REAL。REAL类型可定义精度为7 位的浮点数,存储大小为4 个字节。FLOAT类型格式为:FLOAT(n),可定义 15 位的浮点数,n用于存储科学记数法FLOAT数尾数的位数。DECIMAL与 NUMERIC 用法基本相同。格式为:DECIMAL(p,s),其中 p 表示精度大小,s 表示小数位数。p 最大为 38。理论上讲,用FLOAT和 DECIMAL都可以确定小数点后的位数。5.往表中插入数据,只能每次插入一条记录吗?(普遍)解答:是的,在 SQL Server 中,用 INSERT,VALUES,每
7、次只能插入一条记录。6.对定义了外键的表插入数据时,例如对Reports 表插入元组时,总是说插入错误。(较普遍)解答:在表中定义了外键之后,对表进行插入时,要注意数据与被引用表中的一致性。要插入的元组中,属于外键的数据必须是在被引用表中存在的。例如:在Reports 中定义 Sno 为外键,参照表Students中的 Sno。那么在Reports 表中要插入(S88,T02,C01,88)时,如果Students表中没有“S88”这条记录,那么插入失败。另外,如果这些规定都符合了,但插入语句VALUES()括号里的各字段值顺序跟表中的顺序不一致,也会出现同样的错误提示。7.在视图上建立的视图
8、,或者在同一个表上建立的两个视图,对他们插入同一条记录时,为什么总是出错?还有在对某一个视图进行插入后,却从视图里看不到刚插入的数据?(普遍)解答:(1)要注意一点,对视图的操作实际上都是在对表进行操作。例如:在表Reports 上建立了视图CS_View,选出成绩合格的学生选课记录。然后再在 CS_View上建立视图VV_View。此时对 CS_View插入一条记录(S03,T02,C04,66)后,实际上是在表Reports 中插入了这条记录。而再对 VV_View插入同一条记录时,它也是对表Reports 进行插入。于是由于表Reports 中已经存在了此条记录,便会提示插入错误。(2)
9、在对视图插入一条记录后,没有提示错误,但是在视图中却看不到插入的数据,是因为数据本质上是插入到表中,而视图的定义时又规定了某些选择条件,它只显示满足这名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 4 页 -些条件的记录。例如:视图 CS_View是选出成绩合格的选课记录,在对其插入某记录(,59)即成绩为59之后,记录已存在于表Reports 中,但视图CS_View 中只显示成绩合格的记录,所以看不到刚插入的数据。8.在 SQL语句的末尾都可以加分号“;”,但是为什么在创建视图的语句后面加了分号会报错?(不太普遍)解答:在 SQL Server 2000中,查询分析器中的语句
10、规则是,各条语句后面不用加任何标点符号。但鉴于人们的使用习惯,基本上允许在每条语句的后面加上“;”。个别语句可能会有影响。另外也可以用“GO”来隔开各条语句。它的意义在于告诉系统,在两个“GO”之间的语句作为一批去处理。用法如下:USE University_Mis GO CREATE TABLE Table_1(,)GO CREATE TABLE Table_2(,)GO INSERT Table_1 VALUES(,)GO INSERT Table_2 VALUES(,)GO SELECT*FROM Table_1 SELECT*FROM Table_2 GO 9.为何建了新的用户,却登录
11、不了?(多)解答:建立管理员账号(如 sa)时,若定义为以WINDOWS验证登录。而建立其它用户,如 USER1时,定义为WINDOWS+SQL验证登录。这样USER1无法登录。只有将sa 登录方式改为以WINDOWS+SQL验证登录之后,方可以USER1 登录。若不改 SA的登录方式,而是建立USER1 时,将其登录方式设为以WINDOWS验证登录,是不行的。因为若数据库拥有者设为以WINDOWS登录后,再建立新用户时,只能从WINDOWS的用户里面选择,也就是选择在WINDOWS系统域内的用户名。10.对选课记录表Reports的一个查询,对于及格的学生,将其成绩换算成积分,对于不及格者将
12、其成绩置0,好像是两个查询操作,怎么生成到一个表中?(多)解答:这种条件相悖(或者说不能放在同一个WHERE 后)的 SELECT操作,要将结果生成到一张表中,可以用UNION实现。11.INSERT 一条记录时,为什么格式都正确,但是插入不进去?提示说:“将截断字符串或二进制数据。语句已终止。”(个别)名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 4 页 -解答:因为在 INSERT时,如果要插入的记录某列值所占字节数大于了建表时定义的属性列长度,则插入总是不成功的。若要插入,便会产生字符串或数据截断。一般会终止。例如:表Students中 定 义Semail为CHAR(20)类 型。而 要 插 入 的 记 录 中Semail列 的 值 为“”,则将出现如上所述的错误(在SQL Server 2000中,每个字母占一个字节)。名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 4 页 -