大家好,我是不会debug的迪巴哥,是一个每天在改bug的java码农,众所周知,我们今天生活在一个数据时代,你每天登录、注册、浏览信息的时看到的都是数据,而我们的数据都保存在数据库中,今天我给大家讲讲数据库。
一、数据管理的诞生
数据库:
数据库的概念就是用来组织、管理、存储数据的仓库。
计算机发明是为了科学计算,而科学计算需要大量数据输入和输出,早期可以通过使用打孔卡片的孔、灯泡亮灭表示数据输入、输出。
1951年,雷明顿兰德公司的Univac I计算机推出一秒可以输入百条记录的磁带驱动器,从而引发数据管理的革命。
1956年IBM生产出第一个磁盘驱动器-the Model 305 RAMAC,此驱动器有50哥盘片,每个盘片直径2英尺,能够存储5MB的数据,用磁盘可以随机存储数据。
数据库系统萌芽出现于60年代,计算机开始广泛地应用于数据管理,对数据共享提出越来越高的要求,因此统一管理的共享数据的数据库管理系统(DBMS)应运而生。各种DBMS软件都基于某数据模型,因此按照数据模型可把数据库系统分为网状数据库、层次数据库、关系数据库三类。
网状数据库
最早出现的是网状DBMS,是美国通用电器公司Bachman等人在1961年开发的IDS(Integrated datasource),即集成数据源,奠定网状数据库基础。结点描述数据,结点的联系就是数据的关系,能够直接描述客观世界,可以表示实体间多种复杂关系,而这是层次数据模型无法做到的。比如,一个结点可以有多个父结点,结点之间支持可以多对多关联。
层次型数据库
层次型DBMS是随网络型数据库后出现的,其中最著名的是IBM公司在1968年开发IMS,其以树状结构表示实体间的关系。关系只支持一对多。
关系数据库:
网状数据库与层次数据库虽然解决了数据集中共享等问题,但是这玩意看起来也太抽象麻烦了,你在存储的时候仍然要搞清复杂的存储结构,指出存储路径,于是这个时候关系数据库登场了。
1970年,IBM研究员E.F.Codd博士在刊物Communication of the ACM发表名为“A Relational of the Large Shared Data Banks”的论文,提出关系模型概念。他的心愿是为数据库建立一个优美的数据模型。后来Codd又陆续发表多篇文章,论述范式理论和衡量关系系统的12条标准,用数学理论奠定关系数据库基础。
但当时有人认为关系模型是理想化的数据模型,更有人认为他对网状数据库规范化工作产生了严重威胁。为了促进对问题理解,1974年ACM牵头阻止了一次研讨会,由此开展了以Codd和Bachman为首的关于关系数据库的辩论,这次辩论推动了关系数据库的发展,让他成为现代数据产品的主流。
时至今日我们用到的主流关系型数据库有:MySql、Oracle、SQL Server等。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pN8zyIsr-1621782312433)(https://www.pianshen.com/images/502/35a3e81c9289aea219d20913858ee816.png)]
二、SQL介绍
1974年,IBM的Ray Boyce和Don Chamberlin将Codd关系数据库12条准则数学定义用简单的关键语法表现出来,提出了SQL语言。
SQL语言功能包括查询、操纵、定义和控制,是一个综合的、通用的关系数据库语言,同时也是高度非过程化的语言。1986年,ANSI把SQL作为关系数据库语言的美国标准,同年公布标准SQL文本、目前SQL标准也在不断完善迭代,经历了许多版本。
三、数据怎么插入以及查询
数据是通过Sql语句插入数据库以及从数据库中查出来的。比如当你注册账户的时候,会执行一条插入语句,insert into…,当你登录的时候会执行查询语句,select …。当你更新的时候会执行更新语句,update…,而在你删除的时候,我们处于数据库的数据并不是真的删除,因为数据对于公司和程序员来说是无价的,我们在删除的的时候只会改变数据的状态,比如status 从1改为0,那么我们就认为数据是被删除了。
四、怎么连接数据库以及怎么用代码实现
/*
参数:
fromSub 从哪位用户转账
toSub 转给的用户
m 转账金额
flag 标记,1表示转账成功 0表示转账失败
*/
-- 存储过程sql
DELIMITER $
CREATE procedure transfer(in fromSub VARCHAR(20),in toSub VARCHAR(20),in m FLOAT,OUT flag INT)
BEGIN
-- i1变量存储转出账的ROW_COUNT()结果
declare i1 INT DEFAULT 0;
-- i2变量存储转入账的ROW_COUNT()结果
declare i2 INT DEFAULT 0;
START TRANSACTION;
-- 转出账 扣钱
UPDATE account SET money = money - m WHERE name=fromSub;
-- 将ROW_COUNT()即上次修改影响的行数1保存到变量i1中
SELECT ROW_COUNT() INTO i1;
-- 转入账
UPDATE account SET money = money + m WHERE name=toSub;
-- 将ROW_COUNT()即上次修改影响的行数1保存到变量i2中
SELECT ROW_COUNT() INTO i2;
IF i1>0 AND i2>0 THEN
-- 提交事务
COMMIT;
SET flag = 1;
ELSE
-- 回滚事务
ROLLBACK;
SET flag = 0;
END IF;
SELECT CONCAT(i1,'---',i2);
END $
知乎/微博/b站/微信公众号 :迪巴哥没八哥