本文提供了基於MySQL資料庫的應用系統遷移到GBase資料庫(GBase 8c)的快速指南。有關這兩個資料庫具體方面的詳細信息,讀者可以參考MySQL官方文件(https://dev.mysql.com/doc/)和GBase 8c用戶手冊。由於MySQL資料類型的基本映射以及遷移過程的其他方面涉及的內容比較廣泛,本文將不再詳細介紹。有興趣的話請留言,我們下次再討論。
在 MySQL 和 GBase 8c 中,CREATE DATABASE 語句用來建立資料庫。具體語法差異如下:
Operation | MySQL SQL Statement | GBase 8c SQL Statement |
---|---|---|
CREATE DATABASE | 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中,資料庫和模式是同義詞,資料庫可以互相引用。在 GBase 8c 中,資料庫和模式是不同的物件。單一資料庫可以包含多個模式,資料庫之間不能互相引用,但同一資料庫內的模式可以。
操作資料庫的各種SQL語句對比:
Operation | MySQL SQL Statement | GBase 8c SQL Statement | GBase 8c gsql Tool |
---|---|---|---|
View Databases | SHOW DATABASES; or SHOW DATABASE example; | SELECT * FROM pg_database; | l or l+ |
Switch Database | USE example; | Reconnect to switch, this function does not use SQL to switch | c example |
Delete Database | DROP DATABASE example; | DROP DATABASE example; | None |
MySQL 和 GBase 8c 都支援使用 CREATE TABLE 語句建立表格。具體語法差異如下:
Operation | MySQL SQL Statement | GBase 8c SQL Statement |
---|---|---|
Creating Tables using CREATE TABLE | CREATE TABLE `my_table` ( `id` int NOT NULL AUTO_INCREMENT COMMENT 'id', `user_id` int NOT NULL COMMENT 'User id', `name` varchar(50) DEFAULT NULL COMMENT 'Name', `address` varchar(50) DEFAULT NULL COMMENT 'Address', `password` varchar(20) DEFAULT 'passwd' COMMENT 'Password', 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 'User id'; COMMENT ON COLUMN "my_table"."name" IS 'Name'; COMMENT ON COLUMN "my_table"."address" IS 'Address'; COMMENT ON COLUMN "my_table"."passwd" IS 'Password'; |
Creating Tables using CREATE TABLE ... LIKE | create table `my_table_like` like `my_table`; | create table my_table_like (like my_table); |
Creating Tables using 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中,資料庫、表格和欄位名稱都用反引號(``)括起來進行標記。這在 GBase 8c 中是不允許的;相反,GBase 8c 使用雙引號或完全不使用任何標記。
在GBase 8c中,如果表名和欄位名稱沒有用雙引號括起來,那麼在建立表格時它們會自動轉換為小寫。如果需要指定大寫名稱,則必須將名稱以雙引號引起來。
(2) 儲存引擎相關變更
遷移到GBase 8c時,需要從MySQL語句中刪除與儲存引擎相關的子句,例如ENGINE和TYPE。
GBase 8c 不支援在表格層級設定字元集,因此移轉到 GBase 8c 時應刪除 MySQL 語句中的 CHARSET 子句。
(3) 建立類似表
GBase 8c 也支援 CREATE TABLE LIKEAS 語法,但 LIKE 子句的用法與 MySQL 不同。在GBase 8c中,LIKE子句必須用「()」括起來,而且它不會自動從原始表格列複製COMMENT註解。
MySQL和GBase 8c都支援視圖,基本建立方法類似。不過要注意的是,在 GBase 8c 中,預設規則下,不支援直接修改視圖中的資料。
Operation | MySQL SQL Statement | GBase 8c SQL Statement |
---|---|---|
Creating a View | CREATE VIEW v_my_table AS SELECT * FROM my_table; | CREATE VIEW v_my_table AS SELECT * FROM my_table; |
Modifying Data Through a View | INSERT INTO v_my_table(user_id, name, address) VALUES(2222, 'bbb', 'xxxx'); | Supported, but requires adjusting the default RULE |
Dropping a View | DROP VIEW v_my_table; | DROP VIEW v_my_table; |
放棄視圖
Operation | MySQL SQL Statement | GBase 8c SQL Statement |
---|---|---|
Creating Index |
CREATE INDEX i_user_id USING BTREE ON my_table (user_id); or CREATE INDEX i_user_id ON my_table (user_id) USING BTREE; |
CREATE INDEX i_user_id ON my_table USING BTREE (user_id); |
Dropping Index | 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) 子句之前或之後,如下所示:
...使用index_type table_name(col_name) ...
或
... table_name(col_name) 使用索引_類型 ...
但是,在GBase 8c中,USING index_type子句必須放在table_name(col_name)子句的中間:
... 表名 USING index_type (col_name) ...
(2) 在表格上刪除索引
在GBase 8c中,刪除索引物件時,不需要指定ON表子句。此條款應在遷移過程中刪除。
(3) 其他屬性
建立索引物件時,GBase 8c 不支援 FULLTEXT 和 SPATIAL 屬性。這些屬性需要在遷移過程中刪除。
以上是MySQL 到 GBase 遷移指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!