南大通用GBase 8c迁移指南之MySQL篇

本文章为基于MySQL数据库的应用系统向GBase 8c数据库迁移提供快速指导。两种数据库一些细节内容,读者可以参考MySQL官网资料( https://dev.mysql.com/doc/),以及GBase 8c用户手册来获取细节信息。迁移过程中涉及到的MySQL数据类型等基础映射,篇幅过长,本文不一一赘述。感兴趣的话打在评论区,下次讨论。
下文将介绍常用的数据库、数据表、函数、索引等基础对象相关SQL的迁移映射。
1、创建数据库
在MySQL和GBase 8c中,均使用 CREATE DATABASE 语句进行数据库的创建,具体语法区别如下:
操作 | MySQL SQL语句 | GBase 8c SQL语句 |
创建数据库 | CREATE DATABASE example CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; | CREATE DATABASE example OWNER gbase ENCODING ‘UTF8’ LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8'; |
在进行创建数据库SQL语句迁移时需要注意的是:
(1)在MySQL 和GBase 8c中,创建数据库时均可以指定该数据库的字符集和校验规则。
区别于MySQL,在GBase 8c中可使用ENCODING 关键字指定数据库的字符集,使用LC_COLLATE及LC_CTYPE关键字指定数据库的校验规则:
- LC_COLLATE:该参数的使用会影响到对字符串的排序顺序(如使用ORDER BY执行,以及在文本列上使用索引的顺序)
- LC_CTYPE:该参数的使用会影响到字符的分类,如大写、小写和数字。
(2)在 GBase 8c中创建数据库时,还可以指定特有的额外属性,例如常用属性如下:
- OWNER :该参数指定了数据库的所有者。默认缺省时,该数据库的所有者为当前用户。
- CONNECTION LIMIT:数据库可以接受的并发连接数。系统管理员不受此参数限制。
(3)库结构
在MySQL中,database 与schema 属于同义概念,database与database之间能够关联访问。而在 GBase 8c 中,database 与schema 属于不同的数据库对象,一个database 下可以包含多个schema,并且database与database之间不能关联访问,schema与schema之间可以关联访问。
2、使用数据库
操作数据库的各类SQL语句比较:
操作 | MySQL SQL语句 | GBase 8c SQL语句 | GBase 8c gsql工具 |
查看数据库 | SHOW DATABASES; 或 SHOW DATABASE example; | SELECT * FROM pg_database; | \l 或\l+ |
切换数据库 | USE example; | 重新登录切换,该功能不使用SQL切换 | \c example |
删除数据库 | DROP DATABASE example; | DROP DATABASE example; | 无 |
3、创建数据表
在MySQL和GBase 8c中,均可以使用 CREATE TABLE 语句进行数据库的创建,具体语法区别如下:
操作 | MySQL SQL语句 | GBase 8c SQL语句 |
创建数据表 create table方式 | CREATE TABLE `my_table` ( `id` int NOT NULL AUTO_INCREMENT COMMENT 'id', `user_id` int NOT NULL COMMENT '用户id', `name` varchar(50) DEFAULT NULL COMMENT '用户名', `address` varchar(50) DEFAULT NULL COMMENT '地址', `password` varchar(20) DEFAULT 'passwd' COMMENT '密码', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; | CREATE TABLE "my_table" ( "id" SERIAL NOT NULL, "user_id" int NOT NULL, "name" varchar(50), "address" varchar(50), "passwd" varchar(20) DEFAULT 'password', CONSTRAINT "my_table_pkey" PRIMARY KEY ("id") );
COMMENT ON COLUMN "my_table"."id" IS 'id'; COMMENT ON COLUMN "my_table"."user_id" IS '用户id'; COMMENT ON COLUMN "my_table"."name" IS '用户名'; COMMENT ON COLUMN "my_table"."address" IS '地址'; COMMENT ON COLUMN "my_table"."passwd" IS '密码'; |
创建数据表 create table ...…like方式 | create table `my_table_like` like `my_table`; | create table my_table_like (like my_table); |
创建数据表 create table …… as方式 | create table `my_table_as` as select * from `my_table` ; | create table my_table_as as select * from my_table ; |
注意在进行创建数据表SQL语句迁移时,需要以下语法的更改:
(1)命名规则和大小写
在MySQL中,有关数据库、表名和字段的命名,会采用“` `”符号(即键盘上Esc键下面的印有~符号的键)进行标记。而这在GBase 8c中是不允许的,GBase 8c中要么使用双引号,要么直接不加任何标记。
在GBase 8c中,如果表名,字段名不加双引号,则建表的时候都会被默认转换为小写,如果需要在命名中指定为大写,则必须在该命名前后使用双引号进行标识。
(2)存储引擎相关
- 向GBase 8c迁移时,需要移除MySQL语句中存储元素相关子句,例如 ENGINE 和TYPE。
- 在GBase 8c中,不支持表级别设置字符集,向GBase 8c迁移时,需要移除MySQL语句中CHARSET 相关子句。
(3)CREATE TABLE LIKE\AS
GBase 8c中也支持CREATE TABLE LIKE\AS 语法, 但在LIKE 语句的使用上与MySQL 有所不同,在GBase 8c中,LIKE 子句的前后需要使用“()”小括号进行标识,并且不会自动复制原表列上的COMMENT 注解。
4、视图相关语句
MySQL与GBase 8c 均支持视图,基本创建方式相同,但需要注意的是,在 GBase 8c 中, 默认rule下,不支持直接在视图上修改数据:
操作 | MySQL SQL语句 | GBase 8c SQL语句 |
创建视图 | CREATE VIEW v_my_table AS SELECT * FROM my_table; | CREATE VIEW v_my_table AS SELECT * FROM my_table; |
通过视图修改数据 | INSERT INTO v_my_table(user_id,name,address) VALUES(2222,'bbb','xxxx'); | 支持该SQL 语法,但需要调整默认RULE |
删除视图 | DROP VIEW v_my_table ; | DROP VIEW v_my_table ; |
5、索引相关语句
MySQL与GBase 8c 均支持索引功能,但在创建与删除操作中,有细微的差异,基本语法区别如下:
操作 | MySQL SQL语句 | GBase 8c SQL语句 |
创建索引 | CREATE INDEX i_user_id USING BTREE ON my_table (user_id); | CREATE INDEX i_user_id ON my_table USING BTREE (user_id); |
删除索引 | DROP INDEX i_user_id ON my_table; | DROP INDEX i_user_id; |
在进行创建、删除索引语句迁移时需要注意的是:
(1)USING index_type 语法的位置
在MySQL中,USING index_type子句可以在 table_name(col_name) 两个子句的之前或之后的位置。形如:
... USING index_type table_name(col_name) ...
或
... table_name(col_name) USING index_type ...
而在GBase 8c 中,USING index_type子句需要 table_name(col_name) 子句的中间位置。
... table_name USING index_type (col_name) ...
(2)DROP INDEX ON table
在GBase 8c 中删除索引对象时,不需要指定 ON table 子句,迁移时需要进行移除。
(3)其他属性
在GBase 8c 中创建索引对象时,不支持FULLTEXT 和 SPATIAL属性,迁移时需要进行移除。
评论


热门帖子
- 12023-05-09浏览数:16026
- 22019-04-26浏览数:10150
- 32020-05-11浏览数:10009
- 42023-07-04浏览数:9363
- 52023-09-25浏览数:8974