OceanBase SQL用户手册

上传人:飞****9 文档编号:129592740 上传时间:2020-04-23 格式:DOC 页数:26 大小:306.65KB
返回 下载 相关 举报
OceanBase SQL用户手册_第1页
第1页 / 共26页
OceanBase SQL用户手册_第2页
第2页 / 共26页
OceanBase SQL用户手册_第3页
第3页 / 共26页
OceanBase SQL用户手册_第4页
第4页 / 共26页
OceanBase SQL用户手册_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《OceanBase SQL用户手册》由会员分享,可在线阅读,更多相关《OceanBase SQL用户手册(26页珍藏版)》请在金锄头文库上搜索。

1、OceanBase SQL用户手册 本手册适用于OceanBase 0.4.1编号文档版本修订章节修订原因修订日期修订人10.1新建文档2012/10/16竹翁20.2添加0.4.1版本新特性2013/1/13竹翁30.3细节说明;添加SELECT FOR UPDATE说明;说明事务中SELECT的BUG陷阱2013/1/21竹翁40.4陷阱和缺陷添加对varchar(32)的说明;陷阱和缺陷添加REPLACE返回affected_rows的说明;附录中添加PS语句API示例程序2013/1/23竹翁50.54.1,5.1SQL语句大小写不敏感;双引号转义说明;新增alter table语句2

2、013/3/14竹翁60.64.2增加对返回类型的描述2013/3/22方戟目录1.OceanBase介绍42.快速上手4步骤一4步骤二5步骤三53.使用API63.1.C程序63.1.1.编译方法一:83.1.2.编译方法二:83.2.Java程序84.陷阱和缺陷114.1.支持的语句114.2.数据类型114.3.浮点数114.4.函数124.5.Join的限制124.6.update和delete的限制124.7.事务中SELECT的BUG124.8.REPLACE语句返回的affected_rows值125.SQL语法参考135.1.数据定义语句135.1.1.create table

3、语句135.1.2.drop table语句145.1.3.alter table语句145.2.数据操作语句155.2.1.select语句155.2.2.replace语句185.2.3.insert语句185.2.4.update语句185.2.5.delete语句185.3.事务相关语句195.3.1.开始事务195.3.2.结束事务195.4.变量相关语句195.4.1.set语句195.4.2.show variables语句205.5.预备执行语句205.5.1.prepare语句205.5.2.execute语句205.5.3.deallocate语句215.5.4.一个例子2

4、16.常见问题216.1.用replace还是insert?216.2.什么情况下需要使用预备执行语句?21附录22Prepared Statement API示例22SELECT示例22REPLACE示例251. OceanBase介绍RootServer/UpdateServer(主)RootServer/UpdateServer(备)Chunkserver/MergeServerOceanBase是一个由RootServer, UpdateServer, ChunkServer, MergeServer等角色组成的分布式数据库系统。RootServer是管理服务器,用于管理UpdateS

5、erver、ChunkServer和MergeServer等。ChunkServer是OceanBase的基线数据存储子系统,由多台机器构成,基线数据通常保存23副本并且保存在不同的ChunkServer上。UpdateServer是OceanBase的增量更新子系统,记录用户的修改,通常由一主一备或一主多备构成。MergeServer是OceanBase的用户接口子系统,接收用户的查询请求,并从对应ChunkServer上获得基线数据以及从UpdateServer上获得更新的增量,然后融合二者后返回用户。SQL用户只需要和MergeServer交互,每一个MergeServer都可以视为一个

6、SQL服务器。用户连接任何一台MergeServer都可以对全部表格数据执行SQL语句。2. 快速上手OceanBase完全兼容MySQL的网络协议,SQL用户可以使用mysql终端客户端、以及使用libmysqlclient的任意程序连接OceanBase。只要你熟悉mysql,那么你就可以直接使用OceanBase SQL服务了。下面我们以mysql终端客户端为例演示一下。步骤一请询问你的OceanBase DBA任意一台MergeServer的IP地址和SQL服务端口(默认端口号是2828)。TODO改用LD_PRELOAD=libobsql.so启动mysql的方式步骤二使用mysql

7、终端连接MergeServer,如下图。注意红色部分,如果你看到类似这样的字样,说明你已经成功登陆了OceanBase!像使用MySQL一样体验一下吧。步骤三我们下面可以创建一个表格,插入一些数据,然后查询出来。很简单,是不是:)3. 使用API3.1. C程序OceanBase为应用程序提供了libobsql函数库 目前0.4.1版本没有发布libobsql,用户暂时可以用libmysql代替。这个库在二进制接口上与mysql的libmysqlclient库完全兼容。也就是说,一个程序(例如mysql, mysqltest等)之前用libmysqlclient编译好,使用PRELOAD技术无

8、需重新编译就可以使用来连接OceanBase。应用程序可以使用与libmysqlclient提供的API(mysql.h)完全相同的接口直接访问OceanBase SQL服务。下面是一个简单的例子程序的完整清单。#include #include #include /是的,你没看错,就是mysql.hint main(int argc, char *argv) (void)argc; (void)argv; const char* HOST = 127.0.0.1; int PORT = 2828; / 1. 初始化libmysqlclient if (0 != mysql_library_i

9、nit(0, NULL, NULL) fprintf(stderr, could not init mysql libraryn); exit(1); MYSQL my_; ASSERT_TRUE(NULL != mysql_init(&my_); / 此处用ASSERT省略错误检查 fprintf(stderr, Connecting server %s:%d.n, HOST, PORT); / 2. 连接OceanBase SQL服务 ASSERT_TRUE(NULL != mysql_real_connect(&my_, HOST, , , test, PORT, NULL, 0); /

10、 3. 建表 int ret = 0; ret = mysql_query(&my_, drop table if exists ob_new_sql_test); if (0 != ret) fprintf(stderr, %sn, mysql_error(&my_); ASSERT_EQ(0, ret); ret = mysql_query(&my_, create table if not exists ob_new_sql_test (c0 varchar(64), c1 int primary key, c2 int, c3 int, c4 int, c5 int, c6 int,

11、c7 int, c8 int, c9 int, c10 int, c11 int, c12 int, c13 int, c14 int, c15 int); if (0 != ret) fprintf(stderr, %sn, mysql_error(&my_); ASSERT_EQ(0, ret); / 4. 插入数据 ret = mysql_query(&my_, insert into ob_new_sql_test (c0, c1, c2)values (hello, 1, 2); if (0 != ret) fprintf(stderr, %sn, mysql_error(&my_)

12、; ASSERT_EQ(0, ret); / 5. 查询数据 ASSERT_EQ(0, mysql_query(&my_, select * from ob_new_sql_test); MYSQL_RES *res = mysql_use_result(&my_); / 取结果集 ASSERT_TRUE(NULL != res); unsigned int num_fields = mysql_num_fields(res); / 结果列数 ASSERT_EQ(16U, num_fields); unsigned long *lengths = NULL; MYSQL_ROW row; ro

13、w = mysql_fetch_row(res); ASSERT_TRUE(NULL != row); lengths = mysql_fetch_lengths(res); / row中每个值的长度,0表示NULL ASSERT_TRUE(NULL != lengths); for (unsigned int j = 0; j num_fields; +j) if (0 != j) fprintf(stdout, ,); fprintf(stdout, %.*s, rowj ? static_cast(lengthsj) : static_cast(sizeof(NULL)-1), rowj ? rowj : NULL); fprintf(stdout, n); row = mysql_fetch_row(res); ASSERT_TRUE(NULL = row); / no more rows mysql_free_result(res); / 6. 删表 ret = mysql_query(&my_, drop table if exists ob_new_sql_test); if (0 != ret) fprintf(stderr, %s

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号