数据库方面

1.01 SQL查询数据表中重复数据

有一张MySQL的数据表名为 member,其中有2个字段

id unsigned int

name varchar(20)

假设数据库中的数据类似:

id    name

1.    AAA

2.    BBB

3.    CCC

4.    AAA

请写一段SQL取出数据表中name重复的数据。(注意只需要重复的)

答:SELECT * FROM member GROUP BY name having count(*)>1;

1.02有一张表:记录在这1个小时中,每条记录的变动情况。比如银行的卡号表。 怎么做到,这张表的数据是1个小时执行更新操作:

a.对ADD和DEL执行时时操作,对Modify通过一步调用,记录执行日志方式。

b.通过主表做扩展字段,对主表进行冗余,记录操作信息。

c.对主表进行扩展表,通过扩展表记录操作。

d.通过内存队列,在内存队列中记录信息,之后做1小时同步。

1.03数据库索引使用注意

数据库索引是为了加快查询速度,但是会降低更新插入删除的速度;如果每次都要获取所有表记录,那么增加索引意义就不大了;对于大量重复值的字段增加索引也是没意义的。针对记录比较少的表增加索引反而会浪费存储空间,而不会加快速度

1.04几千G的数据怎么查询一条记录比较快

通过增加索引、几千G数据放一张表不大现实,可以通过分区,不过分区又会增加查询难度;

1.05 数据库连接池原理、好处,tomcat中什么位置增加?

原理:是在内部对象池中维护一定数量的数据库连接,并对外暴露数据库连接获取和返回方法。

好处:对于一个复杂的数据库应用,频繁的建立、关闭连接,会极大的减低系统的性能,因为对于连接的使用成了系统性能的瓶颈。数据库连接池技术带来的优势:

1.资源重用

2.更快的系统响应速度

3.新的资源分配手段

4.统一的连接管理,避免数据库连接泄漏

Tomcat配置位置:在tomcat的context.xml中指定Resource的JNDI名称;

1.06 数据库冷备份和热备份的不同点以及各自的优点

热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库。

热备份的优点在于当备份时,数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点。冷备份的优点在于它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,数据库性能会比归档模式稍好。

1.07存储过程和函数的区别

1、存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。

存储过程优点:执行速度更快?首次运行时,进行优化和编译得到执行计划并将该计划存储在系统表中,以后直接运行。保证数据的安全性和完整性,降低网络通信量;减少数据库工作量;

执行存储过程用的类:

CallableStatement c=con. prepareCall ("{call getCustomerName(?,?)}");

2、事务特点:原子性、一致性、隔离性和持久性;

原子性,要么全都执行,要么全都不执行。

一致性,事务在完成时,必须使所有的数据都保持一致状态。

隔离性,由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。

持久性,事务完成之后,它对于系统的影响是永久性的。

1.08 数据库三大范式

范式一:每一字段只存储一个值

范式二:必须先符合范式一的条件,且每一行都能被唯一的识别。将范式一转换成范式二的方法是添加主键。

范式三:没有一个非关键属性依赖于另一个非关键属性。

1.09数据库锁机制

1.数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。

2.悲观封锁、乐观封锁和死锁

悲观封锁:

锁在用户修改之前就发挥作用: 
Select ..for update(nowait) 
Select * from tab1 for update 
用户发出这条命令之后,oracle将会对返回集中的数据建立行级封锁,以防止其他用户的修改。 
如果此时其他用户对上面返回结果集的数据进行dml或ddl操作都会返回一个错误信息或发生阻塞。

乐观封锁

乐观的认为数据在select出来到update进取并提交的这段时间数据不会被更改。这里面有一种潜在的危险就是由于被选出的结果集并没有被锁定,是存在一种可能被其他用户更改的可能。因此Oracle仍然建议是用悲观封锁,因为这样会更安全。

死锁

当两个用户希望持有对方的资源时就会发生死锁. 
即两个用户互相等待对方释放资源时,oracle认定为产生了死锁,在这种情况下,将以牺牲一个用户作为代价,另一个用户继续执行,牺牲的用户的事务将回滚。

1.10请描述Struts - Oracle中大数据量下的分页解决方案

千万级数据别用Hibernate了,ibatis吧。
 另外和分页没关系,用啥都一样,关键看你的查询SQL优化的好不好,表结构设计的好不好,是不是加了合适的索引,SQL查询时用到索引没,表该分区就分区。

1.11 java中的访问MY SQL/Server 的数据库连接代码

首先增加mysql-connector-java-5.0.5-bin.jar驱动包;

驱动程序名

String driver = "com.mysql.jdbc.Driver";

// URL指向要访问的数据库名scutcs

String url = "jdbc:mysql://127.0.0.1:3306/scutcs";

// MySQL配置时的用户名

String user = "root";

// Java连接MySQL配置时的密码

String password = "root";

try {

// 加载驱动程序

Class.forName(driver);

// 连续数据库

Connection conn = DriverManager.getConnection(url, user, password);

if(!conn.isClosed())

System.out.println("Succeeded connecting to the Database!");

// statement用来执行SQL语句

Statement statement = conn.createStatement();

// 要执行的SQL语句

String sql = "select * from student";

//处理结果集

1.12甚么时候会出现事务回滚,而甚么时候不会出现事务回滚?如何设计事务回滚。

可以在抛出异常的时候加入事务回滚方法;若数据库不支持回滚,可给记录行设定状态序号和历史状态序号,更新前先设定状态序号,如果成功了就把这个状态序号设成历史序号以表示提交,如果失败了就把原始数据给恢复过来以回滚。

1.13 SQL语言

1.Orcale 如何实现分页查询?

答:SELECT * FROM (SELECT A.*, ROWNUM RN FROM A WHERE ROWNUM <= 40)

WHERE RN >= 21

2.Orcale如何实现查询出来的空值变成0?

答:真的要是把空值用0表示的话,oracle中有nvl函数

select nvl(columnName,0) from table

意思就是把columnName字段为空的显示成0,当然也可以显示成任何字符或者数字

3.Orcale如何实现查询出来的两个字段放在一个位置上?

答:oracle数据库

select A || ‘:‘ || B from t

前提是A B字段都是字符型,假如不是,就用to_char()方法转换成字符型

4.建立数据表

create table t_student (id int(5) primary key,name varchar(20));

5.插入数据

insert into t_student values (1,’zhangsan’,’lanqiu’);

6.SQL查询重复数据

列出所有名字重复的人的记录,最直观的思路:要知道所有名字有重复人资料,首先必须知道哪个名字重复了:

select  name  from  t_student where dep=’1’  group  by  name  having  count(*)>1

7.清除重复数据:

过滤掉所有多余的重复记录,我们知道distinct、group by 可以过滤重复,于是就有最直观的:select  distinct  *  from  emp    或  select  name,age  from  emp  group  by  name,age

8.group by order by having where先后顺序

where.....group by....having.....order by

1.14触发器的具体含义和用法

触发器是编写的一段SQL语句,其关键字是TRIGGER(触发器的意思),它附着于指定的表,作用主要在于监控其附着的表在产生特定动作时应做的SQL处理,使用触发器的好处在于大大简化了相关表的维护,将数据一致性问题交由数据库后台处理。

一、数据库方面问题

1、对内外连接的理解?

(1)、内连接:select * from a inner join b on a.id = b.id;

只显示a.id与b.id相同的行,左边显示a表的字段,右边显示b表的字段;

(2)、左外连接:select * from a left join b on a.id = b.id;

左边显示a表的字段并显示所有数据,右边显示b表的字段,只显示a.id与b.id相同的行,其他用null补充;

(3)、右外连接:select * from a right join b on a.id=b.id;

右边显示b表的字段并显示所有数据,左边显示a表的字段,只显示a.id与b.id相同的行,其他用null补充;

(4)、完全外连接:select * from a full join b on a.id=b.id;

左边显示a表字段,右边显示b表的字段;其中a.id与b.id相同的行全显示,a.id与b.id不同的行,在a表中有数据的行在b中用null填充,在b表中有数据的行在a表中用null填充;

(5)、交叉连接:select * from a cross join b;

返回的行数是左边与右边行数的乘积;

2、在jsp下面实现orcale数据库表的分页操作?

答:数据库表总行数:由查询数据库获得;

每页显示行数:由jsp页面设置;

当前页数:请求参数;

当前页数与每页行数计算出当前页第一行行数,定义结果集至此行,然后再取出每页行数的行,返回给jsp页面即可;

3、数据库的优化:

答:a、合理的索引;b、如果表的数据太大,根据业务优化表的结构,减少表的数据量,即每个月建一张表;根据分页进行显示;c、减少对数据库的访问次数,建立二级缓存;d、通过批处理的方式(针对insert/update等);

4、E-R

即实体-联系图

E-R图的基本要素是实体型(用矩形表示)、属性(用椭圆形表示)和联系(用菱形表示);

5、什么是事务?

答:就是把多件事情当做一件事情来处理。也就是大家同在一条船上,要活一起活,要over一起over;

在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序

Begin Tran  --激活事务     Rollback Tran --回滚事务      Commit Tran  --提交事务

6事务具有的4个属性

(1)、原子性:事务是不可分割的单元,事务包括的操作要么多做,要么都不做;

(2)、一致性:事务必须使数据库从一个一致性状态变至另外一个一致性状态;

(3)、隔离性:即一个事务的执行不能受其他事务的影响;

(4)、持久性:指一个事务一旦提交,它对数据库的改变是永久的;

7SQL中的联合有什么用

答:针对多个关联的表进行一次SQL查询;

8存储过程的具体实现

存储过程(stored procedure)是一组为了完成特定功能的sql 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

9、存储过程的优点:
(1)存储过程在被创建以后可以在程序中被多次调用,而不必重新编写该存储过程的sql 语句;(存储过程允许标准组件式编程)
(2)存储过程要比批处理的执行速度快很多。因为存储过程是预编译的;
(3)网络中传送的只是调用的存储语句,而不是多条sql 语句,从而减少了网络流量;
(4)系统管理员通过数据访问权限的限制,避免非授权用户对数据的访问,保证了数据的安全。
10、触发器的具体含义和用法。
答:触发器是编写的一段SQL语句,其关键字是TRIGGER(触发器的意思),它附着于指定的表,作用主要在于监控其附着的表在产生特定动作时应做的SQL处理,使用触发器的好处在于大大简化了相关表的维护,将数据一致性问题交由数据库后台处理。

11、在MS SQL_Server 数据库中通过什么约束保证数据库的实体完整性?

答:可以通过建立唯一的索引、PRIMARY KEY约束、UNIQUE约束或IDENTITY约束来实现实体完整性;

10、几种常用的数据结构及内部实现原理。

11、内存有哪几种存储组织结构.请分别加以说明?

11、在多表连接查询中,如果有一个表没有数据,页面上怎么显示。

二、SQL方面问题:

1、从表table(客户名、发生日期,发生金额)找出某客户最后发生的业务日期?

select top 1 日期 from table order by日期 desc;(指定递减顺序)

2怎样将数据库表中重复的列的数据找出来并删除

方法一:使用delete语句,把name相同的类中id最大(或者最小)的数据删掉,循环执行,直到受影响的行数是0;

delete from table where id in (select max(id) from table group by name having count(*)>1);

方法二:还是delete语句,把除了name相同的类中最大的id(或者最小)的数据删掉,执行一次即可;

delete from table where id not in ( select max(id) from table group by name);

方法三(查询出来放置在新的表中):select distinct name into table1 from table;

时间: 2024-08-29 02:55:49

数据库方面的相关文章

数据库介绍与分类

目录 数据库介绍与分类... 1 1.1 数据库介绍... 2 1.1.1什么是数据库... 2 1.2数据库的种类... 2 1.2.1关系型数据库介绍... 2 1.2.2非关系型数据库介绍... 3 1.3 常用关系型数据库产品介绍... 4 1.3.1 Oracle数据库... 4 1.3.2 MySQL数据库... 5 1.3.3 MariaDB数据库... 5 1.3.4 SqlServer数据库... 6 1.3.5 Access数据库... 6 1.3.6 其他不常用数据库...

win7 64位系统 PB连接oracle数据库出现“oracle library oci.dll could not be loaded”问题的解决方法

今天与大家分享一个自己的学习笔记,希望能给遇到同样问题的人带来帮助. 不知道大家在win7 64位系统下用 PB连接oracle数据库时,是否遇到过“oracle library oci.dll could not be loaded”问题. 今天,在win7 64位系统下用 PB连接oracle数据库时,一直出现上述错误,在百度上找了很久,都没有找到一个完整的解决方案,咨询了很多人,(他们都说是我的PB和oracle没装好,但我装的时候没出现任何问题,一切都很顺利,而且PB和oracle都能正

C#与数据库访问技术总结(八)之ExecuteNonQuery方法

ExecuteNonQuery方法 ExecuteNonQuery方法主要用来更新数据. 通常使用它来执行Update.Insert和Delete语句. 该方法返回值意义如下: 对于Update.Insert和Delete语句,返回值为该命令所影响的行数. 对于所有其他类型的语句,返回值为-1. Command对象通过ExecuteNonQuery方法更新数据库的过程非常简单,需要进行的步骤如下: (1)创建数据库连接. (2)创建Command对象,并指定一个SQL Insert.Update

Oracle 10g通过创建物化视图实现不同数据库间表级别的数据同步

摘自:http://blog.csdn.net/javaee_sunny/article/details/53439980 目录(?)[-] Oracle 10g 物化视图语法如下 实例演示 主要步骤 在A节点创建原表和物化视图日志 在B节点创建连接A节点的远程链接 在B节点处创建目标表和与目标表名称相同的物化视图 在B节点处刷新物化视图 升级采用存储过程定时任务JOB方式定时刷新物化视图 进一步优化 文章更新记录 参考文章 Oracle 10g 物化视图语法如下: create materia

Linux环境下MySQL数据库用SQL语句插入中文显示 “问号或者乱码 ” 问题解决!

问题: 在普通用户权限下执行 mysql -u root -p进入mysql数据库,中间步骤省略,插入数据:insert into 库名(属性)values('汉字'); 会出现如下提示:  Query OK, 1 row affected, 1 warning (0.00 sec)    表明出现错误,没有插入成功,然后执行select * from 表名   就会出现如下的问题:显示的表中出现乱码或者问号. 如图: 解决方案: 首先重新打开一个终端窗口(方便操作),进入root用户模式 执行

WEB页面,WEB环境版本,数据库,整站备份脚本

#!/bin/bash # #WEB页面,WEB环境版本,数据库,整站备份脚本 #当发生某个原因导致整个服务器无法恢复时,利用上面备份的相关数据即可重做一台一样的服务器 date_a=`date +%Y%m%d-%H%M%S` mkdir -p /web_bak/${date_a}/conf &> /dev/null mkdir -p /web_bak/${date_a}/web &> /dev/null mkdir -p /web_bak/${date_a}/mysql &a

MySQL数据库基础知识

day02 MySQL数据库基础知识 一.基础知识概述: 基础决定你这门课程的学习成败!只有学习好这些基础知识以后,你才能真正的运用自如.才能够对数据库有更深入的了解,道路才会越走越远. 二.基础知识: 1.数据库(database):数据库就好比是一个物理的文档柜,一个容器,把我们整理好的数据表等等归纳起来. 创建数据库命令:        create database 数据库名; 2.查看数据库         show databases; 3.打开指定的数据库         use 

PL/SQL developer 连接oracle数据库报错“initialization error could not load oci.dll”

声明:PL/SQL 版本:PL/SQL Developer 9.0.6 (http://files.allroundautomations.com/plsqldev906.exe) 报错提示如图: 原因:PL/SQL只对32位OS进行支持,解决方法是额外加载一个oci.dll文件 解决办法:1.下载OCI.DLL相关库文件.地址: (需注册Oracle账号) http://www.oracle.com/technetwork/topics/winsoft-085727.html ----->  

Linux环境下启动MySQL数据库出现找不到mysqld.sock的解决办法!

问题: 在普通用户权限下运行:mysql -u root -p,回车之后如果会出现如下错误:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 此错误的意思就是没有找到mysqld.sock文件. 解决办法: 首先进入超级用户root权限  sudo -i 或者su - root 切换到默认目录 cd /var/lib/mysql  下查看

Java精品高级课,架构课,java8新特性,P2P金融项目,程序设计,功能设计,数据库设计,第三方支付,web安全,视频教程

36套精品Java架构师,高并发,高性能,高可用,分布式,集群,电商,缓存,性能调优,设计模式,项目实战,P2P金融项目,大型分布式电商实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  cloud.Dubbo.Elasticsearch,Redis.ActiveMQ.Nginx.Mycat.Spring.MongoDB.ZeroMQ.Git.Nosql.Jvm.Mecached.Netty.Nio.Mina.java8新特性,P2P金融项目,程序设计,