【程序员与DBA】
DBA需要花很多时间在数据库的备份、授权、调优、修复、监控等内容上,而程序员则应该去掌握SQL语句的使用,而且为了简化系统开发难度,应该学会使用数据库函数、子查询、表联接、开窗函数等高级的SQL特性。
【数据库的引入】
在数据库出现以前,处理数据,开发人员需要熟悉操作磁盘文件的函数、编写复杂的搜寻算法才能快速的把数据从文件中检索出来,当数据格式发生变化的时候要编写复杂的文件格式升级程序、很难控制并发修改。
数据库可以将我们从复杂的数据处理事务中解脱出来,从而专注于业务。
【数据库】
数据库:存储数据的仓库。
数据库能够帮助我们存储、组织和检索数据。
【数据库管理系统】
数据库管理系统DBMS,是一种操纵和管理数据库的系统软件,用于建立、使用和维护数据库。用户通过DBMS访问数据库中的数据,DBA也通过DBMS进行数据库的维护工作。
主流数据库管理系统有:DB2、Oracle、Microsoft SQL Server、Sybase SQL Server、Informix、MySQL等。
1、 DB2
应用程序可以通过使用微软的ODBC接口、Java的JDBC接口或者CORBA接口代理来访问DB2数据库。另外,DB2被称为“最难用的数据库系统”。
2、 Oracle
Oracle在功能、性能、可用性都非常好。
3、 Microsoft SQL Server
Microsoft SQL Server的可用性做的非常好,提供了很多外围工具来帮助用户对数据库进行管理,用户甚至无需直接执行任何SQL语句就可以完成数据库的创建、数据表的创建、数据的备份/恢复等工作。但它只能运行于Windows操作系统之上,而且在大数据量和大交易量的环境中的表现都是不尽人意的,当企业的业务量达到一个水平后就要考虑升级到Oracle或者DB2了。
4、 MySQL
一个小型关系型数据库管理系统。目前Internet上流行的网站架构方式时LAMP(linux+Apach+MySQL+PHP)。MySQL在国内没有足够的技术支持力量。
【基础概念】
1、 Catalog(Database)
数据库既然是一个数据的仓库,就要对不同类别的数据分类存储,如HR数据库、核心业务数据库BIZ。不同的数据就叫做Catalog或Database。
2、 表Table
区别了不同的类别,还要区别不同的类型。如核心业务中的客户资料、商品资料、销售员资料等。不同类型的资料应放到不同的区域中,称为“表”Table。
3、 列Column
也叫“字段”Field,每个列描述了数据的一个特性。
4、 数据类型DataType
规定了一个列中能填写什么类型的数据。
5、 记录Record
又称为行Row,它是数据表中的一行数据。表是由行和列组成的一张二维表,这就是关系数据库中最基本的数据模型。
6、 主键PrimaryKey
如员工表中的每一行代表一个员工,而名字可能是重复的,这时需要为每个员工分配一个唯一的工号,来唯一的标示员工,大多数DBMS中并没有强制规定一个表必须有主键,但是为一个数据表指定一个主键是一个非常好的习惯。
7、 表关联
为了避免表中的重复信息,将两张表通过字段关联起来的方式称为“表关联”,关联到其他表主键的字段被称为“外键”。
8、 索引
可以把索引想象成汉语字典的按笔画查找,如将笔画为5的汉字列出来,将笔画为18的汉字列出来等。索引可以提高数据查询的速度,但它占据了一定的磁盘空间,减慢了数据插入和删除的速度,因为每次插入和删除的时候都需要更新索引,一个表拥有的索引越多,则写操作的平均性能下降就越大。
【数据库语言SQL】
SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。使用SQL,只要发出“做什么”的命令,“怎么做”是不用使用者考虑的。
SQL全称是Structured QueryLanguage,SQL是高级的非过程化编程语言,允许用户在高层数据结构上工作,SQL语句可以嵌套使用。
SQL语句具有4个主要功能:
1、 创建数据库并定义表的结构;
2、 查询需要的数据;
3、 更新或者删除指定的数据;
4、 控制数据库的安全。
我们可以通过三种方式执行SQL:
1、 在工具中执行
如:各个DBMS几乎都提供了工具用于执行SQL语句,比如MicrosoftSQL Server的Management Studio、DB2的命令中心、Oracle的SqlPlus或者MySQL的QueryBrowser。
2、 以编译的方式嵌入到语言中
把SQL直接写到代码中,在编译的时候由编译器来决定和数据库的交互方式。
3、 以字符串的形式嵌入到语言中。
写到代码中,由代码将其提交到DBMS,并且分析返回的结果。
【增删改查】
插入
Insert into Table () values ();
删除
Delete from Table where parameter=xx;
更新
Update Table set parameter=xx;
查询
Select * from Table;
为列指定别名
select FName AS Name, FAge AS Age,FSalary AS Salary from [master].[dbo].[T_Employee]
【数据汇总】
SQL中提供了聚合函数来完成计算统计结果集条数、某个字段的最大值、某个字段的最小值、某个字段的平均值以及某个字段的合计值等数据统计的功能。SQL标准中规定了下面几种聚合函数:
函数名 | 说明 |
MAX | 计算字段最大值 |
MIN | 计算字段最小值 |
AVG | 计算字段平均值 |
SUM | 计算字段合计值 |
COUNT | 统计数据条数 |
【高级数据过滤】
1、 通配符过滤:SQL中的通配符过滤使用LIKE关键字
1.1 单通配符过滤:使用半角下划线“_”
1.2 多字符匹配:使用半角百分号“%”
1.3 集合匹配:使用“[]”,还可以使用否定符“^”来对集合取反。如“[^bt]%”代表,匹配第一个字符不为b或者t、长度不限的字符串。
集合匹配只在MSSQLServer上提供支持,不过在其他数据库中我们可以通过变通手段来实现相同的效果。
通配符过滤是一个非常强大的功能,不过在使用通配符过滤进行检索的时候,数据库系统会对全表进行扫描,所以执行速度非常慢。
2、 多值检测
使用方法为“IN (值1,值2,值3)”
3、 数据分组
数据分组用啦将数据分为多个逻辑组,从而可以对每个组进行聚合运算。SQL语句中使用GROUP BY子句进行分组。
4、 HAVING语句
有的时候需要对部分分组进行过滤,HAVING语句能够使用的语法和where几乎是一样的。
【限制结果集行数】
如:MSSQLServer 2000中提供了TOP关键字用来返回结果集中的前N条记录。
【数据库分页】
在进行信息检索的时候,检索结果的数量通常会非常多,达到成百上千条。甚至更多,这么多的检索结果同时显示在同一个界面中,不仅查看起来非常麻烦,而且过多的数据显示在界面上也会造成占用过多的系统资源。解决这个问题的最常用方案就是数据库分页。
【抑制数据重复】
DISTINCT关键字是用来进行重复数据抑制的最简单的功能,而且所有的数据库系统都支持DISTINCT,DISTINCT的使用也非常简单,只要在SELECT之后增加DISTINCT即可。
待续。