1.金仓与mysql的语法区别

1.1 MySQL数据库的分页查询SQL

Mysql的

SELECT * from test LIMIT 0,1;

金仓使用分页查询

SELECT * from test LIMIT 1 OFFSET 0

1.2 自增字段问题

MySQL数据库的自增字段

在建表时,对于整型字段,可以使用AUTO_INCREMENT关键词配置为自增字段;

MySQL数据库中的一个表最多有一个自增的字段

金仓数据库的自增字段

金仓数据库的一张表中支持存在多个自增字段,在使用last_insert_id()时需要制定序列名;

1.3 mysql通过查询更新

update a,(select id from c) as b

set a.id=b.id

where b.id=1;

金仓数据库的查询更新

update a set a.id=b.id from

 (select id from ss) as b where b.id=555;

1.4 插入并返回值

MySQL:无

金仓数据库:

INSERT INTO ss (id,name) VALUES (DEFAULT,’XYZ’) RETURNING id;

1.5 更新并返回

mysq的语法

SELECT temp_lo,temp_hi,prcp FROM UPDATE wheather SET temp_lo =

temp_lo+1,temp_hi = temp_lo+15 WHERE city = ‘San Francisco’;

金仓数据库的更新并返回

update ss set name='aaa' where id=1212 returning id;

1.6 处理数据存在时修改数据,反之新增数据的sql语句

mysql:

INSERT INTO table (id, field, field2) VALUES (1, A, X), (2, B, Y), (3, C, Z)

ON DUPLICATE KEY UPDATE

field=VALUES(Col1), field2=VALUES(Col2);

金仓数据库中

INSERT INTO the_table (id, column_1, column_2)

VALUES (1, 'A', 'X'), (2, 'B', 'Y'), (3, 'C', 'Z')

ON CONFLICT (id) DO UPDATE

SET column_1 = excluded.column_1, column_2 = excluded.column_2;

1.7 null值判断

mysq:支持 ifnull(),NVL(),COALESCE()

金仓:支持COALESCE()

1.8 删除并返回删除的内容

MySQL:无

金仓

DELETE FROM ss WHERE id =1212 RETURNING *;

1.9 MySQL支持的数据类型

1.10 金仓支持的数据类型

  1. 语法

2.1 CASE/WHEN中使用real类型作为条件

-- 创建隐式转换

create or replace function cast_real_to_bool(real) returns bool as $$  

   select $1 <> 0;  

  $$ language sql strict ;

create cast (real as bool) with function cast_real_to_bool as ASSIGNMENT;

2.2 column "xxxx" must appear in the GROUP BY clause or be used in an aggregate function

-- MySQL 的group by : MySQL支持selectlist中非聚集列可以不出现在group by中。sql标准是必须出现 group by中, 如:select col1, col2 from tab group by col1;

-- kingbase 为兼容mysql ,设置了个参数ql_mode参数,目前只支持ONLY_FULL_GROUP_BY选项。如果sql_mode中不包含ONLY_FULL_GROUP_BY,group by语句可以不符合sql标准。 也就是与mysql结果相同。

-- kingbase.conf 中设置 sql_mode = ''

-- 或者执行sql:  

alter system set sql_mode = '';

select sys_reload_conf();

2.3 update ... join

-- 改写方法

update t1 set ...  from t2 where t1.id = t2.id

2.4 create table xxx like tablename

CREATE TABLE table_name (like tablename INCLUDING INDEXES);

-- 需要添加INCLUDING INDEXES 否则索引不会被创建

2.5 提示关系xxx不存在,“sys_user,sysurls,user_config”等

-- 出现与系统同名的表或者视图,可以通过以下方法来解决。

  1. 设置参数 search_path 来解决:
    1. alter database 库名 set search_path to "$user", 使用的模式名, public, sys, sys_catalog, pg_catalog;  
    2.  select sys_reload_conf();
  2. 接口方面
    1. JDBC连接串上添加参数currentSchema=schemaname

jdbc:kingbase8://127.0.0.1:54331/TEST?currentSchema=schemaname

    1. ORM框架映射的类上可以添加@Table(name="user",schema="xxx")显示指定模式名

2.6 错误:语法错误 在“xxxx”或附近的(level,link..)

-- 语句中可能使用到了关键字或保留字,可以通过以下方法进行解决。

  1. 在关键字或者保留字上添加双引号
  2. 数据库配置文件kingbase.conf配置: exclude_reserved_words = level,link,operator....(需要的屏蔽,不需要不建议屏蔽)

 

3. 迁移

3.1 mysql的tinyint类型迁移到金仓中变成bool类型的问题

在迁移工具中创建mysql的连接的时候指定参数tinyInt1isBit=false,然后重新迁移即可

3.2 迁移出现索引或主键失败,(名字重复)

kingbase不允许表、索引等对象同名。迁移工具在遇到同名对象时会报错,需要在迁移配置界面勾选“自动转换对象名称”。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐