说明:MyCAT自增长主键和返回生成主键ID的实现

1) mysql本身对非自增长主键,使用last_insert_id()是不会返回结果的,只会返回0;这里做一个简单的测试

  • 创建测试表
  1. --------------------------------------
  2. --创建测试表
  3. -------------------------------------
  4.  
  5. USE test;
  6.  
  7. CREATE TABLE
  8.  
  9. IF NOT EXISTS t_auto_increment (
  10.  
  11. id INT NOT NULL PRIMARY KEY,
  12.  
  13. NAME VARCHAR (50)
  14.  
  15. ) ENGINE = INNODB DEFAULT CHARSET = utf8;
  • 添加测试语句
  1. INSERT INTO t_auto_increment(id,name) VALUES(1,'auto_01');
  2.  
  3. SELECT LAST_INSERT_ID();
  • 测试结果

  • 修改表
  1. ALTER TABLE t_auto_increment MODIFY id int auto_increment;
  2.  
  3. DESC t_auto_increment;

  • 添加测试
  1. INSERT INTO t_auto_increment(name) VALUES('auto_02');
  2.  
  3. SELECT LAST_INSERT_ID();

2) mysql只会对定义自增长主键,可以用last_insert_id()返回主键值;MyCAT目前提供了自增长主键功能,但是如果对应的mysql节点上数据表,没 有定义auto_increment,那么在MyCAT层调用last_insert_id()也是不会返回结果的。

正确配置方式如下:

1) mysql定义自增主键

  1. --------------------------------------------
  2.  
  3. --创建测试表
  4.  
  5. --------------------------------------------
  6.  
  7. CREATE TABLE
  8.  
  9. IF NOT EXISTS tb_auto_increment (
  10.  
  11. id INT NOT NULL PRIMARY KEY auto_increment,
  12.  
  13. NAME VARCHAR (100)
  14.  
  15. ) DEFAULT charset = utf8;

2) mycat定义主键自增:修改schema.xml

  1. <!--autoIncrement="true"表示该表主键使用自增长策略-->
  2.  
  3. <table name="tb_auto_increment" primaryKey="id" autoIncrement="true" dataNode="dn1,dn2" />

3) mycat对应sequence_db_conf.properties增加相应设置

  1. # blow tables add by yzp 2016.03.10
  2.  
  3. TB_AUTO_INCREMENT=dn1

注:这里的TB_AUTO_INCREMENT一定要大写,我最开始的时候用小写一直报下面的错误:

意思是说配置的时候没有找到TB_AUTO_INCREMENT,也就是sequence_db_conf.properties文件中添加的内容有误,当改为大写后,不再报错。

4) 在数据库中mycat_sequence表中增加TABLE1表的sequence记录

  1. INSERT INTO mycat_sequence (
  2.  
  3. NAME,
  4.  
  5. current_value,
  6.  
  7. increment
  8.  
  9. )
  10.  
  11. VALUES
  12.  
  13. ('tb_auto_increment', 100, 1);

当前值为100,步长为1

测试使用:

第一组测试用例:

  1. explain insert into tb_auto_increment(name)values('increment_01');
  2.  
  3. select * from tb_auto_increment;
  4.  
  5. explain select * from tb_auto_increment;

  1. select last_insert_id();
  2.  
  3. explain select last_insert_id();

第二组测试用例:

  1. explain insert into tb_auto_increment(name)values('increment_02');
  2.  
  3. select * from tb_auto_increment;
  4.  
  5. explain select * from tb_auto_increment;

  1. select last_insert_id();

总结:最开始有一点小的疑问,在进行插入的时候,mycat会自动分配到配置的两个数据库上,但是在执行

  1. explain select last_insert_id();

的时候,我们看到:

只会从一个库中去查询,但后来仔细一想也对啊,因为添加到两个库的数据是一致的,所以就没有必要去每一个库都去查询了。当然,具体的还好去看源码。

Mycat探索之旅(4)----Mycat的自增长主键和返回生成主键ID的实现的更多相关文章

  1. Mycat探索之旅(5)----常用的分片规则

    分片枚举 通过在配置文件中配置可能的枚举id,自己配置分片,本规则适用于特定的场景,比如有些业务需要按照省份或区县来做保存, 而全国省份区县固定的,这类业务使用本条规则,配置如下: <table ...

  2. Mycat探索之旅(3)----Mycat的全局序列号

    一.本地文件方式 原理:此方式MyCAT将sequence配置到文件中,当使用到sequence中的配置后,MyCAT会更下classpath中的sequence_conf.properties文件中 ...

  3. 【Linux探索之旅】第二部分第二课:命令行,世界尽在掌握

    内容简介 1.第二部分第二课:命令行,世界尽在掌握 2.第二部分第三课预告:文件和目录,组织不会亏待你 命令行,世界尽在掌握 今天的标题是不是有点霸气侧漏呢? 读者:“小编,你为什么每次都要起这么非主 ...

  4. 【Linux探索之旅】第一部分第五课:Unity桌面,人生若只如初见

    内容简介 1.第一部分第五课:Unity桌面,人生若只如初见 2.第一部分第六课预告:Linux如何安装在虚拟机中 Unity桌面,人生若只如初见 不容易啊,经过了前几课的学习,我们认识了Linux是 ...

  5. 【Web探索之旅】第四部分:Web程序员

    内容简介 1.第四部分第一课:什么是Web程序员? 2.第四部分第二课:如何成为Web程序员? 3.第四部分第三课:成为优秀Web程序员的秘诀 第四部分:Web程序员(完结篇) 大家好.终于来到了[W ...

  6. 【Web探索之旅】第三部分第一课:服务器

    内容简介 1.第三部分第一课:服务器 2.第三部分第二课预告:IP地址和域名 第三部分第一课:服务器 大家好,欢迎来到[Web探索之旅]的第三部分.这一部分有不少原理,还是很重要的. 这一部分我们会着 ...

  7. 【Web探索之旅】第三部分第二课:IP地址和域名

    内容简介 1.第三部分第二课:IP地址和域名 2.第三部分第三课预告:协议 第三部分第二课:IP地址和域名 上一课我们说了在Web之中,全球各地有无数台机器,有些充当客户机,有些作为服务器. 那么这些 ...

  8. 【Web探索之旅】第一部分:什么是Web?

    内容简介 1.Web探索之旅:开宗明义 2.第一部分第一课:什么是Web? 3.第一部分第二课:Web,服务和云 4.第一部分第三课:Web的诞生史 Web探索之旅:开宗明义 大家好. 我们这个系列课 ...

  9. 【C++探索之旅】第一部分第三课:第一个C++程序

    内容简介 1.第一部分第三课:第一个C++程序 2.第一部分第四课预告:内存的使用 第一个C++程序 经过上两课之后,我们已经知道了什么是编程,编程的语言,编程的必要软件,C++是什么,我们也安装了适 ...

随机推荐

  1. 阿里云OSS C#回调服务实例代码

    先贴出客户端上传文件代码和毁掉函数的定义 需要的引用有:using Aliyun.OSS: 通过nuget包,获取aliyun.oss   dll string url = "http:// ...

  2. CSS入门之定义和应用格式

    1:定义 1:定义单个属性 property:value 例如: color:white(属性和值之间用冒号隔开) 2:定义多个属性 property:value;property:value 例如: ...

  3. PhpStorm最新版 2017激活办法

    特别注意:为避免phpstorm联网时注册失效,请将“0.0.0.0 account.jetbrains.com”添加到hosts文件中. 最新版PhpStorm 2017正式版改进了PHP 7支持, ...

  4. 在阿里云“专有网络”网络类型中配置vsftpd

    原文地址:传送门 环境:云服务器ECS,网络类型为“专有网络”,创建ECS绑定公网IP:系统镜像为Debian 8  现象:FTP客户端可以连接FTP服务端,但“读取目录列表失败”.       原因 ...

  5. [thinkPHP] buildSql可以查看tp CURD操作对应的SQL

    $goods = M('Goods')->where($map)->buildSql(); echo $goods;

  6. hdu6138(后缀数组)

    hdu6138 题意 给出若干个字符串,每次查询两个字符串,求两个字符串的公共子串且在给出的某一个字符串中作为前缀的最大长度. 分析 求公共子串:后缀数组 判断前缀:字典树 求完后缀数组,遍历下 \( ...

  7. SPOJ PT07J - Query on a tree III(划分树)

    PT07J - Query on a tree III #tree You are given a node-labeled rooted tree with n nodes. Define the ...

  8. BZOJ 1529 [POI2005]ska Piggy banks(并查集)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1529 [题目大意] 给出一张n个点n条边的有向图,问选取几个点为起点可以遍历全图 [题 ...

  9. 使用MultipleInputs和MultipleOutputs

    还是计算矩阵的乘积,待计算的表达式如下: S=F*[B+mu(u+s+b+d)] 其中,矩阵B.u.s.d分别存放在名称对应的SequenceFile文件中. 1)我们想分别读取这些文件(放在不同的文 ...

  10. 【OpenJudge9267】【递推】核电站

    核电站 总时间限制: 5000ms 单个测试点时间限制: 1000ms 内存限制: 131072kB [描述] 一个核电站有N个放核物质的坑,坑排列在一条直线上.如果连续M个坑中放入核物质,则会发生爆 ...