PostgreSQL 与MySQL 对比使用

news2024/9/28 6:28:37

一、前言

       博主的系统既有 用到MySQL 也有用到PostgreSQL ,之所以用到这两种数据库,主要是现在都是国产替代,虽然说这两款数据库也不是国产的,但是相对开源,oracle是不让用了。所以现在使用比较多的就是这两个关系型数据库PostgreSQL 与MySQL。那么什么情况下选择PostgreSQL ,什么情况下选择 MySQL呢。说句实话在这两种数据库选型时,我们的系统没做选型,就按照以前的服务使用了什么数据库,后面项目的演进就选择什么数据库。实在没办法,在公司不是我一个人说的算,哈哈哈。本节对比PostgreSQL 与MySQL 的使用区别

二、PostgreSQL 与MySQL 对比区别

两种数据库的定义

1 、MySQL

MySQL 声称自己是最流行的开源数据库,它属于最流行的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。LAMP 中的 M 指的就是 MySQL。构建在 LAMP 上的应用都会使用 MySQL。MySQL 最初是由 MySQL AB 开发的,然后在 2008 年以 10 亿美金的价格卖给了 Sun 公司,Sun 公司又在 2010 年被 Oracle 收购。Oracle 收购导致 MySQL 的出现两个版本:商业版和社区版。对于后者,由于 Oracle 控制了 MySQL 的开发,受到了广大使用者的批评。

2、 PostgreSQL

PostgreSQL 标榜自己是世界上最先进的开源数据库,属于关系型数据库管理系统 (ORDBMS), 是以加州大学计算机系开发的 POSTGRES,4.2 版本为基础的对象关系型数据库管理系统, 最初是 1985 年在加利福尼亚大学伯克利分校开发的,作为 Ingres 数据库的后继。PostgreSQL 是完全由社区驱动的开源项目。它提供了单个完整功能的版本,而不像 MySQL 那样提供了多个不同的社区版、商业版与企业版。PostgreSQL 基于自由的 BSD/MIT 许可,组织可以使用、复制、修改和重新分发代码,只需要提供一个版权声明即可。

比较

相对于 Postgres MySQL 更简单, 所以有着更高的流行度, 在技术资料,以及技术组件支持上,支持的也更完善一些, 但不意味着它并不是不能替代的, 于笔者而言, MYSQL 更像用于中小企业、个人的一款数据库工具, 因为会的人多, 文档资料比较完善,所以入手难度低。但这些并不意味着 MYSQL 是最好的。

MySQL 适用的场景

MySQL 适用于简单的应用场景,如电子商务、博客、网站等, 大中小型系统均可以使用 MySQL, 它最高支持千万级别到数亿级别的数据量, 但是在高性能要求的情况下, 比如较快的响应和较高的吞吐量的时候, MySQL 的性能稍微捉襟见肘, 另外,在查询条件比较复杂、业务吞吐量要求不高,响应时长无要求,的时候,可以选择 MySQL,

Postgres SQL适用的场景

总的来说, Postgre SQL 更适合复杂的数据结构、高级应用和大规模数据集, 当然如果数据规模比较小, 也可以选择 Postgres SQL, 无论是什么场景,如果你想用 Postgres SQL, 总可以找到对应的解决方法, 有且仅有, 在查询条件比较复杂,的时候不太适用, 因为根据我们实际线上的业务表现是 Postgre SQL 可能会选错索引。

PostgreSQL 相对于 MySQL 的优势

  • Postgre SQL 在性能上远远好于 MYSQL, 通过上面的压测数据即可体现,无论是在耗时,还是在整体吞吐量上,有显著优势。

  • Postgre SQL 在单行更新上有明显优势,尤其是启用了 HOT UPDATE 后, 性能比 MYSQL 高了一个数量级。

  • 在 SQL 的标准实现上要比 MySQL 完善,而且功能实现比较严谨,比较学院化;

  • Postgre SQL 主表采用堆表存放,MySQL 采用索引组织表,能够支持比 MySQL 更大的数据量。

  • Postgre SQL 的主备复制属于物理复制,相对于 MySQL 基于 binlog 的逻辑复制,数据的一致性更加可靠,复制性能更高,对主机性能的影响也更小。

  • MySQL 的事务隔离级别 repeatable read 并不能阻止常见的并发更新,得加锁才可以,但悲观锁会影响性能,手动实现乐观锁又复杂。而 Postgre SQL 的列里有隐藏的乐观锁 version 字段,默认的 repeatable read 级别就能保证并发更新的正确性,并且又有乐观锁的性能。

三、postgreSQL常用语法

一、查询基础

1、连接数据库

C:\PostgreSQL\9.5\bin\psql.exe -U postgres -d shop

2、检查数据库连接是否成功   

SELECT 1;

3、创建数据库   

CREATE DATABASE shop;

4、退出数据库口令   

\q

5、\d 数据库 ——得到所有表的名字

6、\d 表名 —— 得到表结构

7、创建表

CREATE TABLE <表名>

(<列名1> <数据类型> <该列所需约束>,

<列名2> <数据类型> <该列所需约束>,

<列名3> <数据类型> <该列所需约束>,

<列名4> <数据类型> <该列所需约束>,

...

<该表的约束1>, <该表的约束2>,……);

8、删除表      

DROP TABLE <表名>;

9、修改表-添加列

ALTER TABLE <表名> ADD COLUMN <列的定义>;

    注:Oracle和SQL Server中不用写COLUMN: ALTER TABLE <表名> ADD <列名> ;

    oracle还可以这样:ALTER TABLE <表名> ADD (<列名>,<列名>,<列名>... );

10、修改表-删除列

ALTER TABLE <表名> DROP COLUMN <列名>;

11、插入数据   

BEGIN TRANSACTION;

INSERT INTO Product VALUES ('0001', 'T恤衫', '衣服', 1000, 500, '2009-09-20');

COMMIT;

注:在MySQL中运行时,BEGIN TRANSACTION改写成 START TRANSACTION;在Oracle和DB2中运行时,无需使用BEGIN TRANSACTION;

12、变更表名

ALTER TABLE Product RENAME TO Product;

13、查询语句

(1) 查询全部列

  Select  *  from  <表名>;

星号(*)代表全部列的意思。

(2) 查询指定列

SELECT <列名>,<列名>,…… FROM <表名>;

注:查询多列时,需要使用逗号进行分隔。查询结果中列的顺序和

SELECT 子句中的顺序相同

14、用AS为列设置别名

例:SELECT  product_id as id,

product_name as name,

purchase_price as price

FROM  product;

别名可用中文,但要用“”。

15、SELECT子句可以用常数

例:SELECT '商品' as string,'2019-12-12' as date,product_id,product_name from product;

注:此处用单引号‘’。

16、查询结果去重:distinct

例:select distinct product_type from product;

注:用distinct时null类型数据也会被作为一类数据;distinct也可以同时合并多列

17、WHERE子句添加查询筛选条件

例:select product_name,product_type from product where product_type='衣服';

18、注释的书写方式

1行注释:写在--后面

多行注释:写在/*  和  */之间

19、使用(+、-、*、/)运算符

例:select product_name,sale_price,sale_price * 2 as “sale_price_x2” from product;

20、使用比较运算符

(1) 含义

(2) 字符串类型的数据原则上按字典的顺序排序,不能与数字的大小顺序混淆,如’1-3‘<’2’

(3) 对null数据不能用比较运算符

用特定语句:is null /is not null

21、逻辑运算符

(1) NOT运算符:用来否定某一条件

例:select product_name ,sale_price from product where not sale_price >= 1000;

(2) AND运算符

其两侧条件需同步成立,相当于”并且“

例:select product_name,purchase_price from product where product_type = '厨 房用具' and sale_price >=3000;

(3) OR运算符

其两侧条件只需一个成立,相当于”或者“

例:select product_name,purchase_price from product where product_type = '厨房用具' or sale_price >=3000;

(4) 运用括号控制运算优先级

例:select product_name,product_type,regist_date from product where product_type = '办公用品' and (regist_date = '2009-09-11' or regist_date = '2009-09-20');

注:AND运算符优先于OR运算符,想要先执行OR语句可以用括号

二、聚合函数:多行汇集成一行

1、COUNT:计算表中的记录数(行数)

 例:select count(*) from product;

计算某列非空行:SELECT COUNT(purchase_price)  FROM Product;

2、SUM: 计算表中数值列中数据的合计值

例:select sum(sale_price) from product

3、AVG: 计算表中数值列中数据的平均值

例:select avg(sale_price) from product;

4、MAX: 求出表中任意列中数据的最大值

MIN: 求出表中任意列中数据的最小值

例:SELECT MAX(sale_price), MIN(purchase_price)  FROM Product;

5、使用聚合函数删除重复值

6、Group by子句

(1) 只能存在 常数、聚合函数group by子句中指定的列名

(2) group by子句中不能用别名

(3) Where 子句中不能用聚合函数

例:select product_type,count(*) from product group by product_type;

7、Haveing 子句 :取符合条件的组

8、Order by:排序

三、数据更新

1、Insert

2、Delete from 【表名】

3、Update

(1) 多列更新

① -- 使用逗号对列进行分隔排列

UPDATE Product

SET sale_price = sale_price * 10,

purchase_price = purchase_price / 2

WHERE product_type = '厨房用具';

② -- 将列用()括起来的清单形式

UPDATE Product

SET (sale_price, purchase_price) = (sale_price * 10, 

purchase_price / 2)

WHERE product_type = '厨房用具';

4、事务是需要在同一个处理单元中执行的一系列更新处理的集合。

(1) 语法:

① 事务开始语句

② DML语句1,DML语句2,......

③ 事务结束语句(commit或rollback)

(2) 开启事务语句:

① (SQLserver、postgreSQL)Begin transaction

② (MySQL) start transaction

(3) 提交事务--commit

(4) 取消处理--rollback

5、ACID特性:所有的DBMS都遵循四种特性

(1) 原子性atomicity

(2) 一致性consistency

(3) 隔离性isolation

(4) 持久性durability

四、复杂查询

1.创建视图 view:保存好的select语句

(1)语法:

CREATE VIEW 视图名称(<视图列名1>, <视图列名2>, ……)

AS

<SELECT语句>

(2)法则:尽量避免在视图的基础上创建视图,会降低sql效率

(3)法则:定义视图时不能使用order by 语句

(4)法则:部分情况可以对视图进行更新,如既没有聚合也没有结合的select语句

①视图设定为只读,因此需要on insert do instead规则

例:CREATE OR REPLACE RULE insert_rule

AS ON INSERT

TO ProductJim DO INSTEAD

INSERT INTO Product VALUES (

new.product_id,

new.product_name,

new.product_type,

new.sale_price,

new.purchase_price,

new.regist_date);

2.删除视图:drop view 【表名】

3.删除关联视图:DROP VIEW ProductSum CASCADE;

4.关联子查询:在子查询中添加条件

五、函数

1.ABS绝对值:ABS(数值)

2.Mod求余:mod(被除数,除数)

3.Round四舍五入:round(对象数值,保留小数位数)

4.|| 拼接:字符串1||字符串2

5.Length字符串长度:length(字符串)

6.lower小写转换:lower(字符串)

7.upper大写转换:upper(字符串)

8.replace字符串的替换:replace(对象字符串,替换前字符串,替换后字符串)

9.Substring(对象字符串 from 截取的起始位置 for 截取的字符数)

10.Current_date当前日期

11.Current_time当前时间

12.Current_timestamp当前日期和时间

13.Extract(日期元素 from 日期)

14.cast类型转换:cast(转换前的值 as 想要转换的数据类型

15.Coalesce讲null值转换为其他值:coalesce(数值1,数值2,数值3......)

16.like字符串部分一致查询(%代表“0字符以上任意字符串”)

17.Like+指定字符串查询:

select * from samplelike where strcol like ‘abc__’;

查询”abc+任意三个字符”的字符串

18.Between范围查询

19.Is null ,is not null判断是否为null

20.in谓语--or 的简便用法

21.Exists

22.case表达式

语法:case when <求值表达式> then <表达式>

When <求值表达式> then <表达式>

When <求值表达式> then <表达式>

...

Else <>

          End

六、集合运算

1.Union表的加法

2.Union all包含重复行

3.Except记录的减法(Oracle中使用minus

4.Inner join内联结

5.Outer join外联结

6.Cross join 交叉联结

七、SQL高级处理

1.窗口函数

(1)语法:<窗口函数> OVER ([PARTITION BY <列清单>]  

ORDER BY <排序用列清单>)

PARTITION BY:能够设定排序的对象范围

ORDER BY:能够指定按照哪一列、何种顺序排序

(2)Rank函数:排序时,如存在相同位次的记录会跳过之后的位次(1,1,1,4)

(3)Dense_rank函数:排序时,如果存在相同位次,不会跳过(1,1,2,3)

(4)Row_number函数:赋予唯一连续位次

2.聚合函数作为窗口函数

(1)Sum函数:此处与纯聚合函数不一样,此处为累计

(2)Avg函数:计算移动平均

①Rows 2 preseding:(移动平均:截止到之前2行)

②Rows 2 following :(移动平均:截止到之后2行)

3.Grouping运算符

(1)Rollup同时得出合算和小计

(2)Grouping让null更加容易分辨

(3)Cube用数据搭积木

(4)Grouping sets取得期望的积木

(5)   可以从rollup或者cube的结果中取出部分记录

八、应用程序连接数据库

驱动:可以从网上下载(PostgreSQL JDBC Driver :https://jdbc.postgresql.org/download.html)

(1)ODBC:open database connectivity

(2)JDBC:java database connectivity

(3)C:\PostgreSQL\java\jdk\bin\java -cp D:\soft\PostgreSQL\jdbc\*;. DBConnect1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1473226.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

geotools解析shp 提示 opengis.*.SimpleFeatureType‘ 不在其界限内

问题:&#xff08; geotools.version&#xff1a;31-SNAPSHOT&#xff09; 解析shp文件时提示类型SimpleFeatureType不在其界限内 解决&#xff1a; 在引用处将org.opengis.feature.simple.SimpleFeatureType 改为 org.geotools.api.feature.simple.SimpleFeatureType

Web JavaScript

目录 1 前言2 原生js常见用法2.1 弹窗操作2.2 for循环操作2.3 打印日志操作2.4 获取页面值操作2.5 判空操作2.6 修改页面内容操作2.7 网页版计算器制作 3 外部js常见用法4 总结 1 前言 JavaScript 是一种脚本&#xff0c;一门编程语言&#xff0c;它可以在网页上实现复杂的功能…

jvm面试题目补充

jdk&jre Java程序设计语言、Java虚拟机、Java API类库这三部分统称为JDK&#xff08;Java Development Kit&#xff09;。 把Java API类库中的Java SE API子集 [1] 和Java虚拟机这两部分统称为JRE&#xff08;Java Runtime Environment&#xff09;&#xff0c;JRE是支持…

缓存一致性问题的解决策略

缓存一致性问题的背景和概念介绍 在一个系统中&#xff0c;我们通常使用数据库来存储数据&#xff0c;以保证数据的持久性。但是&#xff0c;由于数据库的读写速度相对较慢&#xff0c;如果每次请求都直接访问数据库&#xff0c;会降低系统的响应速度。为了提高系统的性能&…

进行模型测量这种量出来坡面的是平面面积还是真实面积?

斜面面积&#xff0c;不是表面积。 DasViewer是由大势智慧自主研发的免费的实景三维模型浏览器,采用多细节层次模型逐步自适应加载技术,让用户在极低的电脑配置下,也能流畅的加载较大规模实景三维模型,提供方便快捷的数据浏览操作。 #DasViewer##实景三维##三维重建##三维模型…

产品经理学习-产品运营《什么是SOP》

目录 什么是SOP 如何执行SOP 执行SOP的重点 什么是SOP SOP就是项目流程操作的说明书 日常工作中的例行操作&#xff1a; 例行操作是指&#xff0c;在每一天&#xff0c;针对每一个用户&#xff0c;在每个项目之中&#xff0c;都必须完成的操作&#xff0c;这些必须完成的操…

Java 的静态代理和动态代理

文章目录 1. 代理设计模式1.1 为什么需要代理设计模式1.2 代理设计模式1.2.1 概念1.2.2 名词解释1.2.3 代理开发的核⼼要素 2. 静态代理2.1 编码2.2 静态代理存在的问题 3. 动态代理3.1 Spring动态代理的概念3.2 动态代理细节分析3.3 动态代理的实现3.3.1 JDK 动态代理3.3.2 CG…

apachectl: line 79: 20233 Segmentation fault (core dumped) $HTTPD “$@“

[TOC](apachectl: line 79: 20233 Segmentation fault (core dumped) $HTTPD “$”) 1、问题描述 apache 启动报错 apachectl: line 79: 20233 Segmentation fault (core dumped) $HTTPD “$” 2、问题分析 参考链接: https://stackoverflow.com/questions/43726930/apache…

我的服务器为什么会被攻击?

时常的网站运行中&#xff0c;很多站长可能会遇到网站被黑客攻击的情况&#xff0c;其中同行之间恶性竞争&#xff0c;不正当的竞争关系&#xff0c;导致互联网关系越来越差&#xff0c;攻击的方式多种多样&#xff0c;网站遭受攻击的频次也越来越高。其次&#xff0c;就网络黑…

CUDA编程 - 用向量化访存优化 elementwise 核函数 - 学习记录

Cuda elementwise 一、简介1.1、ElementWise1.2、 float4 - 向量化访存 二、实践2.1、如何使用向量化访存2.2、Cuda elementwise - Add2.3、Cuda elementwise - Sigmoid2.3.1、简单的 Sigmoid 函数2.3.2、ElementWise Sigmoid float4&#xff08;向量化访存&#xff09; 2.4、C…

Facebook与社交创新:数字时代的社交构建者

在当今数字化时代&#xff0c;社交媒体已经成为人们日常生活中不可或缺的一部分。而在这个庞大的社交网络中&#xff0c;Facebook作为其中的巨头之一&#xff0c;不仅扮演着连接人们的桥梁&#xff0c;更是社交创新的领导者和推动者。本文将探讨Facebook在数字时代的社交构建中…

算法打卡day3|链表篇|Leetcode 203.移除链表元素、 707.设计链表 、 206.反转链表

链表基本概念 定义 链表是一种通过指针串联在一起的线性结构&#xff0c;每一个节点由两部分组成&#xff0c;一个是数据域一个是指针域&#xff08;存放指向下一个节点的指针&#xff09;&#xff0c;最后一个节点的指针域指向null&#xff08;空指针的意思&#xff09;。其…

leetcode.无重复字符的最长字串(刷题日记)

自从刷题开始之后&#xff0c;就突然有种感觉。 就是在刷完题之后当时是知道方法了&#xff0c;但是当再次遇到知道就又不会做了&#xff0c;就只好打开解题观摩大佬的代码&#xff0c;你别说&#xff0c;每次都感觉自己是s13。 所以我就想通过写博客来总结一下每次做完新的题…

十一、计算机视觉-膨胀操作

文章目录 前言一、什么是膨胀二、膨胀操作的实现1.引入库 三、膨胀的原理 前言 上节我们学习了腐蚀操作&#xff0c;本节我们讲一下膨胀操作&#xff0c;膨胀和腐蚀实际上是相反的操作。上节我们把云峰这2个字周围没用的像素去掉了&#xff0c;但是云峰这2个字也变细了&#x…

C#,弗洛伊德-瑞文斯特(Floyd-Rivest)算法与源代码

Robert W. Floyd 1 Floyd-Rivest 算法 Floyd-Rivest 算法是一种选择算法&#xff0c;用于在不同元素的数组中找到第k个最小元素。它类似于快速选择算法&#xff0c;但在实际运行中有更好的运行时间。 和 QuickSelect 一样&#xff0c;该算法基于分区的思想工作。对数组进行分…

SINAMICS V90 指导手册 第2章 2.2_系统配套表

V90 PN配套表一共有三张&#xff0c;分别是200V低惯量配套表、400V高惯量配套表和400V带直型连接器的配套表。其中200V电压等级低惯量伺服功率范围从0.05-2kW&#xff0c;额定扭矩从0.16-6.37Nm&#xff0c;电缆长度分别是3m、5m、10m、20m四种型号&#xff1b;400V电压等级带直…

《数据治理简易速速上手小册》第4章 数据安全与合规性(2024 最新版)

文章目录 4.1 数据安全的基本原则4.1.1 基础知识4.1.2 重点案例&#xff1a;在线零售商的数据加密4.1.3 拓展案例 1&#xff1a;医疗机构的访问控制4.1.4 拓展案例 2&#xff1a;金融服务提供商的数据备份和恢复 4.2 遵循数据合规性的策略4.2.1 基础知识4.2.2 重点案例&#xf…

如何在项目中考虑非功能需求

软件的非功能需求指的是除了软件的功能需求以外&#xff0c;软件需要满足的一些其他需求。常见的非功能需求包括&#xff1a; 性能需求&#xff1a;软件需要在特定的时间内完成特定的任务&#xff0c;例如响应时间、吞吐量等。可靠性需求&#xff1a;软件需要在各种环境下都能…

MySQL基础(二)

文章目录 MySQL基础&#xff08;二&#xff09;1. 数据库操作-DQL1.1 介绍1.2 语法1.3 基本查询1.4 条件查询1.5 聚合函数1.6 分组查询1.7 排序查询1.8 分页查询1.9 案例1.9.1 案例一1.9.2 案例二 2. 多表设计2.1 一对多2.1.1 表设计2.1.2 外键约束 2.2 一对一2.3 多对多2.4 案…

电机应用中的大功率电阻器?

在这篇文章中&#xff0c;我们将考虑电机应用中的电阻器。 交流、直流和专用电机用于广泛的应用。一些电机应用相对简单&#xff0c;唯一需要关注的是电机的启动和关闭。在这里&#xff0c;成本、简单性和可靠性是主要问题&#xff0c;而电机控制电阻器是常见的解决方案。 在…