Mycat探索之旅(4)----Mycat的自增长主键和返回生成主键ID的实现
说明:MyCAT自增长主键和返回生成主键ID的实现
1) mysql本身对非自增长主键,使用last_insert_id()是不会返回结果的,只会返回0;这里做一个简单的测试
- 创建测试表
--------------------------------------
--创建测试表
------------------------------------- USE test; CREATE TABLE IF NOT EXISTS t_auto_increment ( id INT NOT NULL PRIMARY KEY, NAME VARCHAR (50) ) ENGINE = INNODB DEFAULT CHARSET = utf8;
- 添加测试语句
INSERT INTO t_auto_increment(id,name) VALUES(1,'auto_01'); SELECT LAST_INSERT_ID();
- 测试结果
- 修改表
ALTER TABLE t_auto_increment MODIFY id int auto_increment; DESC t_auto_increment;
- 添加测试
INSERT INTO t_auto_increment(name) VALUES('auto_02'); SELECT LAST_INSERT_ID();
2) mysql只会对定义自增长主键,可以用last_insert_id()返回主键值;MyCAT目前提供了自增长主键功能,但是如果对应的mysql节点上数据表,没 有定义auto_increment,那么在MyCAT层调用last_insert_id()也是不会返回结果的。
正确配置方式如下:
1) mysql定义自增主键
-------------------------------------------- --创建测试表 -------------------------------------------- CREATE TABLE IF NOT EXISTS tb_auto_increment ( id INT NOT NULL PRIMARY KEY auto_increment, NAME VARCHAR (100) ) DEFAULT charset = utf8;
2) mycat定义主键自增:修改schema.xml
<!--autoIncrement="true"表示该表主键使用自增长策略--> <table name="tb_auto_increment" primaryKey="id" autoIncrement="true" dataNode="dn1,dn2" />
3) mycat对应sequence_db_conf.properties增加相应设置
# blow tables add by yzp 2016.03.10 TB_AUTO_INCREMENT=dn1
注:这里的TB_AUTO_INCREMENT一定要大写,我最开始的时候用小写一直报下面的错误:
意思是说配置的时候没有找到TB_AUTO_INCREMENT,也就是sequence_db_conf.properties文件中添加的内容有误,当改为大写后,不再报错。
4) 在数据库中mycat_sequence表中增加TABLE1表的sequence记录
INSERT INTO mycat_sequence ( NAME, current_value, increment ) VALUES ('tb_auto_increment', 100, 1);
当前值为100,步长为1
测试使用:
第一组测试用例:
explain insert into tb_auto_increment(name)values('increment_01'); select * from tb_auto_increment; explain select * from tb_auto_increment;
select last_insert_id(); explain select last_insert_id();
第二组测试用例:
explain insert into tb_auto_increment(name)values('increment_02'); select * from tb_auto_increment; explain select * from tb_auto_increment;
select last_insert_id();
总结:最开始有一点小的疑问,在进行插入的时候,mycat会自动分配到配置的两个数据库上,但是在执行
explain select last_insert_id();
的时候,我们看到:
只会从一个库中去查询,但后来仔细一想也对啊,因为添加到两个库的数据是一致的,所以就没有必要去每一个库都去查询了。当然,具体的还好去看源码。
Mycat探索之旅(4)----Mycat的自增长主键和返回生成主键ID的实现的更多相关文章
- Mycat探索之旅(5)----常用的分片规则
分片枚举 通过在配置文件中配置可能的枚举id,自己配置分片,本规则适用于特定的场景,比如有些业务需要按照省份或区县来做保存, 而全国省份区县固定的,这类业务使用本条规则,配置如下: <table ...
- Mycat探索之旅(3)----Mycat的全局序列号
一.本地文件方式 原理:此方式MyCAT将sequence配置到文件中,当使用到sequence中的配置后,MyCAT会更下classpath中的sequence_conf.properties文件中 ...
- 【Linux探索之旅】第二部分第二课:命令行,世界尽在掌握
内容简介 1.第二部分第二课:命令行,世界尽在掌握 2.第二部分第三课预告:文件和目录,组织不会亏待你 命令行,世界尽在掌握 今天的标题是不是有点霸气侧漏呢? 读者:“小编,你为什么每次都要起这么非主 ...
- 【Linux探索之旅】第一部分第五课:Unity桌面,人生若只如初见
内容简介 1.第一部分第五课:Unity桌面,人生若只如初见 2.第一部分第六课预告:Linux如何安装在虚拟机中 Unity桌面,人生若只如初见 不容易啊,经过了前几课的学习,我们认识了Linux是 ...
- 【Web探索之旅】第四部分:Web程序员
内容简介 1.第四部分第一课:什么是Web程序员? 2.第四部分第二课:如何成为Web程序员? 3.第四部分第三课:成为优秀Web程序员的秘诀 第四部分:Web程序员(完结篇) 大家好.终于来到了[W ...
- 【Web探索之旅】第三部分第一课:服务器
内容简介 1.第三部分第一课:服务器 2.第三部分第二课预告:IP地址和域名 第三部分第一课:服务器 大家好,欢迎来到[Web探索之旅]的第三部分.这一部分有不少原理,还是很重要的. 这一部分我们会着 ...
- 【Web探索之旅】第三部分第二课:IP地址和域名
内容简介 1.第三部分第二课:IP地址和域名 2.第三部分第三课预告:协议 第三部分第二课:IP地址和域名 上一课我们说了在Web之中,全球各地有无数台机器,有些充当客户机,有些作为服务器. 那么这些 ...
- 【Web探索之旅】第一部分:什么是Web?
内容简介 1.Web探索之旅:开宗明义 2.第一部分第一课:什么是Web? 3.第一部分第二课:Web,服务和云 4.第一部分第三课:Web的诞生史 Web探索之旅:开宗明义 大家好. 我们这个系列课 ...
- 【C++探索之旅】第一部分第三课:第一个C++程序
内容简介 1.第一部分第三课:第一个C++程序 2.第一部分第四课预告:内存的使用 第一个C++程序 经过上两课之后,我们已经知道了什么是编程,编程的语言,编程的必要软件,C++是什么,我们也安装了适 ...
随机推荐
- 判断re模块的布尔值
示例: #!/usr/bin/python # coding:utf-8 # Author:Guido's admirers import re import time class card(obje ...
- python unittest 快速入门
import unittest def add(x, y): return x + y class TestLearning(unittest.TestCase): def setUp(self): ...
- F - 等式(1/x + 1/y = 1/n)
链接:https://www.nowcoder.com/acm/contest/90/F来源:牛客网 题目描述 给定n,求1/x + 1/y = 1/n (x<=y)的解数.(x.y.n均为正整 ...
- 将csv格式的数据文件导入/导出数据库+添加新的字段
最近一直忙于实验室的事情,没有好好更新博客,在抓包的过程中,遇到了很多问题. 因为我常用Wireshark将抓包信息导出为csv文件,这里简单mark一下将csv文件导入/导出到数据库的2种方法: 一 ...
- 并查集&线段树&树状数组&排序二叉树
超级无敌巨牛逼并查集(带权并查集)https://vjudge.net/problem/UVALive-4487 带删点的加权并查集 https://vjudge.net/problem/UVA-11 ...
- 【Docker】基本命令使用介绍
# docker命令行学习 ## docker run- docker run --help:老实说这条最管用了- docker run -it:交互模式,允许控制台输出 - docker run - ...
- 通用数据库管理工具DBeaver
通用数据库管理工具DBeaver 在渗透测试中,用户往往需要管理很多数据库.这些数据库可能是渗透软件使用的(如Metasploit使用的Postgresql),也有目标主机的数据库(如网站的数据库 ...
- [BZOJ1069][SCOI2007]最大土地面积(水平扫描法求凸包+旋转卡壳)
题意:在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成. 的多边形面积最大.n<=2000. 先求凸包,再枚举对角线,随着对角线的斜率上升,另外两 ...
- POJ 2482 Stars in Your Window(扫描线+线段树)
[题目链接] http://poj.org/problem?id=2482 [题目大意] 给出一些点的二维坐标和权值,求用一个长H,宽W的矩形能框住的最大权值之和, 在矩形边缘的点不计算在内 [题解] ...
- 【记忆化搜索】bzoj3208 花神的秒题计划Ⅰ
暴力 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #de ...