建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消

hw70569427

发帖: 2粉丝: 1

发消息 + 关注

发表于2020年03月30日 16:05:02 1364 2
直达本楼层的链接
楼主
显示全部楼层
[干货分享] Mysql与分布式Gaussdb 100语法差异及常见问题汇总

1.mysql与gaussdb的差异比对:

 

                       Mysql                                                                            分布式Gauss DB 100

1)YEAR(CURRENT_TIMESTAMP()) year        =》   EXTRACT (year from current_timestamp ()) year

2)((#{year} - 1) + '0101000000')                      =》   to_date((#{year} - 1)||'-01-01','%Y-mm-%d')

3)((#{year} - 1)+'1231235959')                        =》   to_date((#{year} - 1)||'-12-31 23:59:59','%Y-mm-%d %H:%i:%s')

4)CEILING                                                           =》  CEIL

5) 字段如果有not null约束,mysql中可以插入‘’/ ' ',在gauss中只能插入' '  

6)导入数据时 mysql 0000-00-00                        =》    gauss  0001-01-01          

7)DateFormat                                                        =》    视具体情况替换成to_char 或者 to_date

8)STR_TO_DATE                                                 =》    to_date

9)  group by 的list 中必须要有select中的字段

10)日期格式 :%M                                               =》     日期格式 : mm

11)ON DUPLICATE KEY UPDATE 支持子查询  =》   分布式情况下,不支持子查询,另外merge功能也不支持子查询  ---后通过merge实现

12)integer格式能隐式转成date                       =》    需要to_date函数转换

13)Decimal(x,y)/Number/Double/float 精度处理差异:

1)如果在sql中直接将查询结果设置为0(0.00)(不从数据库字段中取值),则mysql统一处理为0.00,gaussdb统一处理为0

2)如果在sql中直接将查询结果设置为2(2.00)(不从数据库字段中取值),则mysql统一处理为2.00,gaussdb统一处理为2

例子:

select 0 as alias from table 的结果:       =》   select 0 as alias from table 的结果:       

0.00                                                               0

select 0.01 as alias from table 的结果:   =》   select 0.01 as alias from table 的结果:       

0.01                                                               0.01

3)计算结果的精度处理:     

A(Decimal(16,2)) :1.00 ,B(Decimal(16,2)) :1.00     =>   A(Decimal(16,2)) :1.00 ,B(Decimal(16,2)) :1.00   

A+B =2.00                                                                    A+B =2

PERIOD_ADD                             =》 add_mouths

DATE_ADD                            =》 timestampadd

SIGNED integer                            =》 integer SIGNED               

2.建库/表/索引差异:

分库分表语法修改:

分片:

dbpartition by hash(`MDTRTPROV_DBPT_CODG`)              =》DISTRIBUTE BY HASH  (MDTRTPROV_DBPT_CODG)  且 分片字段必须是主键    

分区:

tbpartition by hash(`MSGID`) tbpartitions 3                          =》 PARTITION BY HASH  (MSGID) PARTITIONS 3      

索引:

KEY `auto_shard_key_mdtrtprov_dbpt_codg` (`MDTRTPROV_DBPT_CODG`) USING BTREE  -》 默认B+

KEY `INDEX_senderMsgId` (`SENDER_MSG_ID`)                 =》需要单独创建索引,create index

                                        

                                                                      

                                                                                        =》普通表在分布式下必须要指定分片(复制表):distribute by replication on groupid(1)

3.Gaussdb的语法限制:

1)ORDER BY 要用as的别名,不能用原字段名

2)group by 要用原字段名称,不能用as的名称

3)字段用到关键字,如date,需要加上反引号`


4.一些常见的问题:

如果遇到查询关闭数据库socket连接,可以试试调整where条件顺序,将有传参的条件放到固定条件之前, 将CURRENT_TIMESTAMP()函数换成sysdate

那我想将两张相同字段的表进行合并,如果主键重复就做更新操作,主键不冲突就插入,gauss该用什么语句呢

DataStudio工具,格式化后很多sql执行会报错。

When Case 中有now()函数导致执行报错,可以更换为sysdate


举报
分享

分享文章到朋友圈

分享文章到微博
发表于2020年03月30日 19:04:14
直达本楼层的链接
沙发
显示全部楼层

点赞 评论 引用 举报

北冥有鱼.

发帖: 71粉丝: 9

发消息 + 关注

发表于2020年03月31日 09:08:22
直达本楼层的链接
板凳
显示全部楼层

前来学习了

点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册