常见数据库的简介

一 几种常见的数据库及其发展历史


1. IBM DB2  作为关系数据库领域的开拓者和领航人,IBM1977年完成了System R系统的原型,1980年开始提供集成的数据库服务器—— System/38,随后是SQL/DSforVSEVM,其初始版本与SystemR研究原型
密切相关。DB2 forMVSV1 1983年推出。该版本的目标是提供这一新方案所承诺的简单性,数据不相关性和用户生产率。1988DB2 for MVS提供了强大的在线事务处理(OLTP)支持,1989年和1993年分别以远程
工作单元和分布式工作单元实现了分布式数据库支持。最近推出的DB2 Universal Database 6.1则是通用数据库的典范,是第一个具备网上功能的多媒体关系数据库管理系统,支持包括Linux在内的一系列平台。  

2. Oracle
  Oracle 前身叫SDL,由Larry Ellison和另两个编程人员在1977创办,他们开发了自己的拳头产品,在市场上大量销售,1979年,Oracle公司引入了第一个商用SQL关系数据库管理系统。Oracle公司是最早开发
关系数据库的厂商之一,其产品支持最广泛的操作系统平台。目前Oracle关系数据库产品的市场占有率名列前茅。  

3. Informix
  Informix1980年成立,目的是为Unix等开放操作系统提供专业的关系型数据库产品。公司的名称Informix便是取自InformationUnix的结合。Informix第一个真正支持SQL语言的关系数据库产品是Informix SEStandardEngine)。InformixSE是在当时的微机Unix环境下主要的数据库产品。它也是第一个被移植到Linux上的商业数据库产品。  

4. Sybase
  Sybase公司成立于1984年,公司名称“Sybase”取自“system”“database”相结合的含义。Sybase公司的创始人之一Bob EpsteinIngres 大学版(与System/R同时期的关系数据库模型产品)的主要设计人员。公司的第一个关
系数据库产品是19875月推出的Sybase SQLServer1.0Sybase首先提出Client/Server数据库体系结构的思想,并率先在Sybase SQLServer 中实现。  

5. sql server
  1987年,微软和IBM合作开发完成OS/2IBM在其销售的OS/2 ExtendedEdition系统中绑定了OS/2Database Manager,而微软产品线中尚缺少数据库产品。为此,微软将目光投向Sybase,同Sybase签订了合作协议,使用Sybase的技术开发基于OS/2平台的关系型数据库。1989年,微软发布了SQL Server 1.0版。   

6. PostgreSQL
  PostgreSQL 是一种特性非常齐全的自由软件的对象——关系性数据库管理系统(ORDBMS),它的很多特性是当今许多商业数据库的前身。PostgreSQL最早开始于BSDIngres项目。PostgreSQL的特性覆盖了SQL-2/SQL-92SQL-3。首先,它包括了可以说是目前世界上最丰富的数据类型的支持;其次,目前PostgreSQL是唯一支持事务、子查询、多版本并行控制系统、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统.  

7.mySQL
  mySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008116号被Sun公司收购。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。  

8.Access
数据库 美国Microsoft公司于1994年推出的微机数据库管理系统。它具有界面友好、易学易用、开发简单、接口灵活等特点,是典型的新一代桌面数据库管理系统。其主要特点如下:  (1)完善地管理各种数据库对象,具有强大的数据组织、用户管理、安全检查等功能。  (2)强大的数据处理功能,在一个工作组级别的网络环境中,使用Access开发的多用户数据库管理系统具有传统的XBASE(DBASEFoxBASE的统称)数据库系统所无法实现的客户服务器(Cient/Server)结构和相应的数据库安全机制,Access具备了许多先进的大型数据库管理系统所具备的特征,如事务处理/出错回滚能力等。  (3)可以方便地生成各种数据对象,利用存储的数据建立窗体和报表,可视性好。  (4)作为Office套件的一部分,可以与Office集成,实现无缝连接。  (5)能够利用Web检索和发布数据,实现与Internet的连接。 Access主要适用于中小型应用系统,或作为客户机/服务器系统中的客户端数据库。  

9.FoxPro
数据库   最初由美国Fox公司1988年推出,1992Fox公司被Microsoft公司收购后,相继推出了FoxPro2.52.6VisualFoxPro等版本,其功能和性能有了较大的提高。 FoxPro2.52.6分为DOSWindows两种版本,分别运行于DOSWindows环境下。FoxProFoxBASE在功能和性能上又有了很大的改进,主要是引入了窗口、按纽、列表框和文本框等控件,进一步提高了系统的开发能力。

二 数据库的种类


 数据库通常分为层次式数据库、网络式数据库和关系式数据库三种。而不同的数据库是按不同的数据结构来联系和组织的。

1.数据结构模型

  (1)数据结构

  所谓数据结构是指数据的组织形式或数据之间的联系。如果用D表示数据,用R表示数据对象之间存在的关系集合,则将DS=(DR)称为数据结构。例如,设有一个电话号码簿,它记录了n个人的名字和相应的电话号码。为了方便地查找某人的电话号码,将人名和号码按字典顺序排列,并在名字的后面跟随着对应的电话号码。这样,若要查找某人的电话号码(假定他的名字的第一个字母是Y),那么只须查找以Y开头的那些名字就可以了。该例中,数据的集合D就是人名和电话号码,它们之间的联系R就是按字典顺序的排列,其相应的数据结构就是DS=(DR),即一个数组

  (2)数据结构种类

  数据结构又分为数据的逻辑结构和数据的物理结构。数据的逻辑结构是从逻辑的角度(即数据间的联系和组织方式)来观察数据,分析数据,与数据的存储位置无关。数据的物理结构是指数据在计算机中存放的结构,即数据的逻辑结构在计算机中的实现形式,所以物理结构也被称为存储结构。这里只研究数据的逻辑结构,并将反映和实现数据联系的方法称为数据模型。

  目前,比较流行的数据模型有三种,即按图论理论建立的层次结构模型和网状结构模型以及按关系理论建立的关系结构模型。

2.层次、网状和关系数据库系统

  (1)层次结构模型

  层次结构模型实质上是一种有根结点的定向有序树(在数学中""被定义为一个无回的连通图)。下图是一个高等学校的组织结构图。这个组织结构图像一棵树,校部就是树根(称为根结点),各系、专业、教师、学生等为枝点(称为结点),树根与枝点之间的联系称为边,树根与边之比为1:N,即树根只有一个,树枝有N个。

  按照层次模型建立的数据库系统称为层次模型数据库系统。IMS(Information Manage-mentSystem)是其典型代表。

  (2)网状结构模型

  按照网状数据结构建立的数据库系统称为网状数据库系统,其典型代表是DBTG(Data Base Task Group)。用数学方法可将网状数据结构转化为层次数据结构。

        (3)关系结构模型

  关系式数据结构把一些复杂的数据结构归结为简单的二元关系(二维表格形式)。例如某单位的职工关系就是一个二元关系。

  由关系数据结构组成的数据库系统被称为关系数据库系统。

  在关系数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关系表格的分类、合并、连接或选取等运算来实现数据的管理。dBASEII就是这类数据库管理系统的典型代表。对于一个实际的应用问题(如人事管理问题),有时需要多个关系才能实现。用dBASEII建立起来的一个关系称为一个数据库(或称数据库文件),而把对应多个关系建立起来的多个数据库称为数据库系统。dBASEII的另一个重要功能是通过建立命令文件来实现对数据库的使用和管理,对于一个数据库系统相应的命令序列文件,称为该数据库的应用系统。因此,可以概括地说,一个关系称为一个数据库,若干个数据库可以构成一个数据库系统。数据库系统可以派生出各种不同类型的辅助文件和建立它的应用系统。

关系数据库的基础:

   表:可以非正式的把关系数据库视为表的集合,每一个表又包含行和列。例如excel中的表。

  列的数据类型是指该列能够保持的数据类型,一般包括整形,浮点型,字符串和日期,BLOB,列对应一个列名和数据类型。


   行:对应于相互关联的列值。表中的特定行包含了一个特定纪录所对应的所有列值。既所有行中的值都是相互关联的。


  正式术语:表的正式术语为关系

                      列的正式术语为属性或数据元素

                      行的正式术语为元组

   

  键:用来查询行的一列或多列的组合。


E.g

身份证 姓名 性别 年龄 


主键:能够唯一标示表中某一个特定行,不允许重复,primary key,一个表只能有一个主键。

 外键:用作一种约束,而不是用来查中表中的记录的。而是引用另一个表中的键,通常时主键。用作一种完整性约束。有他定义了一个表到另外一个表的引用,所以称之为完整性约束。


约束:

    基本约束:如非空

    唯一性约束:超键,组合唯一

    主键约束:简单的表明不存在完全相同的两个记录,切构成主键的所有字段为非空。


sql:结构化查询语言(structured  query language )



三  数据库应遵守的范式:(规范)


第一范式:

   1.每列必须有唯一的名称;

   2.行和列的次序无关紧要;

   3:每一列有单独的数据类型;

   4:不允许包含相同值的行;

  5:每一列包含一个单值;

第二范式:

   1:符合第一范式

   2:所有的非键值字段依赖于所有的键值字段


不符合第二范式的例子: 表:学号, 姓名, 年龄, 课程名称, 成绩, 学分; 这个表明显说明了两个事务:学生信息, 课程信息; 存在问题: 数据冗余,每条记录都含有相同信息; 删除异常:删除所有学生成绩,就把课程信息全删除了; 插入异常:学生未选课,无法记录进数据库; 更新异常:调整课程学分,所有行都调整。 


修正: 学生:Student(学号, 姓名, 年龄); 课程:Course(课程名称, 学分); 选课关系:SelectCourse(学号, 课程名称, 成绩)。 


第三范式:

   符合2NF

   他不能包含传递相关性(指一个非键值字段的值依赖于另一个非键值的字段)



不符合第三范式的例子:
学号, 姓名,年龄,所在学院,学院联系电话,关键字为单一关键字"学号";
存在依赖传递: (学号) → (所在学院) → (学院地点,学院电话)

存在问题:
数据冗余:有重复值;
更新异常:有重复的冗余信息,修改时需要同时修改多条记录,否则会出现数据不一致的情况
删除异常

修正:
学生:(学号,姓名,年龄,所在学院)
学院:(学院,地点,电话)



  常用的SQL(structured query language 结构化的查询语言)语句


1,创建表

CREATE 创建

TABLE 表

PRIMARY KEY主键,唯一标示符;

AUTOINCREMENT自动增长

NOT NULL 非空

UNIQUE 唯一的


CREATE TABLE Teacher1 (teacher_idINTEGERPRIMARYKEY AUTOINCREAMENTNOT NULL UNIQUE, teacher_nameTEXT,teacher_sexBOOLEAN)


CREATE TABLE Teacher2 (teacher_idINTEGERPRIMARYKEY AUTOINCREAMENT, teacher_nameTEXT,teacher_sexBOOLEAN)


2, 删除表

DROP 丢弃 扔到


DROP TABLE Teacher1


3,给表添加列

ALTER 改变 修改


ALTER TABLE Teacher2ADD teacher_ageINTEGER


4,插入数据


INSERT INTO TeacherVALUES(1,'zhangsan',1)

INSERT INTO Students (name,sex)VALUES('zhangsan',0)


5,查询数据

SELECT 查询

* 全部

FROM


SELECT * FROM Students


SELECT * FROM Students WHERE number<10

SELECT * FROM Students WHERE number<10 OR sex=1

SELECT * FROM Students WHERE number<10 AND number>5


like 匹配

SELECT * FROM Students WHERE name like 'zhang%'

SELECT * FROM Students WHERE name like 'zhang_'


LIMIT 限制

从第六条开始 往后的15条

SELECT * FROM Students LIMIT 5,15


6,修改数据

UPDATE 更新

set 设置


UPDATE Students set name='lisi',sex=1where number < 10AND number>5



7,删除数据

DELETE 删除


DELETE FROM StudentsWHERE number > 25




SQLite3 :

数据类型:  integer整型 text文本字符串, real实数 blob 二进制数



安装SQLiteManager:

1、使用SQLiteManager创建一个数据库:后缀名为 .sqlite/.db

2、创建一个数据库表:添加字段和数据类型;


SQL语句:


1、创建表

CREATE TABLE表名 (字段名1字段类型,字段名2 字段类型,……)

CREATETABLE Teacher (name text,sex text,age integer)


CREATE TABLE teacher (name TEXT,sex TEXT,age INTEGER,height FLOAT,weight Float


在写SQL语句时 注意输入法中英文切换问题

execute执行

syntax语法


2、插入一条记录

INSERT INTO表名 (字段1,字段2,字段3,字段4VALUES (1,值2,值3,值4)


INSERT INTO teacher (name,sex,age,height,weight) VALUES (‘zhangsan’,’’,22,1.75,56)


下方形式必须值跟字段一一对应 一个都不能少

INSERT INTO表名 VALUES (1,值2,值3,值4,值5)

INSERTINTO Students VALUES('张三','', 23,175,70)

当值为文本时 需要加引号(双引号或单引号)当值为整型或浮点型时不需要加引号


3、查询

SELECT字段名 FROM 表名

SELECT字段名,字段名,字段名,…… FROM 表名

SELECT * FROM表名

WHERE语句用于有条件地从表中选取数据可将WHERE子句添加到SELECT语句


语法

SELECT查询语句后+WHERE字段名 运算符

SELECT* FROM StudentsWHERE name =  '张三';


数据库提供内置函数:MAX(最大值), MIN(最小值), AVG(平均值)SUM(总值)

SELECT MAX(字段名) FROM表名

SELECT* FROM TeacherWHERE  age = (select min(age)from Teacher)


SELECT* FROM StudentsWHERE age BETWEEN 10AND 100

运算符有=<>(不等于 !=)><>=<=BETWEEN(在某个范围内前闭后闭),LIKE(搜索某种模式 %可以代表任意一串字符 _代表一个任意字符)


模糊查询:

查询有d的字符串 %d%

SELECT* FROM  表名 WHERE column1 LIKE  '%d%'

SELECT* FROM  TeacherWHERE name LIKE  '%a%'


查询第二位有b的字符串 _b%

SELECT* FROM  表名 WHERE column1 LIKE  '_b%'


引号:SQL使用单引号来环绕文本值。如果是数值,则不要使用引号


4、修改

UPDATE语句用来修改表中的数据

语法:

UPDATE表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 where后是一个条件)

UPDATE表名称 SET 列名称 = 新值,列名称 = 新值 WHERE 列名称 = 某值

UPDATE StudentsSET age = 20 WHERE name = '李雷'

UPDATE StudentsSET age = 20,height = 190.5 WHERE name = '李雷'


5、删除

DELETE用于删除表中的行

语法:

DELETE FROM表名称 WHERE 列名称 =

DELETE FROM Students WHERE name = '小芳'

删除所有行 即在不删除表的情况下删除所有的行,表的结构、索引、字段都是完整的

DELETE FROM表名

DELETE FROM Teacher


6、约束

SQL约束 用于限制加入表的数据的类型。可以在创建表时规定约束,或者表创建过后也可以,主要有以下几种约束

NOT NULL 约束强制列不接受空值 空值无法插入新纪录或更新纪录

UNIQUE 约束唯一标识数据库表中的某个字段

PRIMARY KEY 主键 每个表中都应有且只能有一个主键主键列不能为NULL

FOREIGN KEY外键 关键表

DEFAULT给字段添加默认值

AUTOINCREMENT自动增长


7SELECT DISTINCT查询不重复的数据

语法:

SELECT DISTINCT列名称 FROM 表名称

SELECT DISTINCT nameFROM Students

SELECT DISTINCT * FROM Students


8ANDOR运算符用于基于一个或多个条件对数据进行过滤

如果两个条件都成立 AND运算符返回一条数据

SELECT * FROM StudentsWHERE name='张三'AND weight = '50'

只要一个条件成立 OR运算符就返回一条数据

SELECT * FROM StudentsWHERE name='张三'OR weight = '50'


9ORDER BY语句用于对结果集进行排序

根据指定列对结果集进行排序  默认按照升序对记录进行排序降序使用关键字DESC 升序ASC

SELECT字段名 FROM 表名称 ORDER BY 字段名 条件(DESCASC

SELECT字段名,字段名 FROM 表名称 ORDER BY 字段名 条件,字段名 条件(DESCASC

SELECT *FROM Students ORDERBY name DESC

SELECT *FROM Students ORDERBY age ASC

desending降序

asending升序























  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值