MySQL用户入门Greenplum
说明
本文描述问题及解决方法同样适用于 腾讯云Snova云数仓。
背景
Greenplum(以下简称GP)是基于PostgreSQL的MPP数据库。在使用方式和语法上和PostgreSQL基本一致,而PostgreSQL与MySQL在使用上还是有一些差异。本文在操作层面列举了一些最基本的差异,让MySQL用户能够快速上手GP。
基本概念
数据库(Database)和模式(Schema)
MySQL : MySQL中模式是数据库的别名,这二者没什么区别,创建一个模式就是创建一个数据库。
GP : 在GP中模式属于数据库内的一个概念,用于在数据库中组织对象,起到类似于命名空间的作用,这样用户可以在一个数据库下创建多个模式,这些不同的模式可以有不同的访问权限,并且不同模式下的表名是可以重复。
说明:如果要进行类比的话,GP中的模式更像MySQL中的数据库,在MySQL中用户可以访问同一个实例中的不同数据库,但是在GP中一个连接只能访问一个数据库,但是可以同时访问多个模式,比如join多个模式中的表。
基本操作
操作 |
MySQL |
GP |
---|---|---|
切换数据库 |
USE {dbname} |
c {dbname} |
查看所有数据库 |
SHOW DATABASE |
l |
切换Schema |
无 |
SET search_path={schemaname} |
查看所有表 |
SHOW TABLES |
d |
查看表结构 |
DESC {tablename} |
d+ {tablename} |
按列展示结果 |
G(跟在SQL语句后) |
x(单独运行,再次运行切回按行) |
查看运行时间 |
默认展示 |
timing |
查看客户端连接 |
SHOW PROCESSLIST |
SELECT * FROM pg_stat_activity |
客户端工具 |
mysql -h{hostname} -P{port} -u{user} -p{pwd} {dbname} |
PGPASSWORD={pwd} psql -h{hostname} -p{port} -U{user} -d {dbname} |
基本语法
自增长字段
自增长字段是数据库比较常见的特性,也是MySQL与GP使用习惯差距较大的地方。
MySQL
CREATE TABLE `mysql_test` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(32) NOT NULL,
PRIMARY KEY(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
GP
GP中的自增长需要使用到序列Sequence
有2种创建方式
CREATE TABLE gp_test (
id SERIAL NOT NULL,
name varchar(32) NOT NULL ,
PRIMARY KEY(id)
)
CREATE SEQUENCE users_id_seq INCREMENT BY 2 MINVALUE 10000 MAXVALUE 99999;
CREATE TABLE gp_test (
id bigint NOT NULL DEFAULT NEXTVAL ('users_id_seq'),
name varchar(32) NOT NULL ,
PRIMARY KEY(id)
)
以上2种方式本质上都一样,只不过第一种方式自动创建了一个Sequence,并且与表中字段id绑定到一起。
注释
MySQL中表和字段的注释通常都写在建表语句中,GP则需要单独的语句。
MySQL
CREATE TABLE `mysql_test` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增长主键',
`name` varchar(32) NOT NULL COMMENT '姓名',
PRIMARY KEY(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='员工信息表'
GP
CREATE TABLE gp_test (
id SERIAL,
name varchar(32) ,
PRIMARY KEY(id)
)
COMMENT ON COLUMN gp_test.id is '自增长主键';
COMMENT ON COLUMN gp_test.name is '姓名';
COMMENT ON table gp_test is '员工信息表';
字段类型
字段类型在各个数据库间都会有不同的差异,以下列举MySQL与GP字段类型的一些主要差异
MySQL |
GP |
---|---|
TINYINT |
SMALLINT |
MEDIUMINT |
INTEGER |
TINYINT UNSIGNED |
SMALLINT check({columnname} >= 0) |
FLOAT |
REAL |
DATETIME |
TIMESTAMP |
LONGTEXT |
TEXT |
MEDIUMTEXT |
TEXT |
BLOB |
BYTEA |
- 【AlphaGo Zero 核心技术-深度强化学习教程代码实战03】编写通用的格子世界环境类
- 冒泡排序简单操作模版及实例分析
- COGS 1299. bplusa【听说比a+b还要水的大水题???】
- python学习笔记之运算符
- 锐捷网络NBR部分路由器cookie欺骗权限绕过
- 手写快排模版
- COGS 68. [NOIP2005] 采药【01背包复习】
- UESTC 30 &&HDU 2544最短路【Floyd求解裸题】
- 我的第一个网页制作:Hello World!
- UESTC 1584 Washi与Sonochi的约定【树状数组裸题+排序】
- Hyperledger - 超级账本项目:简介,安装,案例
- 我的第三个网页制作:b、i、s、u、sub、sup标签的使用
- 【AlphaGo Zero 核心技术-深度强化学习教程代码实战04】Agent类和SARSA算法实现
- 我的第二个网页制作:p,hn,br标签的使用
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- 论文笔记&翻译——Enhanced LSTM for Natural Language Inference(ESIM)
- Day 5:用两个栈实现队列
- C++核心准则T.42:使用模板别名简化记法并隐藏实现细节
- Python实战——ESIM 模型搭建(keras版)
- MapReduce工作笔记——Job调度参数设置
- 矩阵操作试题(C++/Python)——矩阵元素逆时针旋转90度(升级版)
- Macdown中[toc]无法生成目录解决方法
- Linux实用技巧——mkdir创建多级新目录
- C++核心准则T.43: 定义别名时,using比typedef更好
- C++核心准则T.44:使用函数模板推断类模板参数类型(如果可能)
- python函数——浅拷贝copy()以及深拷贝deepcopy()
- 数据结构算法操作试题(C++/Python)——两数之和
- C++核心准则T.46:要求模板参数最少是正规或半正规的
- python函数——List获取索引(多相同值解决方法)
- C++核心准则T.47:避免使用通用名称的高度不受限模板