随笔-26  评论-12  文章-0  trackbacks-0
  2012年8月18日

什么是索引?

    提起索引,应该不会感到陌生,若说它就是目录,大概都知道了,数据库的索引与书的目录很相似,都叫index.书的内容相当于数据库表中的数据,书的目录通过页码指向书的内容,同样,索引也记录了表中的关键值,提供了指向表中行的指针.书的目录使读者很快的找到想看的内容,而不必翻看书的每一页,索引使得数据库应用程序能够不扫描全表而找到想要的数据.

 

索引是不是多多益善?

    索引可以创建在一列或多列的组合上,也可以在数据库表的多个列上建立不同的索引,但这些列应该是经常作为查询条件的列.需要指出的是,并不是表上的索引越多越好,在数据库设计过程中,还是需要为表选择一些合适的索引。宁缺勿烂,这是建立索引时的一个具体选择。在理论上,虽然一个表可以设置无限的索引,表中的索引越多,维护索引所需要的开销也就越大。每当数据表中记录有增加、删除、更新变化的时候,数据库系统都需要对所有索引进行更新。

 

索引的分类

    索引可以分为三类:聚集索引(clustered index),非聚集索引,唯一性索引(unique index).根据索引字段组成又有复合索引的说法,复合索引可以是唯一索引也可以不是唯一索引.一个表上最多创建一个聚集索引和249个非聚集索引.

 

创建索引的条件

(1)为经常出现在关键字orderby、group by、distinct后面的字段,建立索引。

(2)在union等集合操作的结果集字段上,建立索引。

(3)为经常用作查询选择的字段,建立索引。

(4)在经常用作表连接的属性上,建立索引。

(5)考虑使用索引覆盖。对数据很少被更新的表,如果用户经常只查询其中的几个字段,可以考虑在这几个字段上建立索引,从而将表的扫描改变为索引的扫描。

 

创建索引的限制

(1)限制索引数目。

 (2)唯一性太差的字段不适合单独创建索引;

 (3)更新频繁的字段不适合创建索引;

 (4)不会做为查询条件的字段不创建索引

posted @ 2012-08-18 23:09 地心引力 阅读(1459) | 评论 (0)编辑 收藏

      存储过程和触发器都是一组SQL语句集合,他们在数据库开发过程中,在对数据库的维护和管理等任务中,以及在维护数据库参照完整性等方面,具有不可替代的作用.而触发器是一种特殊的存储过程,存储过程独立于表,具有访问和操纵数据库数据的功能,使应用程序执行效率得到进一步提高.触发器也是T_SQL语句的集合,它与表密切结合,实现表中更为复杂的业务规则.

         存储过程是以一个名字存储在数据库中的,经过预编译的T_SQL语句集合,可以独立执行或通过应用程序的调用来执行.


        触发器是不由用户直接调用的,而是在对表或视图中数据进行update,insert或者delete操作时自动执行.一个表或视图可以有多个触发器,每个触发器可以包含复杂的SQL语句.数据库表之间的引用完整性约束,除了可以采用主键和外键的对应约束来实现之外,还可以使用触发器,从而实现更复杂的用户定义完整性约束.

    

posted @ 2012-08-18 23:09 地心引力 阅读(1160) | 评论 (0)编辑 收藏

字符函数

这个函数一般接收字符作为参数,并且可以返回字符或数字

其中最常用有以下两个函数


1.CONCAT函数

主要用于字符串的连接,具体语法如下

CONCAT(c1,c2)

接收两个参数,将第二个参数连接到第一个参数的末尾,假如第二个参数是NULL,

则函数返回第一个参数,假如第一个参数是NULL,则参数返回第二个参数,

假如都为NULL,则函数返回NULL


为商品价格添加元单位示例如下:



2.NVL函数

这个函数主要用于函数替换

NVL(e1,e2)

接收两个参数,假如第一个参数不为NULL时,函数返回第一个参数,

假如第一个参数为NULL时,函数返回第二个参数

具体的使用示例如下:

查询商品表的相关信息,对没有详细介绍的商品默认设置显示“暂无详细描述”


可使用暂无详细描述来代替NULL


字符常用函数还有很多,希望大家能在我的基础上评论补充

posted @ 2012-08-18 23:08 地心引力 阅读(1138) | 评论 (0)编辑 收藏

SQL语言是一种高级的非过程化的查询语言,用户使用它主要进行数据库的操作

可以把SQL语言看成是客户端与服务器端沟通的一个工具,用来存取,查询和更新,关系数据库系统


Insert语句

INSERT语句的语法结构如下:


table值的是要插入数据的表的表名,Column指的是要插入数据的列名,Value指的是要插入的具体数据值


例如往会员表中插入一个新的会员数据,可以这样添加:


前者的优点是可以指定哪些字段添加哪些数据,缺点是表名后面的小括号中的字段名需要和Value值相对照

后者的优点是书写简单,缺点是要把所有的字段都在Value中进行赋值

当需要插入数据包含有空值的时候,一般使用第一种方法,而第二种方法进行插入需要使用NULL关键字进行填充


假如插入的数据包含时间,而且时间是当前的时间,



假如插入的是时间,并且时间是某个具体的时间,我们可以将上述的语句进行修改如下:


以上操作的都是单行的数据,而下面的操作是多行的数据


插入多行数据示例如下:



UPDATE语句

UPDATE语句结构如下:



如初始化所有会员密码:



按条件更新:



做更新操作的时候,WHERE条件一般选择类似主键这样有唯一性约束的字段,除非特殊情况,

否则的话会引起意想不到的误操作,比如更新用户表时以name作为条件的话,就十分危险,

因为名字是可以重复的


Select语句

我们对数据库做得最多的操作是数据检索

select语句就显得极其重要

其中最简单的查询实例如下:


*指的是所有列


而查询所有VIP数据如下:



查询两个条件同时成立的示例如下:



查询两个条件成立其中一个,示例如下:



查询条件为空的示例如下:



当要查询会员中所有姓李的会员时,需要用到模糊查询:


% 能匹配0到多个字符

_ 能任意匹配单个字符


查询商品表中价格在300-400之间的商品数据;



而查询会员表中张三、李四、王五的信息方法如下:



使用别名查询:



其中查询中可能需要对查询的结果进行排序,其结构如下:



查询商品表,按上架时间进行排序:



如果想去掉查询结果中的重复数据,可以使用Distinction关键字,如下



Delete语句

语法结构如下


其中的table 和 condition在上面已经有提及

删除示例如下


在实际操作中我们应该使用假删除,就是再增加一个状态(一般为status)的字段

在删除错误之后,我们可以用 ROLLBACK来回滚事务

posted @ 2012-08-18 23:08 地心引力 阅读(1155) | 评论 (0)编辑 收藏
     摘要: 管理数据完整性一 学习目标  1.实现数据完整性约束  2.管理完整性约束  3.从数据字典中获取约束信息二 保证数据完整性的方法  1.应用程序代码控制  2.触发器控制  3.声明完整性约束三 约束的类型 (见图)    1.not null    (不能为空)  ...  阅读全文
posted @ 2012-08-18 23:07 地心引力 阅读(1315) | 评论 (0)编辑 收藏