1、分区表
mysql和pg中的分区表使用基本类似,同样都支持hash、range、list三种基本的分区类型。两者的区别在于:
mysql:不支持指定默认分区,最多只支持2级分区,不支持表达式分区。且需要注意,mysql当前除InnoDB或NDB之外的任何存储引擎都不支持分区表这一功能,如MyISAM。

pg:pg中可以通过default分区名的方式指定默认分区,并且支持多级别的分区,且支持不同种类分区的任意组。pg还支持表达式分区,不过必须得是immutable类型表达式。

除此之外主要注意的是,无论是pg还是mysql都必须pk、uk中包含分区键,因为两者目前都不支持全局索引。

2、语法
offset/limit:
mysql和pg中都支持offset/limit的分页语法,但是两者有一点不同:
–mysql

mysql> select * from t1 limit 2,2;
+------+------+
| id   | ino  |
+------+------+
|    3 | c    |
|    4 | d    |
+------+------+
2 rows in set (0.00 sec)

–pg
pg中不支持上面这种mysql的写法

bill=# select * from tbl limit 2,2;
ERROR:  LIMIT #,# syntax is not supported
LINE 1: select * from tbl limit 2,2;^
HINT:  Use separate LIMIT and OFFSET clauses.bill=# select * from tbl limit 2 offset 2;id | c1 |  c2  | c3  |  c4  |   c5    |  c6   | c7 |   c8   |  c9   |  c10
----+----+------+-----+------+---------+-------+----+--------+-------+-------3 | 92 | 8207 | 167 | 3031 |  363025 | 66793 | 31 | 108702 |  3358 | 462844 | 19 | 6982 | 834 | 4278 | 6929072 | 83949 | 80 |   8206 | 25265 | 59691
(2 rows)

类型转换:
mysql和pg中都支持cast(expression as target_type)的方法去进行类型转换,但是pg中除此之外还支持value::new_type的方法来进行类型转换。

bill=# select cast(id as int8) from t1 limit 1;id
----1
(1 row)bill=# select id::int8 from t1 limit 1;id
----1
(1 row)

upsert/replace:
pg中的upsert作用是当插入数据时:如果不存在则insert,存在则update。
语法为:

INSERT INTO table_name [ AS alias ] [ ( column_name [, ...] ) ][ ON CONFLICT [ conflict_target ] conflict_action ]and conflict_action is one of:DO NOTHINGDO UPDATE SET { column_name = { expression | DEFAULT } |( column_name [, ...] ) = [ ROW ] ( { expression | DEFAULT } [, ...] ) |( column_name [, ...] ) = ( sub-SELECT )} [, ...][ WHERE condition ]

mysql中使用replace来实现类似的功能。
语法为:

REPLACE [LOW_PRIORITY | DELAYED][INTO] tbl_name[PARTITION (partition_name [, partition_name] ...)][(col_name [, col_name] ...)]{ {VALUES | VALUE} (value_list) [, (value_list)] ...|VALUES row_constructor_list}

例子:

mysql> CREATE TABLE test (->   id INT UNSIGNED NOT NULL AUTO_INCREMENT,->   data VARCHAR(64) DEFAULT NULL,->   ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,->   PRIMARY KEY (id)-> );
Query OK, 0 rows affected (0.02 sec)mysql> REPLACE INTO test VALUES (1, 'Old', '2014-08-20 18:47:00');
Query OK, 1 row affected (0.00 sec)mysql> SELECT * FROM test;
+----+------+---------------------+
| id | data | ts                  |
+----+------+---------------------+
|  1 | Old  | 2014-08-20 18:47:00 |
+----+------+---------------------+
1 row in set (0.00 sec)mysql> REPLACE INTO test VALUES (1, 'New', '2014-08-20 18:47:42');
Query OK, 2 rows affected (0.00 sec)mysql> SELECT * FROM test;
+----+------+---------------------+
| id | data | ts                  |
+----+------+---------------------+
|  1 | New  | 2014-08-20 18:47:42 |
+----+------+---------------------+
1 row in set (0.00 sec)

load data:
mysql中使用load命令来实现加载数据的功能。
语法为:

LOAD DATA[LOW_PRIORITY | CONCURRENT] [LOCAL]INFILE 'file_name'[REPLACE | IGNORE]INTO TABLE tbl_name[PARTITION (partition_name [, partition_name] ...)][CHARACTER SET charset_name][{FIELDS | COLUMNS}[TERMINATED BY 'string'][[OPTIONALLY] ENCLOSED BY 'char'][ESCAPED BY 'char']][LINES[STARTING BY 'string'][TERMINATED BY 'string']][IGNORE number {LINES | ROWS}][(col_name_or_user_var[, col_name_or_user_var] ...)][SET col_name={expr | DEFAULT},[, col_name={expr | DEFAULT}] ...]

在pg中我们使用copy命令来实现同样的功能,copy命令分为服务端copy和客户端的copy协议。
语法为:

COPY table_name [ ( column_name [, ...] ) ]FROM { 'filename' | PROGRAM 'command' | STDIN }[ [ WITH ] ( option [, ...] ) ][ WHERE condition ]COPY { table_name [ ( column_name [, ...] ) ] | ( query ) }TO { 'filename' | PROGRAM 'command' | STDOUT }[ [ WITH ] ( option [, ...] ) ]

3、索引
mysql中索引类型:
btree索引;
invert索引,即倒排索引,常用来实现多值类型、json类型、全文检索等的索引查询;
表达式索引,mysql中的表达式索引不支持spatial和fulltext类型。
空间索引,mysql中不支持空间索引,其实现空间索引的方式是将空间对象转换成geohash编码,然后使用btree索引来实现。

pg中的索引类型:
支持多种索引类型:btree、hash、gin、gist、sp-gist、bloom、rum、brin;
还支持exclude索引、表达式索引、partial索引(分区索引);
支持空间索引,是真正的基于rtree的空间索引类型;
且pg开发了多种索引接口,用户可以自定义新的索引。

4、其它
约束:
mysql和pg一样都支持主键约束、外键约束、唯一约束、not null约束等。两者在约束方面的区别在于:
mysql:check约束不是强制的,即可以创建check约束,但是违反该约束的数据仍然不会报错;exclude排它约束mysql中不支持。

pg:pg中的check约束是强制的,如果数据不符合check约束则无法插入。并且pg中还支持exclude约束。

use/desc:
mysql中use database_name和desc table_name的快捷命令在pg中也有很方便的命令支持,pg中可以使用:\c database_name和\d table_name来代替。

除此之外,pg和mysql虽然都支持四种事务隔离级别,但是在pg中read uncommitted的隔离级别是不可用的,这也确保了在pg中不会出现脏读的现象。

另外在mysql中是存在隐式提交的,即在事务中的DDL语句会被自动提交,而在pg中不会。

例如:
–mysql
可以发现事务回滚后t2表仍然存在,因为已经自动提交了。

mysql> begin;
Query OK, 0 rows affected (0.00 sec)mysql> create table t2(id int);
Query OK, 0 rows affected (0.00 sec)mysql> insert into t2 values(222);
Query OK, 1 row affected (0.00 sec)mysql> rollback;
Query OK, 0 rows affected (0.00 sec)mysql> select * from t2;
+------+
| id   |
+------+
|  222 |
+------+
1 row in set (0.00 sec)

–pg:
而在pg中却没有,可以被rollback

bill=# create table tt2(id int);
CREATE TABLE
bill=# insert into tt2 values(222);
INSERT 0 1
bill=# rollback ;
ROLLBACK
bill=# select * from t2;
ERROR:  relation "t2" does not exist

PostgreSQL和mysql常用语法比较相关推荐

  1. Mysql常用语法总结

    Mysql常用语法总结如下: #连接mysql数据库(Dos下面) mysql -u root -p 123 #创建数据库 create database myschool; #创建表 drop ta ...

  2. MYSQL常用语法命令,MySQL中delete,drop和alter分别是用来删除什么的?有什么区别?删除了以后可以恢复吗?

    1.Alter.Delete.Drop相关语法 a.Alter 删除,添加或重新定义列 删除列:alter table tablename drop columnname 增加列:alter tabl ...

  3. PostgreSQL 与 MySQL 常用命令对照

    有很多 MySQL 的用户在使用 PostgreSQL 时,对于 PostgreSQL 客户端(psql)的常用命令不是很熟悉,有时甚至会感到困惑,在此罗列 MySQL 客户端 mysql 与 Pos ...

  4. MySQL常用语法记录

    0.说明 记录MySQL使用到的常用语法. 1.MySQLDISTINCT唯一 2.MySQLLIMIT限制 3.MySQL ORDER排序升序 4.MySQL DESC降序 5.MySQL WHER ...

  5. 【ChatGPT】输出MySQL常用语法汇总

    以下是MySQL常用的语法汇总: 创建数据库 CREATE DATABASE database_name; 删除数据库 DROP DATABASE database_name; 创建表 CREATE ...

  6. MYSQL 常用语法学习汇总

    数据库的概念 DB:数据库,保存一组有组织的数据的容器(database) DBMS:数据库管理系统,又称为数据库软件(产品),用于管理DB中的数据(Database Management Syste ...

  7. 一文读懂MySQL常用语法

    MySQL查询语句链接地址 MySQL是什么? 成为MySQL大神的基础~ 数据类型 数值:整数,浮点数(小数) 日期:年,年月日,时分秒,年月日时分秒 字符串:文本类型字符串,二进制类型字符串 整形 ...

  8. 收藏|MySQL常用语法小结

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | http://8rr.co/uCbS 一.基础 ...

  9. 手写MySQL常用语法

    文章目录 01 准备工作 02 了解你的数据库 03 检索数据 04 对数据排序 05 使用where进行数据筛选 06 组合where子句 07 使用通配符 08 正则表达式 09 计算字段 10 ...

  10. MySQL 常用语法 之 DISTINCT

    DISTINCT作用很简单就是去除重复行的数据. 具体看下面列子 表A数据[两条 nami 99] nameA   scoreA robin    98 nami    99 saber  98 lu ...

最新文章

  1. Martin Fowler对全世界程序员的建议
  2. 文件中数组的最大值及其对应的最小下标
  3. 用Everything搜索指定的路径
  4. 好程序员web前端分享javascript枚举算法
  5. 问:Linux下Chrome标题栏中文乱码
  6. 介绍一个能够对日志文件进行自定义高亮的 VS Code 扩展
  7. Flask服务部署与简单内网穿透
  8. TSQLDBServerHttpApi使用工作线程池
  9. 魅蓝x android 7,魅蓝x2什么时候发布 魅蓝x2发布时间最新消息
  10. ie6识别important问题
  11. 在此计算机中仅有部分vs2010产品升级到sp1,解决安装Microsoft Visual Studio 2010 Service Pack 1 ,系统无法找到指定的对象
  12. 愿天下有情人都是失散多年的兄妹(25分)
  13. Python读取文本内容
  14. Vue制作图片翻面效果
  15. 一、C++面向对象高级编程(上) (侯捷)
  16. 被火龙强奸了100次~~~怨念!
  17. 如何下载GitHub网站上的代码的方法(未完,更新中。。。)
  18. 计算机毕业设计springboot教学事务流转与管理平台k0446源码+系统+程序+lw文档+部署
  19. Shell 脚本中 set -ex 命令的作用
  20. open_nsfw: 雅虎基于Caffe的成人图片识别模型

热门文章

  1. 在crontab中找不到sqlplus命令
  2. 什么是Robtos.txt 协议?
  3. matlab第六章课后答案,第六章习题及答案
  4. 专业PDF转换Word/PPT/Excel工具:AnyBizSoft PDF Converter绿色便携版
  5. 中国生物医药产业集群产业战略布局及运营管理模式分析报告2021-2027年
  6. 编译原理-第一章:引论
  7. SLAM机器人开发(一)系统框图
  8. python交通流预测算法_基于遗传算法优化LSTM神经网络的交通流预测方法与流程...
  9. android zlib 和zip,gzip zip 和zlib
  10. Global Mapper居然也有手机版(附安装包下载)