一.单选
1.在关系型是数据库中,有两个不同的事务同时操作数据库中同一表的同一行,不会引起冲突的是:(F)
A. 其中一个DELETE操作,一个是SELECT操作
B. 其中两个都是UPDATE
C. 其中一个是SELECT,一个是UPDATE
D. 其中一个SELECT
E. 其中一个是DELETE,另一个是UPDATE
F. 两个都是DELETE
解析:A - F选项:一个操作属于一个会话,另一个操作属于另一个会话。
冲突:两个会话的操作,同时执行时,是否会互相影响。
id = 1,score = 50
A. 会话1:delete from 表 where id = 1,此时score = 50的记录都没有了,会话2如何查询。
B. 会话1:update 表 set score = 60 where score = 50,此时score = 60
会话2:update 表 set score = 70 where score = 50,此时就会报错,因为会话1已经把 score改成了60。
会话1:update 表 set score = score + 10 where id = 1,50---》60
会话2:update 表 set score = score + 20 where id = 1,60---》80,此时会话2已经被会话1影响了,题目的意思是50---》70。
C.会话1:select ... from 表 where id = 1,此时50
会话2:update 表 set score = 60 where id = 1,select ... from 表 where id = 1,此时score = 60
D. 其中一个select ,另一个操作只有是查询时,不会有冲突,但如果时插入、修改、删除都存在冲突
E. update 表 set score = 60 where id = 1,delete from 表 where id = 1,
select ... from 表 where id = 1,此时期望看到score = 60的记录 ,但是已经没有了。
F. 会话1:delete from 表 where id = 1 成功删除了这条记录
会话2:delete from 表 where id = 1 虽然这条记录已经被删除,但是当要删除的记录在数据库中不存在时,是不会报错的,而且会执行成功,只是没有删除任何数据而已。
此时无论查询会话1还是会话2都查询不到这条记录。
总结:在关系型是数据库中,有两个不同的事务同时操作数据库中同一表的同一行,只有两个都是delete和两个都是select才不会引起冲突。
2..计算每位学生的多学科加总成绩的SQL是 (C)
A. select sum(score) as total,stud_name from [成绩表](nolock)
B. select count(score) as total,stud_name from [成绩表](nolock)
C. select sum(score) as total,stud_name from [成绩表](nolock) group by stud_name
D. select count(score) as total,stud_name from [成绩表](nolock) group by stud_name
解析:sum():进行求和统计 count():统计符合条件的记录。根据题目要求查询每位学生的多学科总成绩则需要按照学生姓名来分组 group by stud_name。
3.以下哪个不是与Mysql服务器相互作用的通讯协议(B)
A. TCP/IP
B. UDP 无连接,不可靠的协议,用在数据库就不是合适的技术。
C. 共享内存
D. Socket
MySQL实现了四种通信协议 :
TCP/IP协议,通常我们通过来连接MySQL,各种主要编程语言都是根据这个协议实现了连接模块。Unix Socket协议,这个通常我们登入MySQL服务器中使用这个协议,因为要使用这个协议连接MySQL需要一个物理文件,文件的存放位置在配置文件中有定义。值得一提的是,这是所有协议中最高效的一个。
Share Memory协议,这个协议一般人不知道,肯定也没用过,因为这个只有windows可以使用,使用这个协议需要在配置文件中在启动的时候使用–shared-memory参数,注意的是,使用此协议,一个host上只能有一个server,所以这个东西一般没啥用的,除非你怀疑其他协议不能正常工作,实际上微软的SQLSever也支持这个协议
Named Pipes协议,这个协议也是只有windows才可以用,同shared memory一样,使用此协议,一个host上依然只能有一个server,即使是使用不同的端口也不行,Named Pipes是为局域网而开发的协议。
4.关系的键与完整性 公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员。则实体部门和职员间的联系是(C)
A. 1:1联系
B. m:1联系
C.1:m联系
D. m:n联系
注意的是:如果是职员和实体部门--->1:1联系
5.设有两个事务T1,T2,其并发操作如下所示,下面评价正确的是(D)
A. 该操作不能重复读
B. 该操作不存在问题
C. 该操作读"脏"数据
D. 该操作丢失修改
解析:这两个事务的问题出在,原本两个事务的目的是T1先把A的值加10,A变为110。然后T2把A的值再减10,即A变回100。
但是根据题目中的执行顺序,A的值变为90,即T2的修改覆盖了T1的修改,这种现象叫做丢失修改。
6.mysql 数据库有选课表 learn(student_id int,course_id int),字段分别表示学号和课程编号, 现在想获取每个学生所选课程的个数信息,请问如下的 sql 语句正确的是(B)
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
解析:sum():进行求和统计 count():统计行数的记录。
7.如果事务T获得了数据项Q上的排它锁,则T对Q(C)
A. 只能读不能写
B. 只能写不能读
C. 既可读又可写
D. 不能读不能写
解析:排它锁意味着只有T能对Q进行任何操作,其他的事务不能执行任何操作。
排它锁又称为写锁((eXclusive lock,简记为X锁)),若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。它防止任何其它事务获取资源上的锁,直到在事务的末尾将资源上的原始锁释放为止。
8.在关系模型中,实现“表示了两个关系之间的相关联系”的约束是通过(C)
A. 候选键
B. 主键
C. 外键
D. 超键
超键( super key):在关系中能唯一标识元组的属性集称为关系模式的超键。
候选键(candidate key):不含有多余属性的超键称为候选键。 候选键也属于超键,它是最小的超键,就是说如果再去掉候选键中的任何一个属性它就不再是超键了。
主键 (primary key):用户选作元组标识的一个候选键程序主键。
外键(foreign key)实现“表示了两个关系之间的相关联系”的约束。
9.关系的键与完整性 学生关系模式S(S#,Sname,Sex,Age),S的属性分别表示学生的学号、姓名、性别、年龄。要在表S中删除一个属性“年龄”,可选用的SQL语句是(A)
A. ALTER TABLE S DROP Age
B. ALTER TABLE S ‘Age’
C. UPDATE S Age
D. DELETE Age from S
修改表结构的关键字的关键字都是alter table 表名,再跟具体的语句。例如:
添加表字段 alter table table_name add 字段名称 字段类型
删除表字段 alter table table_name drop 字段名称
修改表字段 alter table table_name change 旧字段名称 新字段名称 字段类型
修改表字段的类型 alter table table_name modify 字段名称 字段类型
10.下列选项中,不属于SQL约束的是:(D)
A. UNIQUE 唯一约束
B. PRIMARY KEY 主键约束
C. FOREIGN KEY 外键约束
D.BETWEEN 条件查询的关键字
二.编程题
完全数计算_牛客题霸_牛客网
解题思路:本题可以通过遍历每一个约数,求和,判断完全数。约数计算可以遍历sqrt(n)的范围。
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);
}
}
}
扑克牌大小_牛客题霸_牛客网
题目解析:本题的题目意思是输入的只是这些类型中的一种,个子,对子,顺子(连续5张),三个,炸弹(四个)和对 王。其实就是最多5张牌(顺子),最少1一张牌之间的比较。不存在其他情况。
解题思路:由输入保证两手牌都是合法的,顺子已经从小到大排列,按照题意牌面类型的确定和大小的比较直接可以转换为牌个数的比较
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
String[] pp=str.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.println("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.println(pp[0]);
}else{
System.out.println(pp[1]);
}
}else if(p1.length==4){
System.out.println(pp[0]);
}else if(p2.length==4){
System.out.println(pp[1]);
}else{
System.out.println("ERROR");
}
}
}