Mycat2 Sql兼容性 DDL
DDL兼容性
Mycat暂时只支持新增/删除 库和表
建库
create database
会在prototype
节点建立对应的物理库,所以客户端能马上执行show
语句查询物理库的信息,但是在其他存储节点并不马上执行,直到物理表用到该物理库的时候才建立。
create database IF NOT EXISTS db1
create table
在已经存在表的情况下,会覆盖已经存在的表的数据,并根据生成的存储节点信息向存储节点执行建表操作。
删库
drop database
会在prototype
节点删除对应的物理库,但是对于全局表,分片表的存储节点不会进行操作
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
是关键字
Mycat会查找配置的名字以c
为首字符串的集群纳入该表的存储节点,并把sql
添加if not existed
关键字执行
单表,普通表,读写分离表
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会在prototype
中执行此sql
,把添加prototype
为单表的存储节点
分片表
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会在prototype
中执行此sql
,然后寻找当前名字首字母为c
的集群纳入存储节点根据分片规则开始建库建表,需要注意的是prototype
不会存储任何数据,仅仅在存储节点中进行存储.
建表语句支持PolarDB-X CREATE TABLE
,但暂时不支持全局二级索引和影子库.
上述的配置仅仅描述,自动化DDL是如何生成配置的.如果涉及到自定义分片算法,自定义数据分布,请自己更改配置文件.
ALTER TABLE 语句(执行过后检查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;`
本地索引语句
创建本地索引
CREATE INDEX testIdx ON db1.`travelrecord2` (id);`
删除索引
DROP INDEX testIdx ON db1.`travelrecord2``
DROP TABLE语句
删除逻辑表
drop TABLE db1.`travelrecord2`
仅仅删除原型库的物理表,不会删除存储节点的物理表
RENAME TABLE语句
RENAME TABLE travelrecord2 to travelrecord3`
仅仅更改原型库的物理表与配置中的表名,不会更改存储节点的表名. 在单表的情况下,会更新存储节点的表名,使单表使用方式一致(如果不是这样,则会使用旧的表名,导致路由错误)
TRUNCATE语句
TRUNCATE TABLE db1.`travelrecord2``
CHECK TABLE语句
CHECK TABLE db1.travelrecord2;`
扫描逻辑表中对应的所有存储节点的表字段信息是否相同,如果不相同则会显示错误的节点信息,需要人工修正