hello 数据库!

Posted 迪巴哥没八哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hello 数据库!相关的知识,希望对你有一定的参考价值。

大家好,我是不会debug的迪巴哥,是一个每天在改bug的java码农,众所周知,我们今天生活在一个数据时代,你每天登录、注册、浏览信息的时看到的都是数据,而我们的数据都保存在数据库中,今天我给大家讲讲数据库。

一、数据管理的诞生

数据库:

数据库的概念就是用来组织、管理、存储数据的仓库。

计算机发明是为了科学计算,而科学计算需要大量数据输入和输出,早期可以通过使用打孔卡片的孔、灯泡亮灭表示数据输入、输出。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OHL5shXJ-1621782312412)(https://www.pianshen.com/images/560/34d48b0451d36977d3f99f37defa0498.png)]

1951年,雷明顿兰德公司的Univac I计算机推出一秒可以输入百条记录的磁带驱动器,从而引发数据管理的革命。

img

img

1956年IBM生产出第一个磁盘驱动器-the Model 305 RAMAC,此驱动器有50哥盘片,每个盘片直径2英尺,能够存储5MB的数据,用磁盘可以随机存储数据。

img

数据库系统萌芽出现于60年代,计算机开始广泛地应用于数据管理,对数据共享提出越来越高的要求,因此统一管理的共享数据的数据库管理系统(DBMS)应运而生。各种DBMS软件都基于某数据模型,因此按照数据模型可把数据库系统分为网状数据库、层次数据库、关系数据库三类。

网状数据库

最早出现的是网状DBMS,是美国通用电器公司Bachman等人在1961年开发的IDS(Integrated datasource),即集成数据源,奠定网状数据库基础。结点描述数据,结点的联系就是数据的关系,能够直接描述客观世界,可以表示实体间多种复杂关系,而这是层次数据模型无法做到的。比如,一个结点可以有多个父结点,结点之间支持可以多对多关联。

img

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wbv1aIwG-1621782312425)(https://www.pianshen.com/images/17/59cb761cd9aaea043560082563d4da01.JPEG)]

层次型数据库

层次型DBMS是随网络型数据库后出现的,其中最著名的是IBM公司在1968年开发IMS,其以树状结构表示实体间的关系。关系只支持一对多。

img

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L3A4QNCK-1621782312431)(https://www.pianshen.com/images/702/d07500f2491b84ebaccb4993303f47f6.JPEG)]

关系数据库:

网状数据库与层次数据库虽然解决了数据集中共享等问题,但是这玩意看起来也太抽象麻烦了,你在存储的时候仍然要搞清复杂的存储结构,指出存储路径,于是这个时候关系数据库登场了。

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)]

img

二、SQL介绍

1974年,IBM的Ray Boyce和Don Chamberlin将Codd关系数据库12条准则数学定义用简单的关键语法表现出来,提出了SQL语言。

SQL语言功能包括查询、操纵、定义和控制,是一个综合的、通用的关系数据库语言,同时也是高度非过程化的语言。1986年,ANSI把SQL作为关系数据库语言的美国标准,同年公布标准SQL文本、目前SQL标准也在不断完善迭代,经历了许多版本。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y6dWRJi2-1621782312439)(C:\\Users\\堂吉柯南\\AppData\\Roaming\\Typora\\typora-user-images\\image-20210523174440186.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6vrxWWLy-1621782312440)(C:\\Users\\堂吉柯南\\AppData\\Roaming\\Typora\\typora-user-images\\image-20210523175225562.png)]

三、数据怎么插入以及查询

数据是通过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站/微信公众号 :迪巴哥没八哥

以上是关于hello 数据库!的主要内容,如果未能解决你的问题,请参考以下文章

如何从URL获取片段标识符(hash#之后的值)?

sublime代码片段

sublime text3 增加代码片段(snipper)

[linux][c/c++]代码片段02

指针练习:输出Hello

片段是否执行基础数据的复制?