mycat全局表实战应用简析(下):多节点自增字段的处理
2017-09-29 12:08
435 查看
在这一篇我们已经了解了mycat全局表的概念:
http://blog.csdn.net/github_26672553/article/details/78125554
我们从终端里连接上mycat,然后创建了
现在我们想要往这个表里插入数据:
呃呃,报错啦:
Error : mycat sequnce err.java.lang.NumberFormatException: null
是因为:我们
2、哪个文件?
sequence_conf.properties这个文件
明白了意思,你可以根据自己需要修改。
如果执行我们执行:
得到的结构是:
3、现在我们往要
这样就解决了
记住:我们刚才是往mycat里插入的,因为是全局表,其他节点的表里也同时插入的该条记录。
4、sequence_conf.properties配置的更多
这是我自定义的sequence,怎么获取呢?
值得注意是: 如果你要切换到另外一个sequence,那么之前使用过的再下一次使用又回到了原点。什么意思?
还要新建一些函数。
这里不啰嗦了,详细看下面文档:
到这里,我们就介绍了2种方式来处理mycat全局表中 自增字段的问题。我个人觉得 从文件中获取自增字段的值 这种方式更加简单。
http://blog.csdn.net/github_26672553/article/details/78125554
我们从终端里连接上mycat,然后创建了
news_class数据表。
现在我们想要往这个表里插入数据:
INSERT INTO news_class (`class_name`) VALUES ('php');
呃呃,报错啦:
Error : mycat sequnce err.java.lang.NumberFormatException: null
是因为:我们
news_class表中的字段
class_id是自增字段,需要mycat特别处理。
自增字段处理
从mycat获取自增字段有3种方式:从文件配置里获取、从数据库获取、本地时间戳从文件配置里获取自增字段
1、设置从文件里获取server.xml里配置
<system> <property name="defaultSqlParser">druidparser</property> <!-- 0 代表从文件配置里读取自增字段 --> <property name="sequnceHandlerType">0</property> </system>
sequnceHandlerType为
1从数据库获取自增字段。
2、哪个文件?
sequence_conf.properties这个文件
#部分配置 #default global sequence GLOBAL.HISIDS= GLOBAL.MINID=10001 GLOBAL.MAXID=20000 GLOBAL.CURID=10000
MINID最小ID,
MAXID最大ID,
CURID当前ID。
明白了意思,你可以根据自己需要修改。
如果执行我们执行:
SELECT next VALUE FOR MYCATSEQ_GLOBAL;
得到的结构是:
10001。
3、现在我们往要
news_class全局表里插入一条数据
INSERT INTO news_class (`class_id`,`class_name`) VALUES (next VALUE FOR MYCATSEQ_GLOBAL,'php');
这样就解决了
calss_id这个自增id的问题了。
记住:我们刚才是往mycat里插入的,因为是全局表,其他节点的表里也同时插入的该条记录。
4、sequence_conf.properties配置的更多
# self define sequence MY.HISIDS= MY.MINID=10 MY.MAXID=2000 MY.CURID=19
这是我自定义的sequence,怎么获取呢?
SELECT next VALUE FOR MYCATSEQ_MY; # 就是替换一下
值得注意是: 如果你要切换到另外一个sequence,那么之前使用过的再下一次使用又回到了原点。什么意思?
从数据库获取自增字段的值
需要在你指定的某个节点的数据库中新建一个MYCAT_SEQUENCE表
#该表字段 name #sequence名称 current_value #当前value Increment #每次增长值
还要新建一些函数。
这里不啰嗦了,详细看下面文档:
#建表 CREATE TABLE MYCAT_SEQUENCE (name VARCHAR(50) NOT NULL,current_value INT NOT NULL,increment INT NOT NULL DEFAULT 100, PRIMARY KEY(name)) ENGINE=InnoDB; INSERT INTO MYCAT_SEQUENCE(name,current_value,increment) VALUES ('GLOBAL', 100000, 100); #获取当前 ID DROP FUNCTION IF EXISTS mycat_seq_currval; DELIMITER // CREATE FUNCTION mycat_seq_currval(seq_name VARCHAR(50)) RETURNS varchar(64) DETERMINISTIC BEGIN DECLARE retval VARCHAR(64); SET retval='-999999999,null'; SELECT concat(CAST(current_value AS CHAR),',',CAST(increment AS CHAR)) INTO retval FROM MYCAT_SEQUENCE WHERE name = seq_name; RETURN retval; END;// #设置 DROP FUNCTION IF EXISTS mycat_seq_setval; DELIMITER// CREATE FUNCTION mycat_seq_setval(seq_name VARCHAR(50),value INTEGER) RETURNS varchar(64) DETERMINISTIC BEGIN UPDATE MYCAT_SEQUENCE SET current_value = value WHERE name = seq_name; RETURN mycat_seq_currval(seq_name); END;// #获取下一个(新的ID) DROP FUNCTION IF EXISTS mycat_seq_nextval; DELIMITER // CREATE FUNCTION mycat_seq_nextval(seq_name VARCHAR(50)) RETURNS varchar(64) DETERMINISTIC BEGIN UPDATE MYCAT_SEQUENCE SET current_value = current_value + increment WHERE name = seq_name; RETURN mycat_seq_currval(seq_name); END;//
到这里,我们就介绍了2种方式来处理mycat全局表中 自增字段的问题。我个人觉得 从文件中获取自增字段的值 这种方式更加简单。
相关文章推荐
- mycat中全局表的实战应用简析(上)
- 表格行与列边框样式处理的原理分析及实战应用
- Spring Boot 快速入门实战(三)全局异常处理
- 应用Spring mvc HandlerExceptionResolver 处理异常全局跳转方法
- Android应用全局异常处理
- Mycat学习实战-Mycat全局主键
- Android处理未捕获的异常(应用全局异常)
- 关于应用的全局统一异常处理
- 手动添加uc应用及其 提示notelist表缺少appX字段的处理方法
- ADF Faces 表格应用基础案例二:动态字段+事件处理【附样例工程】 推荐
- 高并发之 - 全局有序唯一id Snowflake 应用实战
- iOS应用开发,全局强制竖屏,部分页面允许旋转的处理
- 框架 day89 涛涛商城项目(补)-activeMQ应用,及springMVC全局异常处理
- Android应用全局异常处理
- 4、CRM2011编程实战——将窗体中指定控件的值做处理后更新到另一个字段中
- Android应用捕获全局异常自定义处理
- 测试:Servlet 3.0实战:异步处理特性应用
- 在线表单字段做为节点处理人
- MySQL事务处理与应用简析
- Linux应用环境实战11:发博客必备的五大图片处理神器