暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

直播回顾|一文详解优炫数据库对MySQL兼容性实践

优炫软件 2022-06-30
2343


据库作为关键信息基础设施之一,关系国计民生和信息安全,它是信息系统的关键组成部分,一旦出现问题,整个信息系统都将停摆。国产化进程提速迫在眉睫,拥有自主可控的数据库方能行稳致远。


优炫软件联合墨天轮社区,共同打造的“走进国产化”系列技术分享,聚焦前沿数据库技术话题探讨、热门行业解决方案解读、数字化转型案例分享,让更多的数据库从业者更全面了解国产数据库核心技术的创新突破。


优炫数据库介绍


优炫数据库管理系统UXDB是优炫软件研发的企业级安全可信数据库,拥有自主知识产权,是自主可控的数据库软件,具有高可用、高性能、高安全、可扩展、可自维护自优化(自治)等核心能力。在自治方向处于国内领先地位。


uxdb在不同的应用场景下可以切换不同的部署方式,包括:一主多备模式、读写分离模式、共享存储模式、大规模并行计算集群模式,以及云部署等,可以满足我国政府、军工、金融、能源、制造、医疗等各行业应用需求。



上图为优炫数据库的产品架构图,采用数据处理与存储分离设计的架构,处理端专注数据处理。存储端专注存储处理。


编程接口:提供外部程序访问能力。


典型的工具有:UXSQL是内置的客户端连接工具,用于数据库连接、创建、管理等;UXDBAdmin是图形化客户端管理工具;UXDBWeb是服务端数据库监控与管理工具;UXMigrator是数据迁移工具,支持国内外主流数据库、国产数据库等一键迁移工作。


应用插件:UXDB是基于插件扩展设计的,通过插件对功能进行扩展。


优炫数据库兼容特性介绍


对于市面上大多数的数据库客户需求而言,“功能、性能、高可用、兼容、可扩展、易维护”六项是最受关注的,而其中“兼容性”更是数据库国产化中必不可少的一环。优炫数据库具备出色的兼容性,兼容国内外多种操作系统、CPU以及主流数据库常用SQL语法。优炫数据库还对主流数据库(Oracle、MySQL)的典型SQL语法进行了大量的兼容乃至改进。基于广泛的SQL语法兼容,用户和开发人员可以将原有的基于其他主流数据库的开发经验直接带入UXDB,无需学习不同SQL编写方式,就能完成应用系统迁移和开发工作。


下面将详细讲解优炫数据库在语法、数据类型、函数、功能、jdbc用法五大方面对于MySQL的兼容特性。


数据兼容


set类型:优炫数据库对MySQL的数据兼容主要体现在对set数据类型的兼容,set数据类型也是MySQL中最为独特的数据类型之一。


当设置一个数据表时,可以对字段类型设置set的集合值,数据的增加需要含括在集合之中,适合内容固定的数据库的筛选分析的应用场景,如性别、省份等。


不需要特别设置

CREATE TABLE article(id serial,

flag SET('推荐','热门', '置顶', '图文') DEFAULT NULL); 

INSERT INTO article(flag) VALUES('图文,推荐,置顶'),('置顶'),('推荐,置顶'),('热门,推荐’); 

SELECT*FROMarticle WHERE FIND_IN_SET('推荐',flag) AND FIND_IN_SET('置顶',flag);



语法兼容


group by:通常而言group by语法用于根据某一些信息值做分组,而MySQL对语法进行了扩展。而优炫数据库也针对该语法进行了兼容性修改。


需要设置参数:SET sql_mode =‘’;

(1) sql_mode缺省值为”ONLY_FULL_GROUP_BY”,可在配置文件《uxsinodb.conf》中修改缺省值。


createtablemakerar(cname varchar(20),

 wmname varchar(20), avg int); 

insert into makerar values('canada','zoro',2);

insert into makerar values('spain','luffy',1);

insert into makerar values('spain','usopp',5); 

sql_mode ='ONLY_FULL_GROUP_BY'时,

SELECT cname, wmname, MAX(avg) FROM makerar GROUP BY cname;



SET sql_mode ='';

SELECT cname, wmname, MAX(avg) 

FROM makerar GROUP BY cname;



分页方式语法limit x, y:其中x表示跳过记录值,而y表示取记录值。


不需要特别设置

create table tb_limit01(id serial, name varchar(20));

insert into tb_limit01(name) values('北京');

insert into tb_limit01(name) values('上海');

insert into tb_limit01(name) values('广州');

insert into tb_limit01(name) values('深圳');

insert into tb_limit01(name) values('成都');

insert into tb_limit01(name) values('西安');



update更新时使用join连接两个表:


不需要特别设置

create table tb_employee(employee_id int, name varchar(20), tel varchar(20), addr varchar(20));

Insert into tb_employee Values(1,'张三','010-66668888','北京海淀');

Insert into tb_employee Values(2,'李四','010-99990000','北京朝阳'); 

create table tb_sales(sales_id int, name varchar(20), addr varchar(20));

Insert into tb_sales Values(1,'zhangsan','北京');

Insert into tb_sales Values(2,'lisi','北京'); 

UXDB语法:

UPDATE tb_sales b

 SET ( name,addr ) = (

SELECT 

           a.name,a.addr

FROM  

          tb_employee a 

WHERE 

         a.employee_id=b.sales_id);



兼容MySQL:

UPDATE tb_sales bJOIN tb_employee a ON 

a.employee_id=b.sales_id SET b.name = a.name,b.addr=a.addr;


兼容Oracle:

updatetb_salesbset(b.name,b.addr)=(selecta.name,a.addrfrom tb_employee a where a.employee_id=b.sales_id);


函数兼容


函数substr:作为大多数数据库的标准函数,uxdb也对其进行了兼容适配,具体用法如下。


不需要特别设置 

Select substr('Abcdefghi' from 4 for 2);  



功能兼容


大小写不敏感:MySQL中,一个库会对应一个文件夹,库里的表会则以文件的方式存放在文件夹内,所以,操作系统对大小写的敏感性决定了数据库和表的大小写敏感(MySQL有一个只读的系统变量lower_case_file_system,其值反映的正是当前文件系统是否区分大小写)因此:在Windows下Mysql的数据库和表名是大小写不敏感的,而在大多数类型的Unix系统中是大小写敏感的。MySQL在Windows和Linux中大小写识别是不同的,而uxdb针对大小写敏感问题也进行了具体适配,表现为标识符大小写不敏感,内容大小写不敏感。


下图为MySQL的大小写说明



UXDB对主流数据库的大小写兼容



下面为uxdb标识符大小写不敏感,内容大小写不敏感的具体用法。


初始化数据库时,加“--ignore-case”参数 系统表中的标识符大小写不敏感。



初始化数据库时,加“--ignore-case”

参数 内容大小写不敏感



多种返回类型的case when:case when语句,用于计算条件列表并返回多个可能结果表达式之一。CASE 具有两种格式:简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果。


以下是case when的用法


需要设置参数:set mysql_grammar=on; 


(1)mysql_grammar缺省值为“off”

可在配置文件《uxsinodb.conf》中修改缺省值


create table age_info(id int,age int);

insert into age_info values(1,10);

insert into age_info values(2,20);

insert into age_info values(3,30);

insert into age_info values(4,40);

insert into age_info values(5,50);

insert into age_info values(6,60);

insert into age_info values(7,70);

insert into age_info values(8,80); 



某列内容与数字相乘:MySQL语句中,当某一字符串和数字相乘,字符串会自动转换为数字,再和数字相乘。


以下是相应的用法


不需要特别设置 

createtabletb_test101(idint,val varchar(20));

insert into tb_test101 values(1,'11');

insert into tb_test101 values(3,'12');


select val * 6 as result from tb_test101;



show create table语句:通过该语句直接显示该表创建时的sql语句,是非常便捷的用法.


以下是相应的用法


不需要特别设置


接口兼容


UXDB兼容接口用法,甚至是接口中某个语句的语法,UXDB都做了相应的兼容,满足客户应用需求,搭建MySQL迁移至UXDB的“无缝”移植。


Jdbc兼容:jdbc支持将布尔值转换为 0 和 1,示例如下


create table tb_boolean_02(id int , ifverified smallint);

insert into tb_boolean_02 values(1,0);

insert into tb_boolean_02 values(2,1); 

select * from tb_boolean_02;





优炫数据库与其他数据库的兼容共存


在实际应用场景中,客户可能因数据类别不同而同时使用多种数据库进行工作,而优炫数据库可以根据大多数主流数据库进行兼容适配,做到不同数据库之间的操作修改,如增添、删减、查询数据等操作。下面我们来了解如何使用FDW来实现该操作。


FDW(foreign data wrapper-外部数据封装)


1.加载mysql_fdw 

create extension mysql_fdw;



2.创建外部数据库服务器

create server mysql_server

foreign data wrapper 

mysql_fdwoptions(host'10.1.106.33',port '3306');



3.创建用户映射 

create user mapping 

for uxsmo server mysql_server 

options(username'root',password 'Ab&*112233');



4. 创建外部表 

CREATE FOREIGN TABLE tb1_mysql

(id int, name varchar(20)) 

server mysql_server

options (dbname 'mysql', table_name 'tb1');



5.查看外部表中的数据 

select * from tb1_mysql;



6.向外部表添加数据 

insert into tb1_mysql values(110,'深圳');



7.MySQL中能看到UXDB新增加的数据



-FIN-


文章转载自优炫软件,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论