高斯数据库和mysql区别_Mysql与分布式Gaussdb 100语法差异及常见问题汇总

本文对比了MySQL与分布式Gauss DB 100在日期处理、数据类型转换、精度处理、建库建表及索引等方面的差异,并列举了Gauss DB 100的一些语法限制,还提到了使用中可能遇到的问题及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值