随笔分类 - 数据库基础
摘要:试图中是没有主键,也不能建立主键,可以在试图中建立索引,称之为索引视图,这样就物理化了试图中的数据创建视图中的第一个索引必须是唯一聚集索引,建立聚集索引之后你就可以建立其它非聚集索引了。 对于视图的理解: 视图是张虚拟的表。视图所对应的数据不进行实际的存储,数据库中只存储视图的定义,对视图的数据进行
阅读全文
摘要:在sqlserver中,有if exit()这样的语句,但是在oracle中却没有。如果直接使用drop table那么如果表不存在会报错,导致后续语句无法运行。因此可以通过一个存储过来来进行判断。主要是查询all_tables表的TABLE_NAME和OWNER,如果表存在,则执行execute immediate 'drop table TABLE_NAME';--判断表是否存在,如果存在则删除declare num number; begin select count(1) into num from all_tables where TABLE_NAME =...
阅读全文
摘要:0.参考文献:Index Full Scan && Index Range Scanoracle-indexuniquescan与indexrangescan等的区别index range scan,index fast full scan,index skip scan发生的条件Oracle ROWID 方式访问数据库oracle优化3(访问Table的方式)1.oracle访问表的方式oracle 访问表中记录有三种方式:ORACLE采用三种访问表中记录的方式:全表扫描、通过ROWID访问表、索引扫描2.全表扫描(Full Table Scans, FTS) 为实现全表扫描
阅读全文
摘要:参照博客某社区600万用户数据导入MYSQL、MSSQL、Oracle数据库方法中“3.3为数据表添加年龄列(2012-6-13)”提到的方法创建测试数据库。1.无索引状态1.1统计 select count(*)然后执行query1,统计年龄在20到30之间的人数。set autotrace onselect count(*) from csdnuser3 where age between 20 and 30;查询与统计结果如下View Code COUNT(*)---------- 1429651执行计划---------------------------------------...
阅读全文
摘要:数据来源根据博客:某社区600万用户数据导入MYSQL、MSSQL、Oracle数据库方法,我们得到了一个含有600多万条用户数据的oracle数据库。本文就是根据这个来验证数据库索引的特性。1.测试数据库CSDNUSERView Code CREATE TABLE "SCOTT"."CSDNUSER" ( "ID" int primary key not null, "USERNAME" VARCHAR2(256), "PASSWORD" VARCHAR2(256), "EMAIL&
阅读全文
摘要:参考文献http://blog.csdn.net/andyelvis/article/details/24468651、把主键定义为自动增长标识符类型MySql在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值。例如:create table customers(id int auto_increment primary key not null, name varchar(15));insert into customers(name) values("name1"),("name2");select id f
阅读全文
摘要:1.导入MySql数据库参考文献:http://zhuaxia.org/blog/post/1451.1.LOAD DATA INFILE语法因为获得的数据库文件是一个文本文件www.csdn.net.sql,因此需要用到mysql中的LOAD DATA INFILE命令,LOAD DATA INFILE的语法结构如下:View Code LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name' [REPLACE | IGNORE] INTO TABLE tbl_name [CHARACTER SET c.
阅读全文
摘要:参考文献http://hi.baidu.com/zdfgng/blog/item/dd5f88359a1cd0260b55a9ce.html题目假如要查询在a表中存在,但是在b表中不存在的记录,应该如何查询。为了便于说明,我们假设a表和b表都只有一个字段id,a表中的记录为{1,2,3,4,5},b表中的记录为{2,4},那么我们需要通过一个sql查询得到{1,3,5}这样的结果集。一般解法(效率低)看到这个题目,我们首先想到的可能就是not in这样的关键字,具体的查询语句如下:select ta.* from ta where ta.id not in(select tb.id from
阅读全文
摘要:参考文献:1.What is the Halloween Problem in databases?2.Halloween Problem3.Table scans to avoid the Halloween problem4.数据库索引实例正文 今天在看《数据库系统概念》这本书的查询优化章节,在其中的第13.6.3节中提到了万圣节问题(Halloween problem)。这是一个挺有意思的问题,不过现在已经不存在这样的问题了,大多数数据库管理系统都为我们解决了这样的问题。不过我们可以来看看这个万圣节问题到底是什么。 在1976年的万圣节那一天,IBM的两位程序要需要修改数据库库中内容..
阅读全文
摘要:参考文献1.一个效果非常不错的JAVA数据库连接池2.使用 JAVA 中的动态代理实现数据库连接池3.MySql与oracle的JDBC测试程序分析参考文献1是一个用java实现的数据库连接池,可以参考其代码实现,最好也看看java源代码是怎么实现数据库连接池的,两者进行比较。参考文献2中提到了动态代理,之前写过的一片博客:设计模式之代理模式之二(Proxy)中也讲到了动态代理,这里可以参考一下。下面首先给出参考1中的代码示例,具体见ConnectionPool.java,修改了部门代码与注释,并该处了一个测试demo,具体见ConnectionPoolDemo.java:Connection
阅读全文
摘要:0.参考文献:http://jacki6.iteye.com/blog/774866http://baike.baidu.com/view/402020.htm1.范式说明1.1第一范式(1NF)无重复的列 所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能同时有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。 在任何一个关系数据库中,第一范式(1NF)是对..
阅读全文
摘要:参考文献:[1].漫谈数据库索引1.创建表并插入数据在Sql Server2008中创建测试数据库Test,接着创建数据库表并插入数据,sql代码如下:USE TestIF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'emp_pay') DROP TABLE emp_payGOUSE TestIF EXISTS (SELECT name FROM sys.indexes WHERE name = 'employeeID_ind') DROP INDEX emp_pay.e
阅读全文
摘要:msdn关于order by的解释ORDER BY 子句按一列或多列(最多 8,060 个字节)对查询结果进行排序。有关 ORDER BY 子句最大大小的详细信息,请参阅 ORDER BY 子句 (Transact-SQL)。Microsoft SQL Server 2005 允许在 FROM 子句中指定对 SELECT 列表中未指定的表中的列进行排序。ORDER BY 子句中引用的列名必须明确地对应于 SELECT 列表中的列或 FROM 子句中的表中的列。如果列名已在 SELECT 列表中有了别名,则 ORDER BY 子句中只能使用别名。同样,如果表名已在 FROM 子句中有了别名,则
阅读全文
摘要:参考文献:http://space.itpub.net/11134237/viewspace-617951 数据表的连接有:1、内连接(自然连接): 只有两个表都相匹配的行才能在结果集中出现2、外连接: 包括(1)左外连接(左边的表不加限制),右表补null (2)右外连接(右边的表不加限制) ,左表补null (3)全外连接(左右两表都不加限制) ,左右两表空缺行补null3、自连接(连接发生在一张基表内)select a.studentno, a.studentname, b.classname from students a, classes b where a.classid(+) =
阅读全文
摘要:ORDER子句按一个或多个(最多16个)字段排序查询结果,可以是升序(ASC)也可以是降序(DESC),缺省是升序。ORDER子句通常放在SQL语句的最后。ORDER子句中定义了多个字段,则按照字段的先后顺序排序。例:SELECT ProductName,UnitPrice, UnitInStock FROM Products ORDER BY UnitInStock DESC , UnitPrice DESC, ProductName 如果order by的不是数字,而是varchar类型,需要进行cast转换,也可以多条件,如下所示order by cast(m.PROCESS_CAR..
阅读全文
摘要:http://kidiaoer.iteye.com/blog/1064902在oracle中,如果对varchar类型求max会发现9比10大,这是因为数据类型的原因,我们需要将varchar转换成number类型。方法是使用to_number()函数。例子:insert into icache_server_info(cache_server_id,cache_server_address) values((select max(to_number(cache_server_id))+1 from icache_server_info),#cache_server_address#) var
阅读全文
摘要:成功安装oracle,使用oracle sqldeveloper和navicat都能够在本地登录,但是在局域网内的其他机器上无法连接,出现各种错误。这个主要原因是我们在服务器上开了防火墙,将我们的远程访问给屏蔽了,简单的方法是关闭防火墙,或这个是将oracle添加到可信任列表中。
阅读全文
摘要:解决方法是:在提示的路径下创建一个叫做OCS4J.properties的文本文件,并把如下内容copy到创建的这个文件里:# discoveryAddress is a list of cache servers and ports discoveryAddress = %s_hostName%:%s_cachePort% diskPath = %s_diskPath% logFileName = %s_ocs4jAdmin%\logs\ocs4j.log -
阅读全文
摘要:1.参考文献:http://archive.cnblogs.com/a/1520906/http://blog.oracle.com.cn/html/07/t-86007.htmlhttp://feng10251225.blog.163.com/blog/static/6312279820089154288377/http://space.itpub.net/12330444/viewspace-620190http://topic.csdn.net/t/20040511/08/3052489.html2.步骤实现方法:1、 开始->设置->控制面板->管理工具->服务 停止所有Oracle服
阅读全文
摘要:参考文献:http://chengjunflying.iteye.com/blog/698505在oracle中,如果要对varchar类型的字段进行order by操作,那么首先必须得将他们转化成数字类型,比如int类型,这就需要用到cast关键字。例子SELECT procedure_no FROM (SELECT * FROM process_card_procedure where process_card_id=421 order by cast(procedure_no as int) desc) where rownum<=1 cast(procedure_no as i.
阅读全文