牛客题解(1)

原创 2016年08月31日 10:47:22

1、 SQL语句性能分析的关键字是什么?
答案:explain。
解析:explain命令是在解决数据库性能上是第一推荐的使用命令,大部分的性能问题可以通过此命令来简单解决,explain的执行效果可以帮助选择更好的索引和优化查询语句。explain语法:explain select … from … [where …] 例如:explain select * from news;

2、数据库系统的特点:
数据结构化、数据共享性高、冗余度低,易扩展,数据独立性高,数据由DBMS统一管理和控制。

3、向表中增加列的sql语句:
增加列:alter table tableName add columnName varchar (30)
删除列:alter table tableName drop column columnName。

4、要删除表A中的数据,使用TRUNCATE TABLE A。运行的结果是:
答案:表A中的约束依然在。
解析:删除表的语句为:DROP TABLE table_name;
而DELETE和TRUNCATE TABLE都是删除表中的数据的语句,它们的不同之处在于:
a、TRUNCATE TABLE 比DELETE的速度快;
b、TRUNCATE TABLE 是删除表的所有行,而DELETE是删除表的一行或者多行(除非DELETE不带WHERE语句);
c、在删除时如果遇到任何一行违反约束(主要是外键约束),TRUNCATE TABLE仍然删除,只是表的结构及其列、约束、索引等保持不变,但DELETE是直接返回错误;
d、对于被外键约束的表,不能使用TRUNCATE TABLE,而应该使用不带WHERE语句的DELETE语句。
e、如果想保留标识计数值,要用DELETE,因为TRUNCATE TABLE会对新行标志符列搜用的计数值重置为该列的种子。

5、存储过程的好处:
a、执行速度更快,在数据库中保存的存储过程语句都是编译过的。
b、允许模块化程序设计,类似方法的复用
c、提高系统安全性,防止SQL注入
d、减少网络流通量,只需要传输存储过程的名称.
e、关于存储过程的几个简单例子:
例1:
create proc proc_stu
@sname varchar(20),
@pwd varchar(20)
as
select * from ren where sname=@sname and pwd=@pwd
go

查看结果:proc_stu ‘admin’,’admin’

例2:

下面的存储过程实现用户验证的功能,如果不成功,返回0,成功则返回1.

CREATE PROCEDURE VALIDATE @USERNAME CHAR(20),@PASSWORD CHAR(20),@LEGAL BIT OUTPUT
AS

IF EXISTS(SELECT * FROM REN WHERE SNAME = @USERNAME AND PWD = @PASSWORD)
SELECT @LEGAL = 1
ELSE
SELECT @LEGAL = 0

在程序中调用该存储过程,并根据@LEGAL参数的值判断用户是否合法。

例3:一个高效的数据分页的存储过程 可以轻松应付百万数据

CREATE PROCEDURE pageTest –用于翻页的测试
–需要把排序字段放在第一列

(
@FirstID nvarchar(20)=null, –当前页面里的第一条记录的排序字段的值
@LastID nvarchar(20)=null, –当前页面里的最后一条记录的排序字段的值
@isNext bit=null, –true 1 :下一页;false 0:上一页
@allCount int output, –返回总记录数
@pageSize int output, –返回一页的记录数
@CurPage int –页号(第几页)0:第一页;-1最后一页。
)

AS

if @CurPage=0–表示第一页
begin
–统计总记录数
select @allCount=count(ProductId) from Product_test

set @pageSize=10
–返回第一页的数据
select top 10
ProductId,
ProductName,
Introduction
from Product_test order by ProductId
end

else if @CurPage=-1–表示最后一页

select * from
(select top 10 ProductId,
ProductName,
Introduction

from Product_test order by ProductId desc ) as aa
order by ProductId
else

begin
if @isNext=1
–翻到下一页
select top 10 ProductId,
ProductName,
Introduction
from Product_test where ProductId > @LastID order by ProductId
else
–翻到上一页
select * from
(select top 10 ProductId,
ProductName,
Introduction
from Product_test where ProductId < @FirstID order by ProductId desc) as bb order by ProductId
end

6、从许多查询策略中找出最有效的查询执行计划,这种过程叫查询优化

7、数据库泛式
第一范式,原子性
第二范式,没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。
第三范式, 不能存在传递依赖

8、通过JDBC访问数据库包含下面哪几步?
1、加载JDBC驱动程序:
2、提供JDBC连接的URL
3、创建数据库的连接
4、创建一个Statement
5、执行SQL语句
6、处理结果
7、关闭JDBC对象

9、如何在一个大表中创建索引:
1. 传统方式: alter table tb add index 。。。+ 调整key buffer + tmp buffer (一天一宿还没跑完,放弃)
2. openoak kit - oak-online-alter-table 在线重定义表,这个是openoak 提供的一个开源mysql管理包,可以进行类似oracle的
在线重定义表操作,减少了锁争用,可io还是比较慢。
3. Memory Tables + partition + merge tables ,这个确实比较快,但是操作有些繁琐,简单的说就是 利用mysql 内存表排序操作较快的特点,分批把数据拷贝到内存,然后排序后在写入myisam,最后通过合并表的方式完成最后的排序。下面是google搜的原文【Creating Indexes/Sorting on very large tables in Mysql】。

4.当然了,对于大表来说,无论何种数据库,通过事先规划,做好分区表或者水平分割、垂直分割,对于应用和管理来讲都是具有一定的战略性的。

10、数据库中having函数的使用
SQL语言中设定集合函数的查询条件时使用HAVING从句而不是WHERE从句。通常情况下,HAVING从句被放置在SQL命令的结尾处

11、复合索引的使用
因复合索引为idx_A_B_C,所以查询条件只能是在a,ab,abc,ac才算 使用到索引idx_A_B_C,复合索引: Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。 例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效

版权声明:本文为博主原创文章,未经博主允许不得转载。

牛客网刷题汇总(一)附解析

纯虚函数是在基类声明的虚函数,它在基类中没有定义,但是要求派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后面添加“=0”,比如 virtual void f()=0;而C++中包...
  • sinat_35512245
  • sinat_35512245
  • 2017年02月09日 10:32
  • 1141

牛客网PAT乙级真题及java实现样例(真题1-14)

由于之前在PAT官网的练习场有时间限制,而且限制是针对c的基本上100ms到400ms,由于java需要虚拟机才能运行,因此有些题实在不是因为算法的原因才超时,牛客网的时间限制为1s,而且给我感觉后台...
  • Tredemere
  • Tredemere
  • 2015年12月27日 14:20
  • 2846

【牛客练习赛8】A D E

A 约数个数的和 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 给个n,求1到...
  • qq_37383726
  • qq_37383726
  • 2017年12月16日 19:35
  • 102

LeetCode和牛客网的对比

今天参加了校园风暴周的算法岗笔试题,虽然坚持到了最后一秒,但是没有完全答对一道题,说起来真的是惭愧。我在这里就说一说我的感受吧:     我之前基本不在牛客网上练习,一直都是练习LeetCode,突...
  • zr1076311296
  • zr1076311296
  • 2016年06月07日 20:44
  • 4834

【牛客网】算法编程题汇总

1.优雅数: 小易有一个圆心在坐标原点的圆,小易知道圆的半径的平方。小易认为在圆上的点而且横纵坐标都是整数的点是优雅的,小易现在想寻找一个算法计算出优雅的点的个数,请你来帮帮他。 例如:半径的平方如...
  • cChenLiang
  • cChenLiang
  • 2017年05月20日 11:25
  • 952

牛客网系列---Python

判断语句 if ...: print() elif ...: print()文件头部注释: #coding=utf-8 循环 for i in range(0,100): print("Item...
  • hehuanlin123
  • hehuanlin123
  • 2017年03月07日 20:38
  • 970

牛客网 求1到n 整数中1的个数

import java.util.Scanner; /** * 当计算右数第i位包含的X的个数时 * * 1.取第i位左边(高位)的数字,乘以10^i-1,得到基础值 a * 2.取第i位数...
  • u014142287
  • u014142287
  • 2016年09月02日 10:45
  • 404

牛客网算法学习笔记-智力题

一些智力问题
  • jq117
  • jq117
  • 2017年06月23日 16:58
  • 271

【转载】牛客网Java面试题

什么是 Java 虚拟机?为什么 Java 被称作是“平台无关的编程语言”? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程。Java 源文件被编译成能被 Java 虚拟 机执行的字...
  • mlstd2012
  • mlstd2012
  • 2016年08月23日 16:24
  • 1189

牛客网笔试题

昨天算法今天后端,又水了两把笔试…在这里把待解决的编程题整理一下,端午回来了填坑。三角形个数如图所示,N层对应的三角形个数为?(除了使用递推公式,感觉应该用递归的方法,没时间写了…) ans ...
  • qq_20581563
  • qq_20581563
  • 2016年06月08日 21:35
  • 2728
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:牛客题解(1)
举报原因:
原因补充:

(最多只允许输入30个字)