mycat主键自增问题(代码片段)

lshan lshan     2022-12-07     212

关键词:

MyCAT自增字段和返回生成的主键ID的经验分享
说明:
1、mysql本身对非自增长主键,使用last_insert_id()是不会返回结果的,只会返回0.
2、mysql只会对定义自增长主键,可以用last_insert_id()返回主键值。

mycat目前提供了自增长主键功能,但是如果对应的mysql节点上数据表,没有定义auto_increment,
那么在mycat层调用last_insert_id()也是不会返回结果的。
正确使用方式如下:
1、mysql定义自增主键
CREATE TABLE `tt2` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `nm` INT(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MYISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
2、mycat定义自增
[[email protected] conf]# vim schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">

        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
            <!-- random sharding using mod sharind rule -->
        <!-- autoIncrement="true" 属性-->
            <table name="tt2" primaryKey="id" autoIncrement="true" dataNode="dn1,dn2,dn3,dn4,dn5" rule="mod-long" />
            <table name="mycat_sequence" primaryKey="name" dataNode="dn1"/>
        </schema>

        <dataNode name="dn1" dataHost="localhost1" database="db1" />
        <dataNode name="dn2" dataHost="localhost1" database="db2" />
        <dataNode name="dn3" dataHost="localhost1" database="db3" />
        <dataNode name="dn4" dataHost="localhost1" database="db4" />
        <dataNode name="dn5" dataHost="localhost1" database="db5" />

        <dataHost name="localhost1" maxCon="1000" minCon="20" balance="0" writeType="0" dbType="mysql" dbDriver="native">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM1" url="127.0.0.1:3366" user="root" password="123456">
                </writeHost>
        </dataHost>
</mycat:schema>

3、mycat对应sequence_db_conf.properties增加相应设置;
4、mycat的对应mycat_sequence增加对应记录。
5、链接mycat,测试结果如下:
 
127.0.0.1/root:[TESTDB> insert into tt2(nm) values (99);
Query OK, 1 row affected (0.14 sec)

127.0.0.1/root:[TESTDB> select last_insert_id();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|              101 |
+------------------+
1 row in set (0.01 sec)

127.0.0.1/root:[TESTDB> insert into tt2(nm) values (99);
Query OK, 1 row affected (0.00 sec)

127.0.0.1/root:[TESTDB> select last_insert_id();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|              102 |
+------------------+
1 row in set (0.00 sec)

127.0.0.1/root:[TESTDB> insert into tt2(nm) values (99);
Query OK, 1 row affected (0.00 sec)

127.0.0.1/root:[TESTDB> select last_insert_id();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|              103 |
+------------------+
1 row in set (0.00 sec)

127.0.0.1/root:[TESTDB> insert into tt2(nm) values (99);
Query OK, 1 row affected (0.01 sec)

127.0.0.1/root:[TESTDB> select last_insert_id();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|              104 |
+------------------+
1 row in set (0.00 sec)

127.0.0.1/root:[TESTDB> insert into tt2(nm) values (99);
Query OK, 1 row affected (0.00 sec)

127.0.0.1/root:[TESTDB> select last_insert_id();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|              105 |
+------------------+
1 row in set (0.00 sec)

127.0.0.1/root:[TESTDB> insert into tt2(nm) values (99);
Query OK, 1 row affected (0.00 sec)

127.0.0.1/root:[TESTDB> select last_insert_id();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|              106 |
+------------------+
1 row in set (0.00 sec)

 

建立主键自增表(代码片段)

MySQL在建表的时候声明字段即可idintauto_incrementprimarykeynotnullOracle第一步:建立表droptablet_role;createtablet_role(role_namevarchar(255)NOTNULL,notevarchar(255)NOTNULL,idnumberNOTNULL,PRIMARYKEY(id));这里需要注意主键id得是num 查看详情

mycat实战之主键数据库自增方式

创建一个person表,主键为Id,hash方式分片,主键自增(采用数据库方式)#person表结构如下Id,主键,Mycat自增主键name,字符串,16字节最长school,毕业学校,数字,1-1000范围,是学校编号age,年龄,18-60addr,地址,32字节,建议为gz-ti... 查看详情

xorm插入数据库后返回主键自增id(代码片段)

golang使用xorm连接数据库后,插入结构体,无法返回自增主键id,饭后的主键id都是0。经过研究发现,如果给结构体id设置xormtag,则会默认id为0,不会返回插入成功后的主键id。xorm文档中如下描述 1packagemain23import(4"fmt"5"time"67_"g... 查看详情

mybatis怎么设置主键自增

设置主键自增,应该是设置具体的数据库,与mybatis没有什么关系吧。以mysql为例,假设主键为id1.可以在创建表的时候设置主键createtabletb(idbigint(20)primarykeyauto_increment);2.也可以在修改表结构的时候设置主键altertabletbmodifyidbigint(20)pr... 查看详情

postgresql设置主键自增重置主键自增从1开始(代码片段)

目录新建序列自增1.右键设计表,选中主键2.点击上方的“其他”,选择序列,点击新建序列3.如下所示,和下图填入同样的内容并保存,取个名book_vendorcode_bid_seq(名字可以改,可以自己取一个)4.... 查看详情

数据库powerdesigner设置主键自增

...生在使用PowerDesigner设计数据库时如果没有在模型中设置主键自增在navicat中对于有外键约束的字段尝试设置主键自增会失败✨解决方案在生成SQL之前在PowerDesigner中设置主键自增选择物理模型!概念模型和逻辑模型不可以设置必须... 查看详情

mysql数据库安装使用教程10:列属性(列约束)---主键自增默认值注释(代码片段)

...是否为空:null或是notnull3、字段默认值——default4、主键(主索引、唯一索引)——primarykey(PK)5、自动增长——auto_increment6、列备注——comment一、类属性(列约束) 查看详情

postgresql如何让主键自增

参考技术Apostgresql如何让主键自增法一:?123456789Sql代码CREATETABLEcustomers(customeridSERIALprimarykey,companynamecharactervarying,contactnamecharactervarying,phonecharactervarying,countrycharactervarying)法二:?123456789Sql代码CREATESEQUENCEevent_id_seqSTARTWITH1INCREMENTBY1NO... 查看详情

db2如何主键自增

简单啊,用序列!不过序列不会自动填充,那么写个触发器,让插入数据的时候,想要自增的主键去获取序列并填充。自增列不好用,高并发容易出问题。参考技术A两个方案1)sequence自增;2)自增列 参考技术B建议建SEQUENCE 查看详情

解决:mysql表设置bigint主键自增,而使用mybatisplus插入数据主键出现随机值

记录BUG:在创建表时没有设置好主键自增,使用MybatisPlusX逆向生成工程代码;后面将表设置主键自增后,向表中插入数据,发现MybatisPlus给主键生成了一个随机值,多次插入也并没有自增。原因:在修... 查看详情

解决:mysql表设置bigint主键自增,而使用mybatisplus插入数据主键出现随机值

记录BUG:在创建表时没有设置好主键自增,使用MybatisPlusX逆向生成工程代码;后面将表设置主键自增后,向表中插入数据,发现MybatisPlus给主键生成了一个随机值,多次插入也并没有自增。原因:在修... 查看详情

解决:mysql表设置bigint主键自增,而使用mybatisplus插入数据主键出现随机值

记录BUG:在创建表时没有设置好主键自增,使用MybatisPlusX逆向生成工程代码;后面将表设置主键自增后,向表中插入数据,发现MybatisPlus给主键生成了一个随机值,多次插入也并没有自增。原因:在修... 查看详情

业务id生成策略(代码片段)

...提升。先来介绍普遍的分布式ID生成策略:1.利用DB的自增主键 这里又有两种做法,一种是单独创建一个只有自增主键的表,来负责主键自增,业务表从这里取得自增的主键返回给业务主键生成组件使用。  另外一种:业... 查看详情

mysql主键自增

比如创建表格,表格ID需要自增 将ID设置成主键,并配置auto_increment 例:createtabletest(id int(4) notnull primarykey auto_incrementusernamechar(20) passwdchar(20)) 查看详情

mysql怎么利用函数和触发器实现非主键自增?

...章将要给大家介绍的是MySQL怎么利用函数和触发器实现非主键自增,由于内容介绍的非常详细,且具有一定的参考价值,相信大家在生活中会用到,因此,感兴趣的朋友不妨来看看。一、MySQL利用函数实现非主... 查看详情

oracle实现主键字段自增(代码片段)

Oracle实现主键自增有4种方式:IdentityColumns新特性自增(Oracle版本≥12c)创建自增序列,创建表时,给主键字段默认使用自增序列创建自增序列,使用触发器使主键自增创建自增序列,插入语句(inse... 查看详情

oracel数据库主键自增

--Createsequencecreate sequence FILE_ID_SEQ   主键名(自增列)minvalue 1         起始maxvalue 99999     最 查看详情

mycat分片表全局自增主键测试

mycat分片表全局自增主键测试mycat分片表全局自增主键测试一、全局序列号介绍在实现分库分表的情况下,数据库自增主键已无法保证自增主键的全局唯一。为此,MyCat 提供了全局sequence,并且提供了包含本地配置和数据库配... 查看详情