本文提供了基于MySQL数据库的应用系统迁移到GBase数据库(GBase 8c)的快速指南。有关这两个数据库具体方面的详细信息,读者可以参考MySQL官方文档(https://dev.mysql.com/doc/)和GBase 8c用户手册。由于MySQL数据类型的基本映射以及迁移过程的其他方面涉及的内容比较广泛,本文将不再详细介绍。有兴趣的话请留言,我们下次再讨论。
在MySQL和GBase 8c中,CREATE DATABASE语句用于创建数据库。具体语法差异如下:
手术 | MySQL SQL语句 | GBase 8c SQL 语句 |
---|---|---|
创建数据库 | 创建数据库示例字符集utf8mb4 COLLATE utf8mb4_unicode_ci; | 创建数据库示例 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中,数据库和模式是同义词,数据库可以相互引用。在 GBase 8c 中,数据库和模式是不同的对象。单个数据库可以包含多个架构,数据库之间不能互相引用,但同一数据库内的架构可以。
操作数据库的各种SQL语句对比:
手术 | MySQL SQL语句 | GBase 8c SQL 语句 | GBase 8c gsql 工具 |
---|---|---|---|
查看数据库 | 显示数据库;或显示数据库示例; | 从 pg_database 选择*; | \l 或 \l |
切换数据库 | 使用示例; | 重连切换,本函数不使用SQL进行切换 | \c 示例 |
删除数据库 | 删除数据库示例; | 删除数据库示例; | 没有任何 |
MySQL和GBase 8c都支持使用CREATE TABLE语句创建表。具体语法差异如下:
手术 | MySQL SQL语句 | GBase 8c SQL 语句 |
---|---|---|
使用 CREATE TABLE 创建表 | CREATE TABLE `my_table` ( `id` int NOT NULL AUTO_INCRMENT COMMENT 'id', `user_id` int NOT NULL COMMENT '用户 id', `name` varchar(50) DEFAULT NULL COMMENT '名称', `地址` varchar(50) DEFAULT NULL COMMENT '地址', `密码` varchar(20) DEFAULT 'passwd' COMMENT '密码', 主键 (`id `) ) 引擎=InnoDB 默认字符集=utf8; |
创建表“my_table”( “id”SERIAL NOT NULL, “user_id”int NOT NULL, “名称”varchar(50), “地址”varchar(50) , "passwd" varchar(20) 默认 '密码', 约束 "my_table_pkey" 主键 ("id") ); 对列 "my_table"."id 的注释" IS 'id'; COMMENT ON COLUMN "my_table"."user_id" IS 'User id'; COMMENT ON COLUMN "my_table"."name" IS 'Name'; COMMENT ON COLUMN " my_table"."address" IS '地址'; 列“my_table”."passwd" 的注释是'密码'; |
使用 CREATE TABLE 创建表 ... LIKE | 创建像`my_table`一样的表`my_table_like`; | 创建表my_table_like(类似my_table); |
使用 CREATE TABLE ... AS | 创建表创建表 `my_table_as` as select * from `my_table`; | 创建表 my_table_as as select * from my_table ; |
迁移建表SQL语句时,需要进行以下语法更改:
(1)命名规则及大小写
在MySQL中,数据库、表和字段名称都用反引号(``)括起来进行标记。这在 GBase 8c 中是不允许的;相反,GBase 8c 使用双引号或根本不使用标记。
在GBase 8c中,如果表名和字段名没有用双引号括起来,则在创建表时会自动转换为小写。如果需要指定大写名称,则必须将名称用双引号引起来。
(2)存储引擎相关变更
迁移到GBase 8c时,需要从MySQL语句中删除ENGINE和TYPE等存储引擎相关子句。
GBase 8c不支持在表级别设置字符集,因此迁移到GBase 8c时应删除MySQL语句中的CHARSET子句。
(3) 创建类似\AS的表
GBase 8c 也支持 CREATE TABLE LIKE\AS 语法,但 LIKE 子句的用法与 MySQL 不同。在GBase 8c中,LIKE子句必须用“()”括起来,并且它不会自动从原始表列中复制COMMENT注释。
MySQL和GBase 8c都支持视图,基本创建方法类似。不过需要注意的是,在GBase 8c中,默认规则下,不支持直接修改视图中的数据。
手术 | MySQL SQL语句 | GBase 8c SQL 语句 |
---|---|---|
创建视图 | 创建视图 v_my_table AS SELECT * FROM my_table; | 创建视图 v_my_table AS SELECT * FROM my_table; |
通过视图修改数据 | 插入 v_my_table(user_id, 姓名, 地址) VALUES(2222, 'bbb', 'xxxx'); | 支持,但需要调整默认RULE |
删除视图 | 删除视图 v_my_table; | 删除视图 v_my_table; |
MySQL和GBase 8c都支持索引功能,但在创建和删除操作上略有不同。基本语法差异如下:
手术 | MySQL SQL语句 | GBase 8c SQL 语句 |
---|---|---|
创建索引 |
在 my_table (user_id) 上使用 BTREE 创建索引 i_user_id; 或 使用BTREE在my_table(user_id)上创建索引i_user_id; |
使用 BTREE (user_id) 在 my_table 上创建索引 i_user_id; |
指数下降 | 在 my_table 上删除索引 i_user_id; | 删除索引 i_user_id; |
迁移索引创建和删除语句注意点:
(1) USING index_type的位置
在 MySQL 中,USING index_type 子句可以出现在 table_name(col_name) 子句之前或之后,如下所示:
...使用索引类型表名(col_name)...
或者
... table_name(col_name) USING index_type ...
但是,在GBase 8c中,USING index_type子句必须放在table_name(col_name)子句的中间:
... 表名 USING index_type (col_name) ...
(2) 在表上删除索引
在GBase 8c中,删除索引对象时,不需要指定ON表子句。应在迁移过程中删除此子句。
(3) 其他属性
创建索引对象时,GBase 8c 不支持 FULLTEXT 和 SPATIAL 属性。这些属性需要在迁移过程中删除。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3