兼容 MySQL 协议是 TcaplusDB 的新特性,目前支持的 SQL 功能有限,包括以下 7 个要点:
-
支持单表的 SELECT、INSERT、DELETE、UPDATE 语句;
-
SELECT、DELETE、UPDTATE 操作的 WHERE 子句中必须明确指定一个或多个主键,详见后文《SQL 语法使用参考》;
-
在配置了全局索引的情况下,支持基础的聚合函数,详见后文《全局索引查询》;
-
暂不支持 prepared statement;
-
暂不支持 DDL,即 CREATE / DROP TABLE 等;
-
不支持 ORDER BY、GROUP BY;
-
不支持跨表 JOIN。
1. 客户端或驱动的版本兼容
TcaplusDB 兼容 MySQL 5.7 协议,使用支持 MySQL 5.7 协议(包括 5.7)的客户端或者驱动皆可进行连接。
在实际使用中,可能存在不同版本的兼容差异,我们推荐使用 MySQL 5.0 以上 5.7(包括 5.7)以下的客户端或者驱动。经过我们测试,下述版本的客户端或驱动均可正常使用:
-
MySQL client 工具,5.5.24
-
Python 的 MySQLdb,实际底层使用 mysql c api 的 5.5.24 版本
2. 表定义和建表
2.1 表定义
TcaplusDB 当前不支持通过 SQL 的方式动态建表,为了能够顺利进行示例体验,可以使用 XML 文件(如下面示例)进行表定义,通过 Tcaplus OMS 平台进行建表。
表定义示例:
<?xml version="1.0" encoding="GBK" standalone="yes" ?>
<metalib name="demo_table" tagsetversion="1" version="1">
<struct name="user" version="1" primarykey="user_id,server_id" splittablekey="user_id">
<entry name="user_id" type="string" size="450" desc="用户ID"/>
<entry name="server_id" type="int64" desc="服务器ID" />
<entry name="nick_name" type="string" size="50" desc="昵称"/>
<entry name="desc" type="string" size="1024" desc="描述信息"/>
<entry name="state" type="Tinyuint" defaultvalue="0" desc="用户状态 0 : AVALIABLE, 1 DELETED"/>
<index name="index1" column="user_id"/>
<index name="index2" column="user_id,server_id"/>
</struct>
</metalib>
复制代码
-
元素 metalib 是 xml 文件的根元素。
-
包含 primarykey 的 struct 元素是一个表,不包含 primarykey 的 struct 元素为一个普通结构体。
-
每次修改表结构时,版本属性值需要相应地加 1,初始版本始终为 1。
-
primarykey 属性指定主键字段;对于 generic 表,您最多可以指定 8 个主键字段,对于 list 表,则可以指定 7 个。
-
splittablekey 属性等效于分片键(shard key),TcaplusDB 表被拆分存储到多个存储节点。splittablekey 必须是主键字段之一,一个好的 splittablekey 应该具有高度分散性,这意味着值的范围很广,建议选用字符串类型。
-
desc 属性包含当前元素的描述。
-
entr