什么是关系型数据库和非关系型数据库_关系型数据库和非关系型区别

什么是关系型数据库和非关系型数据库_关系型数据库和非关系型区别关系型数据库又称为关系型数据库管理系统(RDBMS),它是利用数据概念实现对数据处理的算法,达到对数据及其快速的增删改查操作。既然被称为关系型数据库,那么它的关系在哪里体现呢?举一个例子吧。比如

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

关系型数据又称为关系型数据库管理系统(RDBMS),它是利用数据概念实现对数据处理的算法,达到对数据及其快速的增删改查操作。

既然被称为关系型数据库,那么它的关系在哪里体现呢?

举一个例子吧。

比如我现在有表单A 和 表单B

其中:

表单A 中有一个名为user_id的字段

表单B 中也有一个名为user_id的字段

现在我把他们建立一种联系,当我去修改表单A的user_id的值时,表单B 中的user_id的值也会自动进行修改,因为他们建立的一种关系,因为这种关系,使得数据具有一致性。 千万数据中,获取有数条直接,在运维或者开发哥哥的神操作下,他们冥冥中被安排的明明白白。

 

非关系型数据库 正如它的名字,每条数据间都是独立存在的,没撒子关系哩。

RDBMS 术语

在上一篇文章 第四发 数据库入门 中,我提到的数据表单都是RDBMS中的一些术语。现在我继续补充一些。

冗余: 不考虑数据大小,去提高查询数据的速度。举一个例子,比如我现在有两个表单,一个叫A,一个叫B,而在AB中,有好几个字段是相关联的,如果这时候我们数据量很大,还的要进行极其频繁的数据查询,数据库查询的速度一定会慢下来。在极其频繁的查询中,因为很多字段都是相关联的,每次都要进行很多次跨表查询,所以速度会慢下来。如果我们这时候取消几个字段关系,把B中的字段写到A里边,把A里边的写到B里边。这样虽然取消了关系,但是两个表中数据重复了,所以数据库大小就会变大,但是这时候就会减少跨表查询,数据库查询速度就很上来。所以,在数据库中,有时候查询慢的原因未必是数据量太大,而是拥有极其复杂的字段关系。

 

主键: 你可以理解为主要关键字.主键在当前表单的当前字段是唯一的 比如数据库通常都是在第一个字段是 ID,这个通常就是一个主键,它默认会自增长。它在名为ID的字段下是不会重复的,每行的值与其他行的值不会重复。

 

外键: 主要用于两个表直接的关联. 强行举例,比如我现在有一个名为A 和 B 的表单,在A 中有一个名为 username的字段,在B中有一个名为user_email的字段,这时username去关联user_email的字段,这时的username字段就叫做外键.

 

索引: 利用一定的算法方法,对专门的字段进行优化,使其加快查询速率。

 

接下来,来看Mysql的使用。

为了后期我们方便使用,我先在这里教大家创建一个mysql账户。

什么是关系型数据库和非关系型数据库_关系型数据库和非关系型区别

我们使用默认的root 超级管理员用户登录后,是这样的。

这时,我们要创建一个专门针对一个名为test的库创建一个用户,让这个用户只对test库有增删改查的权限。

我决定这个用户的用户名和密码都设置为 xeanyu

什么是关系型数据库和非关系型数据库_关系型数据库和非关系型区别

我们来解析一下 grant all on test.* to 'xeanyu'@'localhost' identified by "xeanyu";

其中

grant是Mysql一个专门控制权限的命令

all 指的是所有权限

test.* test是数据库名字,然后后边的 .*是指当前所有表

'xeanyu'@'localhost' 其中前面的xeanyu指的是用户名,而localhost指的是这个用户名能在哪里进行登录,这里的localhost是本地。

identified by "xeanyu" 指的是设置密码为xeanyu

请根据自己的情况做决定,记得命令后边有一个分号!!

然后我们退出数据库,使用xeanyu的数据库账户登录一下。

什么是关系型数据库和非关系型数据库_关系型数据库和非关系型区别

可以看到,我们使用新创建的用户名成功登录了。

这是胜利的第一步!

 

Mysql数据库简单的一些命令

  • show databases;  显示当前用户下能操作的所有数据库。
  • use [数据库名称];  切换数据库
  • show tables;    显示当前数据库下的所有表单
  • create database [数据库名称] charset utf8mb4;    创建一个名为[数据库名称]的数据库,且编码为utf8.如果不指定编码,可能只能支持拉丁文。
  • drop database [数据库名称];    删除数据库[名称]
  • truncate table [表名];    清空表单所有数据
  • delete table [表名];    删除表单
  • desc [表名];    查看表结构
  • select [字段名或者用*代替所有] from [表单名];     查看[表单名]中的[字段名或者用*代替所有]的数据。

Mysql 创建一个表单

我们先来手撸一个表结构(以后就不用了,放❤)

什么是关系型数据库和非关系型数据库_关系型数据库和非关系型区别

可以看到,重点在于最后的创建表结构。

我们分析一下那个Sql代码。

其中id user_name user_pass user_age 字段,其中在代码的最后一行,指明了字段id 是主键,在代码第二行,从auto_increment看出指明了字段id 自增长。而其中多次出现 not null,它的意思是不容许空,而null的意思是容许为空。

通常字段格式就是: 字段名 字段类型 字段属性

什么是关系型数据库和非关系型数据库_关系型数据库和非关系型区别

我们使用 desc User 看出User表单中的表单结构.

向User表单插入第一条数据

什么是关系型数据库和非关系型数据库_关系型数据库和非关系型区别

我们来分析一下插入语句。

insert into User (user_name,user_pass,user_age) values("XeanYu","XeanYu",18);

我们分看下

其中insert 和 into 就不用说了,固定的。

其中User 是表单名,(user_name,user_pass,user_age) 其中是三个对应User中的三个字段,有人问,为什么不给id字段赋值?因为id 字段是自增长的主键。

然后values("XeanYu","XeanYu",18) 其中三个值对应三个user_name,user_pass,user_age三个字段。

这时候有人估计看咸鱼不爽了,想要找事。如果我把id 字段的值强行写进去呢,比如我就写个1,重复的话,数据库能拿我怎么样呢?咸鱼我准备实施反击计划。

什么是关系型数据库和非关系型数据库_关系型数据库和非关系型区别

看到了吧。Mysql都看你不爽了,人家主键在对应字段下面是数据唯一的!

 

有人可能还要问啦,如果我把id改成其他数字行吗?我要回答,当然可以,只要主键的值不重复,一切都好说。

什么是关系型数据库和非关系型数据库_关系型数据库和非关系型区别

可以看到,其实主键的值就是在上一行主键的值 +1

Mysql简单数据查询

什么是关系型数据库和非关系型数据库_关系型数据库和非关系型区别

我们已经了解了简单的语句查询。

我们稍微生个级别。

比如我要user_age 为18的几行数据怎么办?也就是说年龄18的用户怎么筛选出来?

什么是关系型数据库和非关系型数据库_关系型数据库和非关系型区别

可以看到,我们用where user_age = 18 过滤出了我们需要的数据。

继续升级,如果我不要看到id 这个字段的内容咋办?

什么是关系型数据库和非关系型数据库_关系型数据库和非关系型区别

我们可以去更改select 所选择的字段进行输出。

由于有三个完全相同资料的用户,我想直接跳过前两个进行输出怎么搞?

这个时候我们就要清楚偏移量大哥了.

什么是关系型数据库和非关系型数据库_关系型数据库和非关系型区别

可以看到,我们多了两个东西limit offset 这两个东西

limit: 显示条数

offset: 跳过几条开始查询

Mysql简单的数据修改更新

假如我想修改麻花藤的user_pass字段的值怎么办呢?

什么是关系型数据库和非关系型数据库_关系型数据库和非关系型区别

直接上图

update [表名] set [字段修改语句] where 条件;

Mysql 简单的降序升序

比如我现在有一堆新日志,但是现在数据库的从小到大的排列方法,我想把顺序倒转过来,我该怎么搞呢?

什么是关系型数据库和非关系型数据库_关系型数据库和非关系型区别

好了,Mysql的基本知识就写到这里,等咸鱼哪天突然发疯给大家疯狂讲Mysql吧。

接下来就讲Python和Mysql直接的操作。

Python操作Mysql

有一个这样的库,专门针对关系型数据库而有的模块。

他就是Sqlalchemy 它是一个ORM框架,是由Mako的作者创建的。

我们先使用pip3来安装一下。

在上边的内容里边,我们已经建立了一个针对数据库 test的用户,现在这个用户就要派上用场了。

 

现在,我如果要用Python获取数据库test下的 User 的所有数据。

废话不多说,直接上代码。

第2~4行:其中create_engine 是用于连接数据库的,它会返回一个实例,但是这个时候并未连接。而第二行中的install_as_MySQLdb是一个处理包的函数,原本Mysqldb是不支持Python3的,后来有了Pymysql,但是还有很多模块需要Mysqldb,所以就在这里进行了包上的处理,第三行所执行的函数,就是可以让那些需要Mysqldb的模块可以获取到Mysqldb包。

 

第6行: 这里需要重点讲下,这里的create_engine 连接数据库的格式是

dialect+driver://username:password@host:port/database_name

其中 dialect 指的是数据库程序,比如我用mysql,或者其他数据库名称,比如sqllite,postgersql等等。

其中driver 是数据库程序的驱动,如果不指定,Sqlalchemy默认会是Mysqldb,这也是我为什么要用 install_as_MySQLdb 的原因。

其中username 是数据库用户名,比如我们创建的 xeanyu 这个用户,xeanyu就是用户名

其中 password 是用户密码

其中host 和 port 是数据库地址和端口,其中port不指定则默认根据dialect 去默认。

其中database_name 是数据库名称

所以我们根据以上格式,我们去连接数据库。

 

第8行: 我们根据create_engine给我们返回给我们的实例去连接数据库,进行connect()

 

第9行: 我们又根据connect() 返回给我们的连接实例,去进行数据库的操作, select * from User 其中不必带上分号,它会返回一个迭代器,我们把这个迭代器赋值给raw

 

第11~12行: 我们输出我们查询的东西。

 

OK了,今天就说到这里。下节我们细说。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/166669.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号