Mycat2 Sql兼容性 DDL

2021-09-09 13:53 更新

DDL兼容性

Mycat暫時(shí)只支持新增/刪除 庫和表

建庫

create database 會(huì)在prototype節(jié)點(diǎn)建立對(duì)應(yīng)的物理庫,所以客戶端能馬上執(zhí)行show語句查詢物理庫的信息,但是在其他存儲(chǔ)節(jié)點(diǎn)并不馬上執(zhí)行,直到物理表用到該物理庫的時(shí)候才建立。

create database IF NOT EXISTS db1

create table 在已經(jīng)存在表的情況下,會(huì)覆蓋已經(jīng)存在的表的數(shù)據(jù),并根據(jù)生成的存儲(chǔ)節(jié)點(diǎn)信息向存儲(chǔ)節(jié)點(diǎn)執(zhí)行建表操作。

刪庫

drop database 會(huì)在prototype節(jié)點(diǎn)刪除對(duì)應(yīng)的物理庫,但是對(duì)于全局表,分片表的存儲(chǔ)節(jié)點(diǎn)不會(huì)進(jìn)行操作

drop database IF  EXISTS db1

全局表

CREATE TABLE db1.`customer` (
    `id` bigint NOT NULL AUTO_INCREMENT,
    `firstname` varchar(100) DEFAULT NULL,
    `lastname` varchar(100) DEFAULT NULL,
    `modified_date` date DEFAULT NULL,
    `created_date` date DEFAULT NULL,
    PRIMARY KEY (`id`)
) BROADCAST ENGINE = InnoDB CHARSET = utf8

BROADCAST是關(guān)鍵字 Mycat會(huì)查找配置的名字以c為首字符串的集群納入該表的存儲(chǔ)節(jié)點(diǎn),并把sql添加if not existed關(guān)鍵字執(zhí)行

單表,普通表,讀寫分離表

CREATE TABLE db1.`customer` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `firstname` varchar(100) DEFAULT NULL,
  `lastname` varchar(100) DEFAULT NULL,
  `modified_date` date  DEFAULT NULL,
  `created_date` date DEFAULT NULL
 ,    PRIMARY KEY (`id`)) ENGINE=InnoDB  DEFAULT CHARSET=utf8

Mycat會(huì)在prototype中執(zhí)行此sql,把添加prototype為單表的存儲(chǔ)節(jié)點(diǎn)

分片表

CREATE TABLE db1.`customer` (
    `id` bigint NOT NULL AUTO_INCREMENT,
    `firstname` varchar(100) DEFAULT NULL,
    `lastname` varchar(100) DEFAULT NULL,
    `modified_date` date DEFAULT NULL,
    `created_date` date DEFAULT NULL,
    PRIMARY KEY (`id`)
) ENGINE = InnoDB CHARSET = utf8
DBPARTITION BY hash(id) DBPARTITIONS 2
TBPARTITION BY hash(id) TBPARTITIONS 2

Mycat會(huì)在prototype中執(zhí)行此sql,然后尋找當(dāng)前名字首字母為c的集群納入存儲(chǔ)節(jié)點(diǎn)根據(jù)分片規(guī)則開始建庫建表,需要注意的是prototype不會(huì)存儲(chǔ)任何數(shù)據(jù),僅僅在存儲(chǔ)節(jié)點(diǎn)中進(jìn)行存儲(chǔ). 建表語句支持PolarDB-X CREATE TABLE,但暫時(shí)不支持全局二級(jí)索引和影子庫. 上述的配置僅僅描述,自動(dòng)化DDL是如何生成配置的.如果涉及到自定義分片算法,自定義數(shù)據(jù)分布,請(qǐng)自己更改配置文件.

ALTER TABLE 語句(執(zhí)行過后檢查mycat日志是否有異常)

添加字段

`ALTER TABLE db1.`travelrecord2```\n`` ADD COLUMN user_id varchar(30);`

修改字段

`ALTER TABLE db1.`travelrecord2```\n`` MODIFY COLUMN user_id varchar(30);`

添加本地索引

`ALTER TABLE db1.`travelrecord2```\n`` ADD INDEX user_id_idx (user_id);`

本地索引更名

ALTER TABLE db1.`travelrecord2```\n`` RENAME INDEX `user_id_idx` TO `iuser_id_idx_new`;`

刪除本地索引

ALTER TABLE db1.`travelrecord2```\n`` DROP INDEX `iuser_id_idx_new`;`

刪除字段

ALTER TABLE db1.`travelrecord2```\n`` DROP COLUMN user_id;`

本地索引語句

創(chuàng)建本地索引

CREATE INDEX testIdx ON db1.`travelrecord2` (id);`

刪除索引

DROP INDEX testIdx ON db1.`travelrecord2``

DROP TABLE語句

刪除邏輯表

drop ?TABLE db1.`travelrecord2`

僅僅刪除原型庫的物理表,不會(huì)刪除存儲(chǔ)節(jié)點(diǎn)的物理表

RENAME TABLE語句

RENAME ?TABLE travelrecord2 to travelrecord3`

僅僅更改原型庫的物理表與配置中的表名,不會(huì)更改存儲(chǔ)節(jié)點(diǎn)的表名. 在單表的情況下,會(huì)更新存儲(chǔ)節(jié)點(diǎn)的表名,使單表使用方式一致(如果不是這樣,則會(huì)使用舊的表名,導(dǎo)致路由錯(cuò)誤)

TRUNCATE語句

TRUNCATE ?TABLE db1.`travelrecord2``

CHECK TABLE語句

CHECK TABLE ?db1.travelrecord2;`

掃描邏輯表中對(duì)應(yīng)的所有存儲(chǔ)節(jié)點(diǎn)的表字段信息是否相同,如果不相同則會(huì)顯示錯(cuò)誤的節(jié)點(diǎn)信息,需要人工修正

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)