Mysql兼容性

1.概述

UXDB高度兼容Mysql数据库的功能和性能,UXDB数据库拥有和Mysql数据库系统一样的成熟的事务处理和分析功能,同时还拥有更高的并发性能及更低的运维成本。UXDB兼容Mysql数据库的大部分SQL语法和函数。在不改变现有应用程序和数据库架构的情况下,用户可以轻松地将Mysql数据库迁移到UXDB,并在其中进行查询、数据修改和分析等操作。

本文将对UXDB数据库兼容Mysql5.7的功能个方面的功能进行详细的对比,方便用户迁移后查阅相关语法使用方法。

2.SQL语法

2.1.数据类型

2.1.1.基本数据类型

Mysql与UXDB支持的文本字符串二进制类型对照表

Mysql uxdb 备注
类型名 说明 类型名 说明
char(n) 定长字符串,最大长度为255字符,长度不足时,自动填充空格,在检索时自动去掉空格(在启用pad_char_to_full_length sql模式下,空格不会删除) character(n)或char(n) 定长字符串类型,不足空白补充。最大长度为10485760字符 支持两种特殊的字符串类型:name类型,固定64字节长度,char类型(即不指定长度),固定1字节长度。
varchar(n) 变长字符串,最大不超过64字节 character varying(n) 或 varchar(n) 变长字符串类型,最大空间1GB,存储空间4+实际的字符串长度
bit(n) 位字段类型,n表示每个值的位数,范围为1~64如果n被省略,默认值为1。如果为 BIT(n)列分配的值的长度小于n位,在值的左边用0填充 bit(n) 或bit varying(n) 位字段类型,n表示每个值的位数,范围为1~83886080,没有长度的bit等效于bit(1),没有长度的bit varying意味着没有长度限制
binary(n) 定长二进制字符串,最大长度为255字符,长度不足时自动填充空格,取出时,所有字节都保留,返回定义长度的字节长度 - -
varbinary(n) 变长二进制字符串,最大长度为65535字符 bytea 存储二进制类型,最大不超过1G字节
blob 变长二进制大对象,存储二进制数据,如图片,音频等,最大长度为65535 blob 存储二进制文本类型,最大不超过1G字节
tinyblob 变长二进制大对象,存储二进制数据,如图片,音频等,最大长度为255 - -
mediumblob 变长二进制大对象,存储二进制数据,如图片,音频等,最大长度为167772150 - -
longblob 变长二进制大对象,存储二进制数据,如图片,音频等,最大长度为4294967295 - -
text 变长二进制大对象,存储文字,最大长度为65535 text/clob 存储文本类型,最大不超过1G字节
Tinytext 变长二进制大对象,存储文字,最大长度为255 - -
mediumtext 变长二进制大对象,存储文字,最大长度为167772150 - -
longtext 变长二进制大对象,存储文字,最大长度为4294967295 text 变长字符串类型。最大不超过1G字节
enum

枚举类型,是一个字符串对象,事先将所有结果都设计好,实际存储的数据必须是预先规定的数据的一个。

1.规范数据格式,数据只能是规定的数据中的其中一个。

2.节省存储空间,枚举通常有一个别名-单选框;枚举实际存储的是数值而不是字符串本身。

3.如果列表成员为1~255,则需要1个字节存储;如果列表成员为255~65535,则需要2个字节存储;最多65535个成员。

枚举在进行数据规范的时候(定义的时候),系统会自动建立一个数字与枚举元素的对应关系(关系放到日志中)。在进行数据插入的时候,系统自动将字符转换成对应的数字进行存储;然后在进行数据提取的时候,系统将其转换为字符进行显示。Enum(‘value1’,’value2’...)
ENUM 描述:枚举类型;范围:1~65535个元数据。

CREATE TYPE mood AS ENUM ('sad','ok','happy');

CREATE TABLE person ( current_mood mood ... )

UXDB里面没有ENUM类型
set 集合字符串,最大成员数为64,成员之间使用逗号分割,集合实际存的是数字而不是字符串本身,SET类型一次可以选取多个成员;插入重复成员,自动删除重复成员。

Set(‘value1’,’value2’....)

- - uxdb中虽然没有set类型,但是可以通过数组类型去代替,最大支持1GB大小。
**Mysql与UXDB支持的数值类型对照表**
Mysql uxdb 备注
类型名 说明 类型名 说明
无符号数值类型 Int/integer 普通整数类型,4字节,取值范围(0,4 294 967 295) - - mysql中支持int 1,2,3,4,8 字节,同时支持有符号,无符号;uxdb支持int 2,4,8 字节,且数值都是有符号的,在uxdb中可以使用domain来实现mysql中的1,3字节整数以及无符号整型;对于mysql中的zerofill,可以使用lpad函数来实现(mysql8开始不建议使用ZEROFILL属性)
tinyint 很小整数类型,1字节,取值范围(0,255) - -
mediumint 中等整数类型,3字节,取值范围(0,16 777 215) - -
bigint 大整数类型,8字节,取值范围(0,18 446 744 073 709 551 615) - -
smallint 小整数类型,2字节,取值范围(0,65 535) - -
有符号数值类型 Int/integer 普通整数类型,4字节,取值范围(0,4 294 967 295) - -
tinyint 很小整数类型,1字节,取值范围(-128,127) - -
mediumint 中等整数类型,3字节,取值范围(-8 388 608,8 388607) - -
bigint 大整数类型,8字节,取值范围(-9 233 372 036 854 775 808,9 223 372 036 854 775 807) bigint 大整数类型,8字节,取值范围(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)
smallint 小整数类型,2字节,取值范围(-32 768,32767) smallint 小整数型,2字节,取值范围(-32 768,32767)
zerofill 零填充约束,插入数据时,当该字段的值的长度小于定义的长度时,会在该值的前面补上相应的0;zerofill默认为int(10) - -
无符号浮点数 float 单精度浮点数,4字节,取值范围0 和 -1.175494351E-38~-3.402823466E+38 浮点类型用(M, D)来表示,其中 M 称为精度,表示总共的位数;D 称为标度,表示小数的位数,浮点数类型的取值范围为 M(1~255)和 D(1~30,且不能大于 M-2),分别表示显示宽度和小数位数。M 和 D 在浮点类型中是可选的,浮点类型将被保存为硬件所支持的最大精度。如果用户指定的精度超出精度范围,则会四舍五入进行处理。浮点类型在不指定精度时,默认会按照实际的精度(由计算机硬件和操作系统决定),浮点数进行减法和比较运算时也容易出问题,所以在使用浮点数时需要注意,并尽量避免做浮点数比较。 - -
double 双精度浮点数,8字节,取值范围0 和 -2.2250738585072014E-308~-1.7976931348623157E+308 - -
有符号浮点数 float 单精度浮点数,4字节,取值范围-3.402823466E+38~-1.175494351E-38 float 单精度浮点数,4字节,范围:6位十进制精度 mysql和uxdb中的浮点数类型基本一致。mysql中4 bytes的浮点数类型有real,float4,8 bytes的浮点数类型double。uxdb中对应的也有real,float,float4,float8以及double precision,两者基本兼容
double 双精度浮点数,8字节,取值范围-1.7976931348623157E+308~-2.2250738585072014E-308 Double或double precision 双精度浮点数,8字节,范围:15位十进制数字精度,变精度,不精确
decimal 定点类型,M+2字节,定点类型用(M, D)来表示,其中 M 称为精度,表示总共的位数;D称为标度,表示小数的位数,DECIMAL 的默认D值为0、M 值为10,以字符串的形式存放,适用于对精度要求较高场景,如货币、科学数据 decimal 定点类型,M+2字节,定点类型用(M, D)来表示,其中 M 称为精度,表示总共的位数;D称为标度,表示小数的位数,DECIMAL 的默认D值为0、M 值为10,以字符串的形式存放,适用于对精度要求较高场景,如货币、科学数据 mysql中的numeric、decimal类型整数和小数部分均最大支持65数字;uxdb中numeric、decimal类型支持的最大范围是:[131072,16383]数字。
numeric 精确数字数据类型,用来存储数字数据。它可以存储整数、浮点数、定点数等用(M, D)来表示,其中 M 称为精度,表示总共的位数;D 称为标度,表示小数的位数 numeric 与 decimal 数据类型在功能上等效 numeric 精确数字数据类型,用来存储数字数据。它可以存储整数、浮点数、定点数等用(M, D)来表示,其中M称为精度,表示总共的位数;D称为标度,表示小数的位数numeric与decimal数据类型在功能上等效

Mysql与UXDB支持的日期和时间类型对照表

Mysql uxdb 备注
类型名 说明 类型名 说明
year 用于表示年,单字节类型,格式:YYYY year 用于表示年,单字节类型,格式:YYYY
time 用于只需要时间信息的值,格式:HH:MM:SS,TIME 类型不仅可以用于表示一天的时间(必须小于 24 小时),还可能是某个事件过去的时间或两个事件之间的时间间隔(可大于 24 小时,或者甚至为负) TIME [ (P) ] [ WITHOUT TIME ZONE ] 用途:一天中的时间(无日期);大小:8字节 mysql不支持带时区的时间类型
- - TIME [ (P) ] [ WITH TIME ZONE ] 用途:仅仅是一天中的时间(没有日期),带有时区;大小:12字节
date 用于仅需要日期值时,没有时间部分,格式:YYYY-MM-DD date 用于仅需要日期值时,没有时间部分,格式:YYYY-MM-DD
datetime 用于需要同时包含日期和时间信息的值,格式:YYYY-MM-DD HH:MM:SS,在存储日期数据时,按实际输入的格式存储,即输入什么就存储什么,与时区无关 TIMESTAMP [WITHOUT TIME ZONE] 用途:包括日期和时间(无时区);大小:8字节
timestamp 用于需要同时包含日期和时间信息的值,格式:YYYY-MM-DD HH:MM:SS, TIMESTAMP 值的存储是以 UTC(世界标准时间)格式保存的,存储时对当前时区进行转换,检索时再转换回当前时区。即查询时,根据当前时区的不同,显示的时间值是不同的 TIMESTAMP [ (P) ] WITH TIME ZONE 用途:包括日期和时间,有时区;大小:8字节

Mysql与UXDB支持的布尔类型对照表

Mysql uxdb 备注
类型名 说明 类型名 说明
无符号布尔 BOOL/BOOLEAN 布尔类型,1字节,范围:(0,255) - -
有符号布尔 BOOL/BOOLEAN 布尔类型,1字节,范围:(-128,127) BOOL/BOOLEAN 用途:布尔类型;大小:1字节;存储的值仅为(true/false);逻辑布尔

2.1.2.序列

Mysql与UXDB支持的序列数据类型对照表

类型 Mysql uxdb 备注
类型名 说明 类型名 说明
序列 - Mysql:通过auto_increment,将字段设置为自增类型,并且指定该列唯一,一个表中只能有一个自增字段 SMALLSERIAL 自动增加小整数,2字节;范围:1到32767
SERIAL 自动增加整数,4字节;范围:1到2147483647
BIGSERIAL 自动增加大整数,8字节;范围:1到9223372036854775807

2.1.3.自定义类型

Mysql与UXDB支持的自定义类型对照表

类型 Mysql uxdb 备注
类型名 说明 类型名 说明
- CREATE TYPE 名称 { AS | IS } ( [ 属性_名称 数据_类型 [ COLLATE 校对规则 ] [, ... ] ] ) 使用create type自定义数据类型
- CREATE DOMAIN 名称 [ AS ] 数据_类型 [ COLLATE 校对规则 ] [ DEFAULT 表达式 ] [ 约束 [ ... ] ] 使用create domain 自定义数据类型

2.1.4.空间数据类型

Mysql与UXDB支持的空间数据类型对照表

类型 Mysql uxdb 备注
类型名 说明 类型名 说明
空间数据类型 point 点坐标,如:point(1 2) point 用途:平面上的点;大小:16字节;格式:(x,y)
LineString 线坐标,如:LINESTRING(103 35,103 36,104 36,105 37) line 用途:无限长的线;大小:32字节;格式:{A,B,C}
Polygon 面坐标,如:POLYGON(103 35,104 35,104 36,103 36,103 35) polygon 用途:多边形(类似于封闭路径);大小:40+16n字节;格式:((x1,y1),...)
MultiPoint 多点,如:MULTIPOINT(103 35, 104 34,105 35) - -
MultiLineString 多线,如:MULTILINESTRING((103 35, 104 35), (105 36, 105 37)) - -
MultiPolygon 多面,如:MULTIPOLYGON(((103 35,104 35,104 36,103 36,103 35)),((103 36,104 36,104 37,103 36))) - -
GeometryCollection 混合类型,如:GEOMETRYCOLLECTION(POINT(103 35), LINESTRING(103 35, 103 37)) - -
- - circle 用途:圆;大小:24字节;格式:<(x,y),r>(中心点和半径)
- - lseg 用途:有限线段;大小:32字节;格式:((x1,y1),(x2,y2))
- - path 用途:封闭路径(类似于多边形)/开放路径;大小:16+16n字节;格式:((x1,y1),...) 封闭路径 [(x1,y1),...] 开放路径
- - box 用途:矩形框;大小:32字节;格式:((x1,y1),(x2,y2))

2.1.5.数据类型别名

Mysql与UXDB支持的数据类型别名对照表

类型 Mysql uxdb 备注
类型名 别名 类型名 说明
数据类型别名 tinyint bool/boolean/int1 - -
smallint Int2 smallint Int2
mediumint Int3/middleint - -
int Int4 int Int4
bigint Int8 bigint Int8
varchar(n) character varying(n) - -
decimal fixed/numeric numeric decimal
float float4/real float float4/real
double float8 double float8/double precision
mediumblob long varbinary - -
mediumtext long varchar/long - -
- - smallserial serial2
- - serial serial4
- - bigserial serial8

2.1.6.网络类型

Mysql与UXDB支持的网络类型别名对照表

类型 Mysql uxdb 备注
类型名 说明 类型名 说明
- Mysql没有专门的数据类型存储网络地址;存储ipv4通常使用INT UNSIGNED或BINARY,存储ipv6常用VARBINARY或VARCHAR cidr 描述:IPv4和IPv6网络;大小:7或19字节
- - inet 描述:IPv4和IPv6主机以及网络;大小:7或19字节
- - macaddr 描述:MAC地址;大小:6字节
- - macaddr8 描述:MAC地址(EUI-64格式);大小:8bytes

2.1.7.其他类型

Mysql与UXDB支持的其他数据类型对照表

类型 Mysql uxdb 备注
类型名 说明 类型名 说明
json json JSON列存储的必须是JSON格式数据 json/jsonb JSON 数据类型是用来存储JSON(JavaScript Object Notation)数据的。JSON数据也可以被存储为text,但是JSON数据类型的优势在于能强制要求每个被存储的值符合JSON规则。也有很多JSON相关的函数和操作符可以用于存储在这些数据类型中的数据
全文索引数据类型 - - tsquery 一个文本查询
- - tsvector 一个为文本搜索优化的形式下的文档
uuid - - uuid 通用唯一标识符(UUID)
xml - - XML 用来存储XML数据
货币 - - MONEY 货币额,8字节
- - interval 用于存储和部署年,月,日,小时,分钟,秒,等中的时间
数组 - - Array[] 数组类型可以是数据库内建的任何类型、用户自定义类型、枚举类型及组合类型。插入输入数组类型的两种方式:用花括号,用关键字array[]

2.2.对象管理

2.2.1.用户管理

mysql与UXDB用户管理对照表

操作 Mysql uxdb 备注
创建用户 CREATE USER <用户> [ IDENTIFIED BY [ PASSWORD ] 'password' ] [ ,用户 [ IDENTIFIED BY [ PASSWORD ] 'password' ]]

用户:指定创建用户账号,格式为user_name'@'host_name。这里的user_name是用户名,host_name为主机名,即用户连接 MySQL时所用主机的名字。如果在创建的过程中,只给出了用户名,而没指定主机名,那么主机名默认为“%”,表示一组主机,即对所有主机开放权限。

IDENTIFIED BY子句:用于指定用户密码。新用户可以没有初始密码,若该用户不设密码,可省略此子句。

PASSWORD 'password':PASSWORD表示使用哈希值设置密码,该参数可选。如果密码是一个普通的字符串,则不需要使用 PASSWORD关键字。'password' 表示用户登录时使用的密码,需要用单引号括起来。

INSERT INTO mysql.user(Host, User,  authentication_string, ssl_cipher, x509_issuer, x509_subject) VALUES ('hostname', 'username', PASSWORD('password'), '', '', '');--可以使用INSERT语句将用户的信息添加到mysql.user表中,但必须拥有对mysql.user表的INSERT权限。通常INSERT语句只添加Host、User和authentication_string 这3个字段的值。

GRANT priv_type ON database.table TO user [IDENTIFIED BY [PASSWORD] 'password']

CREATE USER name [ [ WITH ] option [ ... ] ] option可以是:SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | BYPASSRLS | NOBYPASSRLS | CONNECTION LIMIT connlimit | [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL | VALID UNTIL 'timestamp' | IN ROLE role_name [, ...] | IN GROUP role_name [, ...] | ROLE role_name [, ...] | ADMIN role_name [, ...] | USER role_name [, ...] | SYSID uid
修改用户

RENAME USER 旧用户名 TO 新用户名

SET PASSWORD=PASSWORD(新用户密码)

Alter user ‘用户名’@‘主机地址’password with ‘加密策略’by ‘新密码’ Mysql5.7加密策略 mysql_native_password Mysql8.0加密策略caching_sha2_password

Alter user ‘用户名’@‘主机地址’ password expire never;
ALTER USER role_specification [ WITH ] option [ ... ] option 可以是:SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | BYPASSRLS | NOBYPASSRLS | CONNECTION LIMIT connlimit | [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL | VALID UNTIL 'timestamp'

ALTER USER name RENAME TO new_name

ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] SET configuration_parameter { TO | = } { value | DEFAULT }

ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] SET configuration_parameter FROM CURRENT

ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] RESET configuration_parameter

ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] RESET ALL

其中role_specification可以是:role_name | CURRENT_USER | SESSION_USER

删除用户 DROP USER [ IF EXISTS ] name [, ...]

2.2.2.模式管理

mysql与UXDB模式管理对照表

操作 Mysql uxdb 备注
创建模式 create schema [if not exists] <模式名> [[default] character set <字符集>][[default] collate <校对规则名>];

在mysql中数据库和模式是同一种

CREATE SCHEMA schema_name [ AUTHORIZATION role_specification ] [ schema_element [ ... ] ] role_specification 可以是:user_name | CURRENT_USER | SESSION_USER
删除模式 drop schema 模式名 CASCADE DROP SCHEMA [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]

2.2.3.基表管理

Mysql与UXDB基表管理对照表

操作 Mysql uxdb 备注
创建基表 CREATE TABLE <表名> (<列名1> <类型1> [,…] <列名n> <类型n>) [表选项][分区选项]; CREATE [ [GLOBAL { TEMPORARY | TEMP } ] TABLE [ IF NOT EXISTS ] table_name OF [SCHEMA .]type_name [ ( { column_name [ WITH OPTIONS ] [ column_constraint [ ... ] ] | table_constraint } [, ... ] ) ] [ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ] [ TABLESPACE tablespace_name ] [ COMMENT [ = ] ' comment_info ']
修改基表 ALTER TABLE <表名> [修改选项]

修改选项的语法格式如下:

{ ADD COLUMN <列名> <类型> | CHANGE COLUMN <旧列名> <新列名> <新列类型> | ALTER COLUMN <列名> { SET DEFAULT <默认值> | DROP DEFAULT } | MODIFY COLUMN <列名> <类型> | DROP COLUMN <列名> | RENAME TO <新表名> | CHARACTER SET <字符集名> | COLLATE <校对规则名> }
ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] action [, ... ] ALTER TABLE [ IF EXISTS ] table_name ENABLE/DISABLE [VALIDATE/NOVALIDATE] CONSTRAINT constraint_name action 是以下之一:DISABLE TRIGGER [ trigger_name | ALL | USER ] ENABLE TRIGGER [ trigger_name | ALL | USER ] ENABLE REPLICA TRIGGER trigger_name ENABLE ALWAYS TRIGGER trigger_name
删除基表 DROP TABLE [IF EXISTS] 表名1 [ ,表名2, 表名3 ...][CASCADE] DROP TABLE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ] IF EXISTS如果该表不存在则不要抛出一个错误,而是发出一个提示

2.2.4.数据操作

Mysql与UXDB插入数据操作对照表

操作 Mysql uxdb 备注
INSERT INTO ... VALUES... INSERT [INTO] <table> [(<column_name>{,<column_name>})] VALUES(<value>{,<value>});

INSERT INTO table_name [ AS alias ] [ ( column_name [, ...] ) ] [ OVERRIDING { SYSTEM | USER } VALUE ] { DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query } [ ON CONFLICT [ conflict_target ] conflict_action ] [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]

INSERT table_name SET assignment_list ON DUPLICATE KEY UPDATE assignment_list

其中 conflict_target 可以是以下之一: ( { index_column_name | ( index_expression ) } [ COLLATE collation ] [ opclass ] [, ...] ) [ WHERE index_predicate ] ON CONSTRAINT constraint_name

并且 conflict_action 是以下之一:

DO NOTHING DO UPDATE SET { column_name = { expression | DEFAULT } | ( column_name [, ...] ) = [ ROW ] ( { expression | DEFAULT } [, ...] ) | ( column_name [, ...] ) = ( sub-SELECT ) } [, ...] [ WHERE condition ]
INSERT INTO ... SELECT ... INSERT [INTO] <table> [(<column_name>{,<comumn_name>})] SELECT (column,column,...) FROM ... INSERT INTO table_name [ AS alias ] [ ( column_name [, ...] ) ] { DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query } query(select语句)也可以包含with字句
序列值的插入 nextval(序列名) NEXTVAL(sequence) 通过<sequence>.NEXTVAL可以查询
时间类型数据插入 需要TO_DATE进行格式转换 需要TO_DATE进行格式转换
**Mysql与UXDB修改数据操作对照**
操作 Mysql uxdb 备注
update UPDATE <表名> SET 字段 1=值 1 [,字段 2=值 2… ] [WHERE 子句 ] [ORDER BY 子句] [LIMIT 子句] UPDATE [ ONLY ] {table_name [ * ] [ [ AS ] alias ] | subquery} [[NATURAL] join_type JOIN {table_name [ * ] [ [ AS ] alias ] | subquery} [ON join_condition | USING ( join_column [, ...] )] SET { column_name = { expression | DEFAULT } | ( column_name [, ...] ) = [ ROW ] ( { expression | DEFAULT } [, ...] ) | ( column_name [, ...] ) = ( sub-SELECT ) } [, ...] [ FROM from_list ] [ WHERE condition | WHERE CURRENT OF cursor_name ] [ ORDER BYexpression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ] [ LIMIT { count } ] [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]

Mysql与UXDB删除数据操作对照表

操作 Mysql uxdb 备注
delete DELETE FROM <表名> [WHERE 子句] [ORDER BY 子句] [LIMIT 子句] DELETE table_name WHERE [ condition ] [ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ] [ LIMIT { count } ]
truncate TRUNCATE [TABLE] 表名 TRUNCATE [ TABLE ] [ ONLY ] name [ * ] [, ... ] [ RESTART IDENTITY | CONTINUE IDENTITY ] [ CASCADE | RESTRICT ]
**Mysql与UXDB查询数据操作对照表**
操作 Mysql uxdb 备注
单表查询 SELECT {* | <字段列名>} [FROM <表 1>, <表 2>… [WHERE <表达式> [GROUP BY <group by definition> [HAVING <expression> [{<operator> }…]] [ORDER BY <order by definition>] [LIMIT[<offset>,] <row count>] ] SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ] * | expression [ [ AS ] output_name ] [, ...] INTO [ TEMPORARY | TEMP | UNLOGGED ] [ TABLE ] new_table [ FROM from_item [, ...] ] [ WHERE condition ] [ GROUP BY expression [, ...] ] [ HAVING condition [, ...] ] [ WINDOW window_name AS ( window_definition ) [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ] [ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ] [ LIMIT { count | ALL } ] [ OFFSET start [ ROW | ROWS ] ] [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ] [ FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ] [...] ]
连接查询 连接语法的基本形式:

表1 连接方式 join 表2 on 连接条件;

内连接:

表1 inner join 表2 on 表1.列名=表2.列名;

左外连接:

表1 left outer join 表2 on 连接条件;

右外连接:

表1 fight outer join 表2 on 连接条件;

全连接:

表1 full outer join 表2 on 连接条件;

跨连接(cross join):

表1 cross join 表2;

内连接(inner join):

表1 inner join 表2 on 表1.列名=表2.列名;

左外连接(left outer join):

表1 left outer join 表2 on 表1.列名=表2.列名;

右外连接(right outer join):

表1 fight outer join 表2 on 表1.列名=表2.列名;

全连接(full outer join):

表1 full outer join 表2 on 表1.列名=表2.列名;

跨连接(cross join):

表1 cross join 表2;

子查询 With recursive cte_name(column_list)as( initial_query union[all] Recursive_query ) Select * from cte_name;

cte_name:递归查询的名称

column_list:查询结果的列名列表

initial_query:初始查询语句

Recursive_query:递归查询语句

union[all]:将两个查询结果合并

Select * from cte_name:最终查询结果

[ WITH [ RECURSIVE ] with_query [, ...] ] SELECT * FROM table_name

其中with_query可以是:

with_query_name [ ( column_name [, ...] ) ] AS [ [ NOT ] MATERIALIZED ] ( select | values | insert | update | delete )
如果指定了RECURSIVE,则允许一个SELECT子查询使用名称引用自身。这样一个子查询的形式必须是: non_recursive_term UNION [ ALL | DISTINCT ] recursive_term [ SEARCH { BREADTH | DEPTH } FIRST BY c_alias [,c_alias ] ... SET [ ordering_column ] [ CYCLE c_alias [,c_alias] SET cycle_mark_c_alias [TO cycle_value DEFAULT no_cycle_value] USING cycle_path_col_name ] SELECT ... FROM with_query_name;
带 EXISTS 谓词的子查询 EXISTS <表子查询> EXISTS (subquery)
查询结果的合并 { UNION | INTERSECT | EXCEPT} [ ALL | DISTINCT ] select { UNION | INTERSECT | EXCEPT | MINUS } [ ALL | DISTINCT ] select
GROUP BY 子句 GROUP BY grouping_element [, ...] GROUP BY grouping_element [, ...]
ORDER BY 子句 order by expression asc|desc USING operator order by [NOT] ISNULL(field), field ASC|DESC; order by IF(ISNULL(field),1,0),field ASC|DESC; IF(ISNULL(field),0,1),field ASC|DESC; ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...]
HAVING子句 HAVING condition HAVING condition
选取前几条数据 Limit N Limit N
全文检索 FULLTEXT KEY fulltext_name(fullText_column) Create FULLTEXT index fulltext_name on tablename(fullText_column)

WITH PARSER ngram 是指定分词引擎。

全文查询的关键字为MATCH和AGAINST。

MATCH (col1,col2,...) AGAINST (expr [search_modifier]) search_modifier: { IN BOOLEAN MODE | WITH QUERY EXPANSION }
SELECT * FROM tablename WHERE fullText_column like '%'search contents'%';
层次查询 需要通过创建函数,手动实现递归 START WITH condition CONNECT BY [NOCYCLE] condition | CONNECT BY [ NOCYCLE ] condition START WITH condition | CONNECT BY [ NOCYCLE] condition
查看执行计划 Explain [analyze] 查询语句 EXPLAIN [ ( option [, ...] ) ] statement EXPLAIN [ ANALYZE ] [ VERBOSE ] state option可以是:ANALYZE [ boolean ] VERBOSE [ boolean ] COSTS [ boolean ] SETTINGS [ boolean ] BUFFERS [ boolean ] TIMING [ boolean ] SUMMARY [ boolean ] FORMAT { TEXT | XML | JSON | YAML }

2.2.5.视图管理

Mysql与UXDB视图管理对照表

操作 Mysql uxdb 备注
创建视图 CREATE [OR REPLACE] [ALGORITHM={UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]

WITH [CASCADED | LOCAL] CHECK OPTION决定了是否允许更新数据使记录不再满足视图的条件。

LOCAL:只要满足本视图的条件就可以更新。

CASCADED:必须满足所有针对该视图的所有视图的条件才可以更新。CASCADED为默认值。

CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] [ RECURSIVE ] VIEW name [ ( column_name [, ...] ) ] [ WITH (view_option_name [=view_option_value][, ... ])] AS query [ WITH [ CASCADED | LOCAL ] CHECK OPTION [CONSTRAINT cons_name]]
修改视图 利用关键字REPLACE,语法同CREATE VIEW相同。 利用关键字REPLACE,语法同CREATE VIEW相同。
删除视图 DROP VIEW [IF EXISTS] view_name [,view_name]...[REPLACE | CASCADED] DROP VIEW [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
SELECT 与表的SELECT基本一致 与表的SELECT基本一致
INSERT 与表的insert基本一致 一般情况下视图不支持insert插入数据,若该视图是可更新视图,则支持insert的操作。
UPDATE 与表的updaet基本一致 只有创建的视图为可更新视图,才支持UPDATE的操作,否则报错。
DELETE 与表的delete基本一致 一般情况下视图不支持delete插入数据,若该视图是可更新视图,则支持delete的操作。

2.2.6.索引管理

Mysql与UXDB索引管理对照表

操作 Mysql uxdb 备注
创建索引 CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name [index_type] ON tbl_name (key_part,...) [index_option] [algorithm_option | lock_option] ...

key_part:col_name [(length)] [ASC | DESC]

index_option:{ KEY_BLOCK_SIZE [=] value | index_type | WITH PARSER parser_name | COMMENT 'string' }

index_type: USING {BTREE | HASH}

algorithm_option:ALGORITHM [=] {DEFAULT | INPLACE | COPY}

lock_option:LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE}

CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] name ] ON [ ONLY ] table_name [ USING method ] ({ column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] ) [INCLUDE (column_name [, ...])] [ WITH ( storage_parameter = value [, ... ] ) ] [TABLESPACE tablespace_name] [WHERE predicate]

1.UXDB不支持BITMAP关键字创建位图索引。

2.UXDB支持并发构建索引;支持only关键字,如果该表是分区表,指示不要在分区上递归创建索引。默认会递归创建索引。

删除索引

alter table tablename drop index indexname;

drop index indexname on tablename;

DROP INDEX [CONCURRENTLY] [IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]

1.支持CONCURRENTLY关键字,删除索引并且不阻塞在索引基表上的并发选、插入、更新和删除操作。

2.不支持FORCE关键字。

2.2.7.序列管理

Mysql与UXDB序列管理对照表

操作 Mysql uxdb 备注
创建序列 Mysql通过新建表的方式来实现sequence功能,use loki_dev;

1. 新建序列表

drop table if exists sequence; create table sequence ( seq_name VARCHAR(50) NOT NULL, -- 序列名称 current_val INT NOT NULL, -- 当前值 increment_val INT NOT NULL DEFAULT 1, -- 步长(跨度) PRIMARY KEY (seq_name));

2. 新增一个序列

INSERT INTO sequence VALUES ('seq_dev_num', '0', '1'); commit ;

3. 创建函数用于获取序列当前值(v_seq_name参数值代表序列名称)

create function currval(v_seq_name VARCHAR(50)) returns integer begin declare value integer; set value = 0; select current_val into value from sequence where seq_name = v_seq_name; return value; end;

4. 查询当前值

select currval('seq_dev_num');

5. 创建函数用于获取序列下一个值(v_seq_name参数值代表序列名称)

create function nextval (v_seq_name VARCHAR(50)) returns integer begin update sequence set current_val = current_val + increment_val where seq_name = v_seq_name; return currval(v_seq_name); end;

6. 查询下一个值

select nextval('seq_dev_num');
CREATE [ TEMPORARY | TEMP ] SEQUENCE [ IF NOT EXISTS] name [ INCREMENT [ BY ] increment ] [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ] [ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ] [ OWNED BY { table_name.column_name | NONE } ]

1.UXDB支持TEMPORARY 、TEMP关键字,创建临时序列。

2.IF NOT EXISTS如果已经存在一个同名的关系时不要抛出错误,给出一个提示。

修改序列 ALTER SEQUENCE [ IF EXISTS ] name [ AS data_type ] [ INCREMENT [ BY ] increment ][ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ] [ START [ WITH ] start ] [ RESTART [ [ WITH ] restart ] ] [ CACHE cache ] [ [ NO ] CYCLE ] [ OWNED BY { table_name.column_name | NONE } ] UXDB支持可选子句AS data_type改变序列的数据类型。有效类型是smallint、integer和bigint。当且仅当先前的最小值和最大值是旧数据类型的最小值或最大值时,更改数据类型会自动更改序列的最小值和最大值。
删除序列 Drop table 序列名 DROP SEQUENCE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ] 一致

2.2.8.全文索引

Mysql与UXDB全文索引管理对照表

操作 Mysql uxdb 备注
创建全文索引 FULLTEXT KEY fulltext_name(fullText_column) Create FULLTEXT index fulltext_name on tablename(fullText_column)

WITH PARSER ngram是指定分词引擎。

全文查询的关键字为MATCH和AGAINST。

MATCH (col1,col2,...) AGAINST (expr [search_modifier]) search_modifier: { IN BOOLEAN MODE | WITH QUERY EXPANSION }
英文检索支持语法:CREATE INDEX idx_fulltext_search ON table_name USING gin (to_tsvector('english', column_name));

中文检索使用zhparser插件实现此功能:

1.安装zhparser解析器;

2.创建FTS配置;

3.添加token映射。

uxdb通过调用插件的方式实现。
修改全文索引
删除全文索引 drop index fulltextname on tablename ; alter table tablename drop index fulltextname ;

2.2.9.表空间管理

Mysql与UXDB表空间管理对照表

操作 Mysql uxdb 备注
创建表空间 Create tablespace tablespacename add tablespacename CREATE TABLESPACE tablespace_name [OWNER { new_owner | CURRENT_USER | SESSION_USER }] LOCATION 'directory' [WITH (tablespace_option = value [, ... ])] UXDB在创建表空间时,允许用户指定表空间所有者,在安全功能开启后,创建表空间时不允许指定拥有者,默认uxsmo用户。
修改表空间 Alter tablespace tablespacename add tablespacename ALTER TABLESPACE name RENAME TO new_name ALTER TABLESPACE name OWNER TO {new_owner | CURRENT_USER | SESSION_USER } ALTER TABLESPACE name SET (tablespace_option = value [, ... ] ) ALTER TABLESPACE name RESET (tablespace_option [, ... ] ); UXDB不支持在线/离线操作,不支持备份模式开始、结束设置。
删除表空间 Drop tablespace tablespacename DROP TABLESPACE [IF EXISTS ] name

2.3.存储过程

Mysql与UXDB存储过程对照表

操作 Mysql uxdb 备注
创建存储过程 CREATE [DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name ([[ IN | OUT | INOUT ] param_name type [,...]]) [characteristic ...] BEGIN ...... END $$ CREATE [ OR REPLACE ] PROCEDURE name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = } default_expr ] [, ...] ] ) { LANGUAGE lang_name | TRANSFORM { FOR TYPE type_name } [, ... ] | [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER | SET configuration_parameter { TO value | = value | FROM CURRENT } | AS 'definition' | AS 'obj_file', 'link_symbol' } ...
删除存储过程 DROP PROCEDURE [IF EXISTS] procedure_name; DROP PROCEDURE[IF EXISTS] name[([[argmode] [argname]argtype[,...]])] [,...][CASCADE|RESTRICT]
调用存储过程 CALL procedure_name([parameter [,...]]) CALL name([argument] [, ...])

2.4.触发器

Mysql与UXDB触发器管理对照表

操作 Mysql uxdb 备注
创建触发器 CREATE <触发器名> < BEFORE | AFTER > <INSERT | UPDATE | DELETE > ON <表名> FOR EACH Row<触发器主体> CREATE [ CONSTRAINT ] TRIGGER 触发器名 触发时间 触发事件 ON 操作对象 [FOR EACH ROW] DECLARE Declaration-statements BEGIN pl/sql 语句 END; / uxdb不支持OR REPLACE关键字。
修改触发器状态 ALTER TABLE tablenmae DISABLE TRIGGER trigger_name; ALTER TABLE tablename ENABLE TRIGGER trigger_name; uxdb不支持该DISABLE/ENABLE语法。
删除触发器 drop trigger is exists 数据库名.触发器名; DROP TRIGGER [ IF EXISTS ] name ON table_name [ CASCADE | RESTRICT ]
DML事件支持 INSERT、DELETE、UPDATE INSERT、DELETE、UPDATE
DDL事件支持 TRUNCATE TRUNCATE uxdb支持TRUNCATE。
数据库事件支持 uxdb不支持。
元组级触发器支持 FOR EACH ROW [ FOR [ EACH ] { ROW | STATEMENT } ]
语句级触发器支持 默认 默认
表触发器支持 BEFORE INSERT BEFORE INSERT FOR EACH ROW AFTER INSERT AFTER INSERT FOR EACH ROW BEFORE UPDATE BEFORE UPDATE FOR EACH ROW AFTER UPDATE AFTER UPDATE FOR EACH ROW BEFORE DELETE BEFORE DELETE FRO EACH ROW AFTER DELETE AFTER DELETE FOR EACH ROW 支持
INSTEAD OF触发器支持 Mysql 不支持 CREATE [CONSTRAINT] TIGGER 触发器名 INSTEAD OF 触发事件 ON 触发对象名 [FOR EACH ROW] BEGIN pl/sql 语句 END uxdb不支持[OR REPLACE]。

3.SQL函数

3.1.创建函数

Mysql与UXDB函数管理对照表

操作 Mysql uxdb 备注
创建函数 CREATE FUNCTION 函数名(参数名 参数类型) RETURNS 返回类型 BEGIN 函数体 END CREATE [OR REPLACE ] FUNCTION <函数名定义> [(<参数名> <参数模式> <参数类型> [<默认值表达式>] {,<参数名> <参数模式> <参数类型> [<默认值表达式>]})] RETURN <返回数据类型> [WITH ENCRYPTION] AS | IS [<说明部分>] BEGIN <执行部分> [<异常处理部分>] END;
删除函数 drop function 函数名; DROP FUNCTION <函数名>; 一致
调用函数 SELECT 函数名(参数); SELECT <函数名>[(<参数>{,<参数>})]; 一致

3.2.系统自带函数

Mysql与UXDB数值型函数对照表

数值型函数
Mysql函数名 Mysql函数功能 UXDB对应的函数名 UXDB函数功能
ABS() 返回数字表达式的绝对值 abs(x) 绝对值
ACOS() 返回数字表达式的反余弦值。如果值是不在范围-1到1,则返回NULL acos(x) 给出反余弦的值
ASIN() 返回数字表达式的反正弦。返回NULL,如果值不在范围-1到1 asin(x) 反正弦
ATAN() 返回数字表达式的反正切 atan(x) 反正切
ATAN2() 返回传递给它的两个变量的反正切 atan2(x) 返回指定的两个数除法运算的结果的反正切
BIT_AND() 返回按位AND运算表达中的所有位 bit_and() 所有非NULL输入值的按位与(AND),如果全部输入值皆为NULL,那么结果也为NULL 
BIT_COUNT() 返回传递给它的二进制值的字符串表示 - -
BIT_OR() 返回传递表达的所有位的位或 bit_or() 所有非NULL输入值的按位或(OR),如果全部输入值皆为NULL,那么结果也为NULL
CEIL() 返回最小的整数值但不能比传递的数字表达式小 ceil(dp or numeric) 不小于参数的最近的整数
CEILING() 返回最小的整数值但不能比传递的数字表达式小 CEILING(n) 求大于或等于数值n的最小整数,等价于CEIL
CONV() 表达式从一个基数到另一个基数转换的数字 - -
COS() 返回传递数字表达式的余弦值。数字表达式应该用弧度表示 cos(x) 返回一个给定数字的余弦
COT() 返回传递数字表达式的余切 COT(n) 求数值n的余切值
DEGREES() 返回数字表达式从弧度转换为度 DEGREES(n) 求弧度n对应的角度值
EXP() 返回数值表达式的自然对数(E)为基数的幂 EXP(n) 求数值n的自然指数
FLOOR() 返回最大整数值但不能大于通过表达式数值 FLOOR(n) 求小于或等于数值n的最大整数
bin(decimal_num) 十进制转二进制 10::bin(decimal_num) 十进制转二进制
hex(decimal_num) 十进制转十六进制 hex(decimal_num) to_hex(decimal_num) 十进制转十六进制
FORMAT() 返回数字表达式舍入到小数位数 FORMAT() 返回数字表达式舍入到小数位数
GREATEST() 返回输入表达式的最大值 GREATEST(n1,n2,n3) 求n1、n2和n3中的最大浮点数
INTERVAL() 需要多个表达式exp1, exp2和exp3等..如果为exp1小于exp2返回0,如果为exp1小于exp3返回1等 - -
LEAST() 给两个或两个以上时,返回所有输入的最小值 LEAST(n1,n2,n3) 求n1、n2和n3中的最小浮点数
LOG() 返回通过数字表达式的自然对数 LOG(n1[,n2]) 求数值n2以n1为底数的对数
LOG10() 返回传递表达的基数为10对数的数值 LOG10(n) 求数值n以10为底的对数
MOD() 返回表达式由另一个表达式除以剩余部分 MOD(m,n) 求数值m被数值n除的余数
OCT() 返回通过数字表达式的八进制值的字符串表示。如果传递值为NULL,返回NULL - -
PI() 返回圆周率的值 PI() 得到常数π
POW() 返回一个表达式到另一个表达的次方值 Pow(x,y) 返回x的y次乘方的结果值
POWER() 返回一个表达式到另一个表达的次方值 POWER(n1,n2) 求数值n2以n1为基数的指数
RADIANS() 返回传递表达从度转换为弧度值 RADIANS(n) 求角度n对应的弧度值
ROUND() 返回数字表达式四舍五入到整数。可用于舍入表达式为小数点数值 ROUND(n[,m]) 求四舍五入值函数
rand() 返回随机浮点数,范围[0.0, 1.0) rand() 返回随机浮点数,范围[0.0, 1.0)
SIN() 返回给定的数字表达的正弦值(弧度) SIN(n) 求数值n的正弦值
SQRT() 返回数字表达式的非负平方根 SQRT(n) 求数值n的平方根
STD() 返回数字表达式的标准偏差
STDDEV() 返回数字表达式的标准偏差 stddev(expression) 统计数据表选中行x列的标准误差
TAN() 返回以弧度表示数值表达式的正切值 TAN(n) 求数值n的正切值
TRUNCATE() 返回exp1小数位数字截断到exp2。如果exp2为0,则结果将没有小数点 TRUNCATE(n[,m]) 截取数值函数,等价于TRUNC

Mysql与UXDB日期函数对照表

数值型函数
Mysql函数名 Mysql函数功能 UXDB对应的函数名 UXDB函数功能
current_date() 获取当前日期 current_date() 获取当前日期
CURDATE() 获取当前日期 CURDATE() 获取当前日期
CURRENT_DATE 获取当前日期 CURRENT_DATE 获取当前日期
current_time() 获取当前时间 current_time() 获取当前时间
CURTIME([fsp]) 获取当前时间 CURTIME([fsp]) 获取当前时间
CURRENT_TIME 返回时分秒 CURRENT_TIME 返回时分秒,秒最高精确到6位
current_timestamp() 获取当前时间戳 current_timestamp() 获取当前时间戳
current_timestamp 获取当前时间戳 current_timestamp 获取当前时间戳
LOCALTIME 获取当前时间戳 LOCALTIME 获取当前时分秒
LOCALTIME([fsp]) 获取当前时间戳 - -
SYSDATE([fsp]) 获取当前时间戳 - -
date() 返回datetime的日期部分 date() 返回datetime的日期部分
date_add(date, interval d_value_type) 以date为基础,添加日期或者时间,interval后面指定时间的类型,例如year、month、day等等 date_add(date, interval d_value_type) 以date为基础,添加日期或者时间,interval 后面指定时间的类型,例如year、month、day等等
date_sub(date, interval d_value_type) 以date为基础,减去日期或者时间,interval 后面指定时间的类型,例如year、month、day等等 date_sub(date, interval d_value_type) 以date为基础,减去日期或者时间,interval 后面指定时间的类型,例如year、month、day等等
datediff(date1, date2) 两个日期的差,单位是天数 datediff(date1, date2) 两个日期的差,单位是天数
now() 获取当前日期时间 now() 获取当前日期时间
FROM_UNIXTIME(unix_timestamp), FROM_UNIXTIME(unix_timestamp,format) 从时间戳返回'YYYY-MM-DD HH:MM:SS' 或者YYYYMMDDHHMMSS,加入format后根据所需的format显示 TO_TIMESTAMP(unix_timestamp) to_char( TO_TIMESTAMP(unix_timestamp),format); 时间戳转换日期,若后面有转换格式需要用to_char进行转换,不支持%Y年%m月%d,%格式
MONTH(date) 从给定的DateTime中查找月份 MONTH(date) 从给定的时间中查找月份
MONTHNAME(date) 从给定的DateTime中查找月份名 - -
DAYNAME(date) 从给定的DateTime中获取当天为星期几 to_char(timestamp date, 'Day'); 从给定的时间中获取当天为星期几
DAY(date),DAYOFMONTH(date) 从给定的DateTime中查找日期1-31或者0 DAY(date),DAYOFMONTH(date) 从给定的时间中查找日期1-31或者0
DAYOFWEEK(date) 从给定的DateTime中获取当天为一周的第几天 1-7==>星期天-星期六 - -
DAYOFYEAR(date) 从给定的DateTime中获取当天为当年的第几天 1-365(366) extract(doy from timestamp date); 从给定的时间中获取当天为当年的第几天
WEEK(date[,mode]) 判断是一年的第几周,如果1-1所在周在新的一年多于4天,则将其定为第一周;否则将其定为上一年的最后一周。mode是用来人为定义一周从星期几开始 WEEK 判断是一年的第几周
WEEKOFYEAR(date) 类似week(date,3),从周一开始计算一周 - -
QUARTER(date) 返回1-4 QUARTER(date) 返回1-4
HOUR(time) 返回时间中的小时数,可以大于24 HOUR(time) 获取时间中的小时数
MINUTE(time) 返回时间中的分钟数 MINUTE(time) 获取时间中的分钟数
SECOND(time) 返回时间中的秒数 SECOND(time) 获取时间中的秒数
EXTRACT(unit FROM date) 提取日期时间中的要素 EXTRACT(field FROM source) field参数指定要从日期/时间值中提取哪个字段;这个资源是TIMESTAMP或INTERVAL类型的值。如果您通过DATE值,该函数会将其强制转换为TIMESTAMP值
TIME_TO_SEC(time) 将时间转化为秒 - -
SEC_TO_TIME(seconds) 将秒转化为时分秒 - -
TO_DAYS(date) 从第0年开始的天数 TO_DAYS(date) 返回从0000年(公元1年)至当前日期的总天数
ADDDATE(date,INTERVAL expr unit) 将指定的时间间隔添加到给定的日期和时间 ADDDATE(date,INTERVAL’ expr unit’) 将指定的时间间隔添加到给定的日期和时间,后面的时间间隔要用单引号
ADDDATE(expr,days) 将指定的时间间隔添加到给定的日期和时间 ADDDATE(expr,days) 将指定的时间间隔添加到给定的日期和时间
DATE_ADD(date,INTERVAL expr unit) 将指定的时间间隔添加到给定的日期和时间 DATE_ADD(date,INTERVAL ‘expr unit’) 将指定的时间间隔添加到给定的日期和时间,后面的时间间隔要用单引号
DATE_SUB(date,INTERVAL expr unit) 将指定的时间间隔减掉到给定的日期和时间 DATE_SUB(date,INTERVAL ‘expr unit’) 将指定的时间间隔减掉到给定的日期和时间,后面的时间间隔要用单引号
ADDTIME(expr1,expr2) 给指定时间加上一个时间 - -
SUBTIME(expr1,expr2) 给指定时间减掉一个时间 - -
DATE_FORMAT(date,format) 用于以不同的格式显示日期/时间数据 DATE_FORMAT(date,format) 用于以不同的格式显示日期/时间数据
TIMEDIFF(expr1,expr2) 返回相隔的时间 - -
WEEKDAY(date) 返回指定日期数据的星期数索引值 WEEKDAY(date) 返回指定日期数据的星期数索引值

Mysql与UXDB字符串函数对照表

字符串函数
Mysql函数名 Mysql函数功能 UXDB对应的函数名 UXDB函数功能
charset(str) 返回字符串对应的字符集 - -
concat(string2, […, …]) 连接字符串 concat(string2, […, …]) 连接字符串
concat_ws(x, s1, s2, ...) 使用连接符x连接其他参数产生的字符串 concat_ws(x, s1, s2, ...) 使用连接符x连接其他参数产生的字符串
instr(string, substring) 返回substring在string中出现的位置,没有则返回0 instr(string, substring) 返回substring在string中出现的位置,没有则返回0
ucase(str)、upper(str) 转化为大写 upper 转化为大写
lcase(str)、lower(str) 转化为小写 lower 转化为小写
left(str, length) 从str左边起取length个字符 left(str, length) 从str左边起取length个字符
right(str, length) 从str右边起取length个字符 right(str, length) 从str右边起取length个字符
length(str) 返回字符串的字节长度,如utf8中,一个汉字3字节,数字和字母算一个字节 length(str) 获取str的长度,一个汉字算一个字节
char_length(str) 返回str所包含的字符数,一个多字节字符算一个字符 char_length(str) 返回str所包含的字符数,一个多字节字符算一个字符
REPEAT(str,count) 返回str重复count次得到的新字符串 REPEAT(str,count) 返回str重复count次得到的新字符串
replace(str, search_str, replace_str) 在str中,用replace_str替换search_str replace(str, search_str, replace_str) 在str中,用replace_str替换search_str
SPACE(N) 返回长度为N的空白字符串 - -
substring(str, position, [length]) 从str的position位置开始,截取length长度的字符串 substring(str, position, [length]) 从str的position位置开始,截取length长度的字符串
strcmp(str1, str2) 逐字符比较两字符串大小,相对返回0,前者大返回1,否则返回-1 strcmp(str1, str2) 逐字符比较两字符串大小,相对返回0,前者大返回1,否则返回-1
ltrim(str)、rtrim(str)、trim(str) 去除字符串前后的空格 ltrim(str)、rtrim(str) 去除字符串前后的空格,去除所有的空格可以使用replace函数
ifnull(val1, val2) val1为null,返回val2,否则返回val1的值 COALESCE(val1, val2) val1为null,返回val2,否则返回val1的值
INSERT(str,pos,len,newstr) 返回str,其起始于pos,长度为len的子串被newstr取代 insert(str,pos,len,newstr) 返回str,其起始于pos,长度为len的子串被newstr取代
lpad(s1, len, s2) 用s2在s1左边填充至长度为len, 若s1的长度大于len,则截断字符串s1至长度len返回 lpad(s1, len, s2) 用s2在s1左边填充至长度为len, 若s1的长度大于len,则截断字符串s1至长度len返回
rpad(s1, len, s2) 用s2在s1右边填充至长度为len, 若s1的长度大于len,则截断字符串s1至长度len返回 rpad(s1, len, s2) 用s2在s1右边填充至长度为len, 若s1的长度大于len,则截断字符串s1至长度len返回
LOCATE(substr,str) 返回字符串中特定子串的位置 LOCATE(substr,str) 返回字符串中特定子串的位置
LOCATE(substr,str,pos) 返回字符串中特定子串的位置 LOCATE(substr,str,pos) 返回字符串中特定子串的位置
INSTR(str,substr) 返回字符串中特定子串的位置 INSTR(str,substr) 返回字符串中特定子串的位置
POSITION(substr IN str) 返回字符串中特定子串的位置 POSITION(substr IN str) 返回字符串中特定子串的位置
MAKE_SET(bits,str1,str2,...) 由bits的作为位图来选取strN参数,选中的参数用','连接后返回 - -
FIND_IN_SET(str,strlist) strlist是由','分隔的字符串,若str不在strlist或者strlist为空字符串,则返回0;若任意一个参数为NULL则返回null FIND_IN_SET(str,strlist) strlist是由','分隔的字符串,若str不在strlist或者strlist为空字符串,则返回0;若任意一个参数为NULL则返回null
FIELD(str,str1,str2,str3,...) 返回str在后面的str列表中第一次出现的位置,若找不到str或者str为NULL, 则返回0 FIELD(str,str1,str2,str3,...) 返回str在后面的str列表中第一次出现的位置,若找不到str或者str为NULL, 则返回0
ELT(N,str1,str2,str3,...) 返回参数strN,若N大于str参数个数,则返回NULL ELT(N,str1,str2,str3,...) 返回参数strN,若N大于str参数个数,则返回NULL

Mysql与UXDB条件判断函数对照表

条件判断函数
Mysql函数名 Mysql函数功能 UXDB对应的函数名 UXDB函数功能
IF(expr1,expr2,expr3) 如果expr1不为0或者NULL,则返回expr2的值,否则返回expr3的值 IF(expr1,expr2,expr3) 如果expr1不为0或者NULL,则返回expr2的值,否则返回expr3的值
IFNULL(expr1,expr2) 如果expr1不为NULL,返回expr1,否则返回expr2 IFNULL(expr1,expr2) 如果expr1不为NULL,返回expr1,否则返回expr2
NULLIF(expr1,expr2) 如果expr1=expr2则返回NULL,否则返回expr1 NULLIF(expr1,expr2) 如果expr1=expr2则返回NULL,否则返回expr1
CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END 当compare_value=value时返回result
CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END 当condition为TRUE时返回result

Mysql与UXDB加密和压缩函数对照表

条件判断函数
Mysql函数名 Mysql函数功能 UXDB对应的函数名 UXDB函数功能
MD5(str) 计算MD5 128位校验和,返回32位16进制数构成的字符串,当str为NULL时返回NULL。可以用作哈希密码 MD5(str) 计算MD5 128位校验和,返回32位16进制数构成的字符串,当str为NULL时返回NULL。可以用作哈希密码
SHA1(str), SHA(str) 计算160位校验和,返回40位16进制数构成的字符串,当str为NULL时返回NULL - -
SHA2(str, hash_length) 计算SHA-2系列的哈希方法(SHA-224, SHA-256, SHA-384, and SHA-512)。第一个参数为待校验字符串,第二个参数为结果的位数(224,256,384,512) - -
ENCRYPT(str[,salt]) 用unix crypt()来加密str。salt至少要有两位字符,否则会返回NULL。若未指定salt参数,则会随机添加salt - -

Mysql与UXDB聚合函数对照表

条件判断函数
Mysql函数名 Mysql函数功能 UXDB对应的函数名 UXDB函数功能
AVG([DISTINCT] expr) 返回expr的平均值,distinct选项用于忽略重复值 AVG([DISTINCT] expr) 返回expr的平均值,distinct选项用于忽略重复值
COUNT([DISTINCT] expr) 返回select中expr的非0值个数,返回值为bigint类型 COUNT([DISTINCT] expr) 返回select中expr的非0值个数,返回值为bigint类型
group_concat 连接组内的非空值 group_concat 连接组内的非空值
MAX([DISTINCT] expr) 返回expr的最大值 MAX([DISTINCT] expr) 返回expr的最大值
MIN([DISTINCT] expr) 返回expr的最小值 MIN([DISTINCT] expr) 返回expr的最小值
SUM([DISTINCT] expr) 返回expr的求和 SUM([DISTINCT] expr) 返回expr的求和
VAR_POP(expr) 计算exrp列中的所有的值的总体方差 VAR_POP(expr) 计算exrp列中的所有的值的总体方差
VARIANCE(expr) 同VAR_POP(expr),但是这是标准sql的一个扩展函数 VARIANCE(expr) 同VAR_SAMP(expr),但是这是标准sql的一个扩展函数
VAR_SAMP(expr) 计算exrp列中的所有的值的样本方差 VAR_SAMP(expr) 计算exrp列中的所有的值的样本方差
STD(expr) 标准sql的一个扩展函数 - -
STDDEV(expr) 为了跟oracle兼容而设置的 STDDEV(expr) 为了跟oracle兼容而设置的
STDDEV_POP(expr) 计算exrp 列中的所有的值的总体方差 STDDEV_POP(expr) 计算exrp列中的所有的值的总体方差
STDDEV_SAMP(expr) 计算exrp列中的所有的值的样本方差 STDDEV_SAMP(expr) 计算exrp列中的所有的值的样本方差

Mysql与UXDB格式或类型转化函数对照表

条件判断函数
Mysql函数名 Mysql函数功能 UXDB对应的函数名 UXDB函数功能
FORMAT(X,D[,locale]) 将数字X转化成'#,###,###.##'格式,D为保留的小数位数 FORMAT(X,D[,locale]) 将数字X转化成'#,###,###.##'格式,D为保留的小数位数
CONV(N,from_base,to_base) 改变数字N的进制,返回值为该进制下的数字构成的字符串 - -
INET_ATON(expr) ip字符串转数字 - -
INET_NTOA(expr) 数字转ip字符串 - -
CAST(expr AS type) 转换数据类型 CAST(expr AS type) 转换数据类型
CONVERT(expr,type), CONVERT(expr USING transcoding_name) type可以为BINARY[(N)],CHAR[(N)],DATE,DATETIME,DECIMAL[(M[,D])],DECIMAL[(M[,D])],TIME,UNSIGNED[INTEGER]等等。transcoding_name如utf8等等 CONVERT(expr,type), CONVERT(expr USING transcoding_name) type可以为BINARY[(N)],CHAR[(N)],DATE,DECIMAL[(M[,D])],DECIMAL[(M[,D])],TIME等等。transcoding_name如utf8等等

4.语法支持

Mysql与UXDB语法支持对照表

语法 Mysql UXDB 备注
UPDATE UPDATE orders LEFT JOIN freports ON freports.order_id = orders.id set orders.finish_at = freports.created_at where orders.id in(1,2,3) UPDATE orders set orders.finish_at = freports.created_at from freports where freports.order_id = orders.id and orders.id in(1,2,3); 左连接表单字段更新
SELECT temp_lo, temp_hi, prcp FROM UPDATE weather SET temp_lo = temp_lo+1, temp_hi = temp_lo+15, prcp = DEFAULT WHERE city = 'San Francisco' AND date = '2003-07-03'; UPDATE weather SET temp_lo = temp_lo+1, temp_hi = temp_lo+15, prcp = DEFAULT WHERE city = 'San Francisco' AND date = '2003-07-03' RETURNING temp_lo, temp_hi, prcp; 更新并返回
- UPDATE accounts SET (cONtact_last_name, cONtact_first_name) = (SELECT last_name, first_name FROM salesmen WHERE salesmen.id = accounts.sales_id); 表关联多字段更新
INSERT - INSERT INTO distributors (did, dname) VALUES (DEFAULT, 'XYZ Widgets') RETURNING did; 插入并返回
INSERT IGONRE INTO distributors (did, dname) VALUES (9, 'Antwerp Design'); INSERT INTO distributors (did, dname) VALUES (9, 'Antwerp Design') ON CONFLICT ON CONSTRAINT distributors_pkey DO NOTHING; 插入冲突则什么都不做
DELETE - DELETE FROM tasks WHERE status = 'DONE' RETURNING *; 删除并返回删除的内容
INDEX ALTER TABLE table_name ADD INDEX index_name (column_list) ; - UXDB添加索引不用像mysql 这种alter table,直接create index即可
ALTER TABLE table_name ADD UNIQUE (column_list) ; -
ALTER TABLE table_name ADD PRIMARY KEY (column_list) ; ALTER TABLE table_name ADD PRIMARY KEY (column_list) ;
CREATE INDEX index_name ON table_name (column_list) ; CREATE INDEX index_name ON table_name (column_list) ;
CREATE UNIQUE INDEX index_name ON table_name (column_list) ; CREATE UNIQUE INDEX index_name ON table_name (column_list) ;
DROP INDEX index_name ON table_name ; DROP INDEX index_name ON table_name ;
ALTER TABLE table_name DROP INDEX index_name ; -
ALTER TABLE table_name DROP INDEX index_name ; drop index index_name;
ALTER TABLE table_name DROP primary key ; -
- CREATE UNIQUE INDEX CONCURRENTLY dist_id_temp_idx ON distributors (dist_id); 并行创建索引
- CREATE INDEX CONCURRENTLY dist_id_temp_idx ON distributors (dist_id); 并行创建索引

5.PL/sql语法

5.1.变量与语法

Mysql与UXDB变量与语法对照表

操作 Mysql UXDB 备注
PL/SQL支持的结构

1. 顺序结构;

2. 分支结构,包括条件、循环结构等;

3. 迭代结构,包括子过程、子函数的调用。

1. 顺序结构;

2. 分支结构,包括条件、循环结构等;

3. 迭代结构,包括子过程、子函数的调用。

一致
语句块结构 BEGIN DECLARE .. variable.. ..execute partation.. EXCEPTION ..exception handle .. END; DECLARE .. variable.. BEGIN ..execute partation.. EXCEPTION ..exception handle .. END; 一致
赋值语句 用户变量

方式一:

set @用户变量名 = 值;

set @用户变量名 := 值;

select @用户变量名 := 值;

方式二:

select 字段 into @变量名 from 表;

局部变量

方式一:

set 用户变量名 = 值;

set 用户变量名 := 值;

select @用户变量名 := 值;

方式二:

select 字段 into 变量名 from 表;

variable := expression;
变量定义

用户变量

set @用户变量名 = 值;

set @用户变量名 := 值;

select @用户变量名 := 值;

局部变量(仅仅在begin中有效,应用在begin end中的第一句话)

declare 变量名 类型 [default 值]

variable data_type [:=|DEFAULT] default_value;
返回语句 RETURN; RETURN <结果值>; RETURN; RETURN <结果值>;
退出循环 立即退出循环而无需等待检查条件LEAVE [WHEN condition];

跳过其下的整个代码并开始新的迭代ITERATE [WHEN condition];

EXIT [WHEN condition];
IF 语句 IF <condition1> THEN <perform action1> [ELSIF <condition2> <perform action2>] … [ELSIF <conditionN> <perform actionN>] … [ELSE <perform default action>] END IF; IF <condition1> THEN <perform action1> [ELSIF <condition2> <perform action2>] … [ELSIF <conditionN> <perform actionN>] … [ELSE <perform default action>] END IF;
WHILE循环语句 WHILE <condition> DO <statement1>; [<statement2>;]... END WHILE; WHILE <condition> LOOP <statement1>; [<statement2>;]... END LOOP;
LOOP循环语句 LOOP statements END LOOP; LOOP statements END LOOP;
FOR循环语句 FOR 循环计数器 IN [ REVERSE ] 下限 .. 上限 DO 要执行的语句; END FOR; FOR 循环计数器 IN [ REVERSE ] 下限 .. 上限 LOOP 要执行的语句; END LOOP;
repeat循环语句 REPEAT STATEMENT1 UNTIL EXPRESSION END REPEAT -
NULL语句 NULL; Raise notice
打印语句 SELECT xx; SIGNAL SQLSTATE .... dbms_output.put_line(v_out.xx);
动态语句执行 EXEC EXECUTE
游标定义 DECLARE cursor_name CURSOR FOR SELECT_statement; cursor_name [ [NO] SCROLL ] CURSOR [( name datatype, name data type, ...)] FOR query;
打开游标 OPEN cursor_name; OPEN unbound_cursor_variable [ [ NO ] SCROLL ] FOR query; OPEN cursor_variable[ (name:=value,name:=value,...)];
拨动游标 FETCH [NEXT/PRIOR/FIRST/LAST/ABSOLUTE/RELATIVE] cursor_name INTO variable_name_list; FETCH [ direction { FROM | IN } ] cursor_variable INTO target_variable; bulk into 2123
关闭游标 CLOSE cursor_name; CLOSE cursor_name;
动态语句游标定义 set 变量名=concat(select 查询) prepare cursor_name from 变量名 -
CASE语句 CASE [value] WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END CASE [expression1] WHEN expression2 THEN <statement1>; [<statement2>;...] [WHEN expression3 THEN <statement3>; [<statement4>;]...] ... [ELSE <statement5>; [<statement6>;]...] END CASE;
CASE表达 CASE <表达式> WHEN <值1> THEN <结果1> WHEN <值2> THEN <结果2> ... ELSE <结果n> END CASE WHEN condition THEN result [WHEN ...] [ELSE result] END
自定义异常声明 SIGNAL SQLSTATE <异常状态码> SET MESSAGE_TEXT = <异常内容>; EXIT HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND SELECT <异常内容>; Raise '异常情况';
自定义异常抛出 SIGNAL <异常情况>; Raise <异常情况>;
SELECT INTO 赋值 SELECT COL_NAME[,....] INTO VAR_NAME[,...] TABLE_EXPR SELECT select_expressions INTO target FROM ...;
GOTO语句 goto label_name; goto label_name;
数据类型引用 %TYPE %ROWTYPE %TYPE %ROWTYPE

6.编程接口

Mysql与UXDB支持接口表

接口 Mysql是否支持 UXDB是否支持
SQL92 入门级/过渡级 支持 支持
ODBC 支持 支持
JDBC 支持 支持
OCI 支持 支持
PHP 支持 支持
OO4O 支持
QODBC(QT ODBC) 支持
OCCI 支持
Python 支持
NodeJS 支持
Hibernate 支持 支持
.Net DataProvider 支持

7.大小写

MYSQL兼容模式数据库为大小写敏感的数据库,为了更好的兼容mysql,也可以初始化成大小写不敏感的数据库,如Test在数据库中的存储格式为Test。