Mysql迁移至金仓数据库遇到的部分问题
- kingbase 为兼容mysql ,设置了个参数ql_mode参数,目前只支持ONLY_FULL_GROUP_BY选项。如果sql_mode中不包含ONLY_FULL_GROUP_BY,group by语句可以不符合sql标准。alter database 库名 set search_path to "$user", 使用的模式名, public, sys, sys_catalog, pg_
1.金仓与mysql的语法区别
Mysql的
SELECT * from test LIMIT 0,1;
金仓使用分页查询
SELECT * from test LIMIT 1 OFFSET 0
MySQL数据库的自增字段
在建表时,对于整型字段,可以使用AUTO_INCREMENT关键词配置为自增字段;
MySQL数据库中的一个表最多有一个自增的字段
金仓数据库的自增字段
金仓数据库的一张表中支持存在多个自增字段,在使用last_insert_id()时需要制定序列名;
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;
MySQL:无
金仓数据库:
INSERT INTO ss (id,name) VALUES (DEFAULT,’XYZ’) RETURNING id;
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;
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;
mysq:支持 ifnull(),NVL(),COALESCE()
金仓:支持COALESCE()
MySQL:无
金仓
DELETE FROM ss WHERE id =1212 RETURNING *;
-- 创建隐式转换
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();
-- 改写方法
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”等
-- 出现与系统同名的表或者视图,可以通过以下方法来解决。
- 设置参数 search_path 来解决:
- alter database 库名 set search_path to "$user", 使用的模式名, public, sys, sys_catalog, pg_catalog;
- select sys_reload_conf();
- 接口方面
- JDBC连接串上添加参数currentSchema=schemaname
jdbc:kingbase8://127.0.0.1:54331/TEST?currentSchema=schemaname
-
- ORM框架映射的类上可以添加@Table(name="user",schema="xxx")显示指定模式名
2.6 错误:语法错误 在“xxxx”或附近的(level,link..)
-- 语句中可能使用到了关键字或保留字,可以通过以下方法进行解决。
- 在关键字或者保留字上添加双引号
- 数据库配置文件kingbase.conf配置: exclude_reserved_words = ‘level,link,operator....’(需要的屏蔽,不需要不建议屏蔽)
3. 迁移
3.1 mysql的tinyint类型迁移到金仓中变成bool类型的问题
在迁移工具中创建mysql的连接的时候指定参数tinyInt1isBit=false,然后重新迁移即可
kingbase不允许表、索引等对象同名。迁移工具在遇到同名对象时会报错,需要在迁移配置界面勾选“自动转换对象名称”。
更多推荐
所有评论(0)