云社区 博客 博客详情

Mysql与分布式Gaussdb 100语法差异及常见问题汇总

发表于 2020-03-26 14:41:41 2020-03-26
0
0

【摘要】 mysql与gaussdb的差异:YEAR(CURRENT_TIMESTAMP()) year =》 EXTRACT (year from current_timestamp ()) year((#{year} - 1) + '0101000000') =》 to_date((#{year} - 1)||'-01-01','%Y-mm...

mysql与gaussdb的差异:


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


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


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


CEILING                                                  =>    CEIL

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


导入数据时 mysql 0000-00-00                  =>    gauss  0001-01-01          ----

dateFormat                                            =>    视具体情况替换成to_char 或者 to_date

STR_TO_DATE                               =》    to_date


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

日期格式 :%M                                      =>     日期格式 : mm

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

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


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





                      




建库/表/索引:

分库分表语法修改:

分片:

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)




gaussdb的语法限制:

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

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

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


一些常见的问题:

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

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

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

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


登录后可下载附件,请登录或者注册

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:huaweicloud.bbs@huawei.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
评论文章 //点赞 收藏 0
点赞
分享文章到微博
分享文章到朋友圈

上一篇:性能测试TPS不达标常见情况分析及调优(基于Taishan服务器、分布式Gauss DB 100)

评论 (0)


登录后可评论,请 登录注册

评论