mycat mysql自增主键_Mycat探索之旅(4)----Mycat的自增长主键和返回生成主键ID的实现...

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

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

创建测试表

----------------------------------------创建测试表-------------------------------------

USEtest;CREATE TABLE

IF NOT EXISTSt_auto_increment (

idINT NOT NULL PRIMARY KEY,

NAMEVARCHAR (50)

) ENGINE= INNODB DEFAULT CHARSET = utf8;

添加测试语句

INSERT INTO t_auto_increment(id,name) VALUES(1,'auto_01');SELECT LAST_INSERT_ID();

测试结果

d82d6b11ea57fae5f94b11ae1c6ede6d.png

修改表

ALTER TABLE t_auto_increment MODIFY id intauto_increment;DESC t_auto_increment;

804e4d2367dc998884ac9dad512dbb93.png

添加测试

INSERT INTO t_auto_increment(name) VALUES('auto_02');SELECT LAST_INSERT_ID();

15036ff780eb09a364968861e8488646.png

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

正确配置方式如下:

1) mysql定义自增主键

--------------------------------------------

--创建测试表

--------------------------------------------

CREATE TABLE

IF NOT EXISTStb_auto_increment (

idINT NOT NULL PRIMARY KEYauto_increment,

NAMEVARCHAR (100)

)DEFAULT charset = utf8;

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

e7253c3ca95c62a6024d87704418b29b.png

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

# blow tables add by yzp 2016.03.10

TB_AUTO_INCREMENT=dn1

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

500e63119edc9fd5e273fdf9fc00a3d9.png

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

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

INSERT INTOmycat_sequence (

NAME,

current_value,

increment

)VALUES('tb_auto_increment', 100, 1);

c113e664fe65be435df9c9168f244c95.png

当前值为100,步长为1

测试使用:

第一组测试用例:

explain insert into tb_auto_increment(name)values('increment_01');select * fromtb_auto_increment;

explainselect * from tb_auto_increment;

1030798b6c9649f9292213cf57d741d5.png

selectlast_insert_id();

explainselect last_insert_id();

bac241b9de18f251fec63199908e2291.png

第二组测试用例:

explain insert into tb_auto_increment(name)values('increment_02');select * fromtb_auto_increment;

explainselect * from tb_auto_increment;

605692aef33756acadaa9d97950ba29b.png

select last_insert_id();

36b90e55ee2e7472fbbb2e73920d5eb7.png

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

explain select last_insert_id();

的时候,我们看到:

e74440a85910990645b9ff2a2d121767.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值