笔试强训SQL day16

本文介绍了数据库中的事务操作,包括并发控制中的不同操作冲突类型,如丢失修改、不可重复读等,并强调了正确的SQL查询语句用于计算学生总成绩和统计选课数量。此外,还讨论了关系模型中外键的作用,以及如何在SQL中修改表结构和删除字段。同时,题目涉及到完全数的计算和扑克牌大小的比较,展示了在编程中解决数学问题和逻辑判断的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、选择题

1、在关系型是数据库中,有两个不同的事务同时操作数据库中同一表的同一行,不会引起冲突的是:
A 其中一个DELETE操作,一个是SELECT操作
B 其中两个都是UPDATE
C 其中一个是SELECT,一个是UPDATE
D 其中一个SELECT
E 其中一个是DELETE,另一个是UPDATE
F 两个都是DELETE
他的回答: D (错误)
正确答案: F
参考答案:
一个操作属于一个会话,另一个操作属于另一个会话冲突,两个会话同时执行会相互影响。
2、计算每位学生的多学科加总成绩的SQL是_____
A select sum(score) as total,stud_name from 成绩表
B select count(score) as total,stud_name from 成绩表
C select sum(score) as total,stud_name from 成绩表 group by stud_name
D select count(score) as total,stud_name from 成绩表 group by stud_name
他的回答: A (错误)
正确答案:C
3、以下哪个不是与Mysql服务器相互作用的通讯协议()
A TCP/IP
B UDP
C 共享内存
D Socket
他的回答: C (错误)
正确答案: B
参考答案:

TCP/IP协议,通常我们通过来连接MySQL,各种主要编程语言都是根据这个协议实现了连接模块
Unix Socket协议,这个通常我们登入MySQL服务器中使用这个协议,因为要使用这个协议连接MySQL需要一个物理文件,文件的存放位置在配置文件中有定义,值得一提的是,这是所有协议中最高效的一个。
Share Memory协议,这个协议一般人不知道,肯定也没用过,因为这个只有windows可以使用,使用这个协议需要在配置文件中在启动的时候使用-shared-memory参数,注意的是,使用此协议,一个host上只能有一个server,所以这个东西一般没啥用的,除非你怀疑其他协议不能正常工作,实际上微软的SQLSever也支持这个协议
Named Pipes协议,这个协议也是只有windows才可以用,同shared memory一样,使用此协议,一个host上依然只能有一个server,即使是使用不同的端口也不行,Named Pipes是为局域网而开发的协议。内存的一部分被某个进程用
来向另一个进程传递信息,因此一个进程的输出就是另一个进程的输入。第二个进程可以是本地的(与第一个进程位于同一台计算机上),也可以是远程的(位于联网的计算机上)。正因为如此,假如你的环境中没有或者禁用TCP/IP环境,而且是windows服务器,那么好歹你的数据库还能工作。使用这个协议需要在启动的时候添加-enab1e-named-pipe选项

4、公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员。则实体部门和职员间的联系是()
A 1:1联系
B m:1联系
C 1:m联系
D m:n联系
他的回答: C (正确)
正确答案: C
参考答案:
两个实体集间的联系实际上是实体集间的函数关系,主要有一对一联系( 1:1 )、一对多联系( 1:m )、多对一联系( m:1 )、多对多联系( m:n )。对于每一个实体部门,都有多名职员,则其对应的联系为一对多联系( 1:m ),答案选 C 。
5、设有两个事务T1,T2,其并发操作如下所示,下面评价正确的是()
步骤 T1 T2
1 读A=100
2 读A=100
3. A=A+10写回
4. A=A-10写回
A 该操作不能重复读
B 该操作不存在问题
C 该操作读"脏"数据
D 该操作丢失修改
他的回答: A (错误)
正确答案: D
6、mysql 数据库有选课表 learn(student_id int,course_id int),字段分别表示学号和课程编号, 现在想获取每个学生所选课程的个数信息,请问如下的 sql 语句正确的是()

A select student_id,sum(course_id)from learn
B select student_id,count(course_id)from learn group by student_id
C select student_id,count(course_id)from learn
D select student_id,sum(course_id)from learn group by student_id

他的回答: C (错误)
正确答案: B
7、如果事务T获得了数据项Q上的排它锁,则T对Q______。
A 只能读不能写
B 只能写不能读
C 既可读又可写
D 不能读不能写
他的回答: A (错误)
正确答案: C
参考答案:
共享(S)锁:多个事务可封锁一个共享页;任何事务都不能修改该页; 通常是该页被读取完毕,S锁立即被释放。
排它(X)锁:仅允许一个事务封锁此页;其他任何事务必须等到X锁被释放才能对该页进行访问;X锁一直到事务结束才能被释放。
更新(U)锁:用来预定要对此页施加X锁,它允许其他事务读,但不允许再施加U锁或X锁;当被读取的页将要被更新时,则升级为X锁;U锁一直到事务结束时才能被释放。
8、在关系模型中,实现“表示了两个关系之间的相关联系”的约束是通过()
A 候选键
B 主键
C 外键
D 超键
他的回答: B (错误)
正确答案: C
参考答案:
【答案解析】
超键(super kev):在关系中能唯一标识元组的属性集称为关系模式的超键
候选键(candidatekey):不含有多余属性的超键称为候选键
假设有如下两个表:

学生(学号,姓名,性别,身份证号,教师编号)教师(教师编号,姓名,工资)
超键:
由超键的定义可知,学生表中含有学号或者身份证号的任意组合都为此表的超键。如:(学号)、(学号,姓名)、(身份证号,性别)等。
候选键:
候选键属于超键,它是最小的超键,就是说如果再去掉候选键中的任何一个属性它就不再是超键了。学生表中的候选键为:(学号)、(身份证号)。
9、学生关系模式S(S#,Sname,Sex,Age),S的属性分别表示学生的学号、姓名、性别、年龄。要在表S中删除一个属性“年龄”,可选用的SQL语句是()
A ALTER TABLE S DROP Age
B ALTER TABLE S ‘Age’
C UPDATE S Age
D DELETE Age from S
他的回答: D (错误)
正确答案: A
参考答案:
修改表结构的关键字都是alter table 表名,再跟具体修改的语句,如:添加表字段
alter table table_name add 字段名称字段类型
删除表享段
alter table table_name drop字段名称

修改表字段
alter table table name change 旧字段名称 新字段名称字段类刑
10、下列选项中,不属于SQL约束的是:
A UNIQUE
B PRIMARY KEY
C FOREIGN KEY
D BETWEEN
他的回答: D (正确)
正确答案: D

二、判断题

【完全数计算】
完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。
它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
例如:28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。
输入n,请输出n以内(含n)完全数的个数。
数据范围:1<=n<=5x10^5
输入描述:
输入一个数字n
输出描述:
输出不超过n的完全数的个数
示例1:
输入
1000
输出
3
【解题思路】:
本题可以通过遍历每一个约数,求和,判断完全数。约数计算可以遍历sqrt(n)的范围。

牛客网ACM模式代码

import java.util.*;
public class Main {
   public static void main(String[] args){
       Scanner sc=new Scanner(System.in);
       while(sc.hasNext()){
           int n=sc.nextInt();
           int count=0;
           for(int i=2;i<=n;i++){
               int sum=0;
               for(int j=2;j*j<=i;j++){
                   if(i%j==0){
                       if(i/j==j){
                           sum+=j;
                       }else{
                           sum=sum+j+i/j;
                       }
                   }
               }
               if(sum+1==i){
                   count++;
               }
           }
           System.out.println(count);
       }
   }       
}

【扑克牌大小】
扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A、2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小
王,大写JOKER表示大王):
3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER
输入两手牌,两手牌之间用"-“连接,每手牌的每张牌以空格分隔,”-“两边没有空格,如:4 4 4 4-joker JOKER。
请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR。
基本规则:
(1)输入每手牌可能是个子、对子、顺子(连续5张)、三个、炸弹(四个)和对王中的一种,不存在其他情况,由输入保证两手牌都是合法的,顺子已经从小到大排列;
(2)除了炸弹和对王可以和所有牌比较之外,其他类型的牌只能跟相同类型的存在比较关系(如,对子跟对子比较,三个跟三个比较),不考虑拆牌情况(如:将对子拆分成个子);
(3)大小规则跟大家平时了解的常见规则相同,个子、对子、三个比较牌面大小;顺子比较最小牌大小;炸弹大于前面所有的牌,炸弹之间比较牌面大小;对王是最大的牌;
(4)输入的两手牌不会出现相等的情况。
数据范围:字符串长度:3<=s<=10
输入描述:
输入两手牌,两手牌之间用”-“连接,每手牌的每张牌以空格分隔,”-"两边没有空格,如 4 4 4 4-joker JOKER。

输出描述:
输出两手牌中较大的那手,不含连接符,扑克牌顺序不变,仍以空格隔开;如果不存在比较关系则输出ERROR。

示例1:
输入
4 4 4 4-joker JOKER
输出
joker JOKER

【解题思路】:
由输入保证两手牌都是合法的,顺子已经从小到大排列,按照题意牌面类型的确定和大小的比较直接可以转换为牌个数的比较。

牛客网ACM模式代码

import java.util.*;
public class Main {
   public static void main(String[] args){
       Scanner sc=new Scanner(System.in);
       String s=sc.nextLine();
       String[] pp=s.split("-");
       String[] p1=pp[0].split(" ");
       String[] p2=pp[1].split(" ");
       String p="34567891JQKA2";
       if(pp[0].equals("joker JOKER")||pp[1].equals("joker JOKER")){
           System.out.print("joker JOKER");
       }else if(p1.length==p2.length){
           if(p.indexOf(p1[0].substring(0,1))>p.indexOf(p2[0].substring(0,1))){
                System.out.print(pp[0]);
           }else{
                System.out.print(pp[1]);
           }
       }else if(p1.length==4){
            System.out.print(pp[0]);
       }else if(p2.length==4){
            System.out.print(pp[1]);
       }else {
            System.out.print("ERROR");
       }
   }       
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值