首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Mybatis使用generatedKey在插入数据时返回自增id始终为1,自增id实际返回到原对象当中的问题排查

今天在使用数据库的时候,遇到一个场景,即在插入数据完成后需要返回此数据对应的自增主键id,但是在使用Mybatis中的generatedKey且确认各项配置均正确无误的情况下,每次插入成功后,返回的都是...1,而不是最新的自增Id。...终于凭借着一次Debugg发现的问题,原来在使用Mabatis中的insert或者insertSelective方式插入时,如使用int insert(TestGenKey testGenKey)时,返回值...int表示的是插入操作受影响的行数,而不是指的自增长id,那么返回的自增id到底去哪里了呢?...null : sex.trim(); } } 测试及Debugg 编写测试方法测试插入 插入成功后观察对应的变量对应的值 总结:调用Insert后插入操作之后,所得到自增长Id被赋值到原对象当中

1.7K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    kettle将postgresql数据拷贝到其他postgresql时报“字段 “id“ 的类型为 uuid, 但表达式的类型为 character varying”

    环境: postgresql-12,pentaho kettle为9.1版本 使用kettle将一个postgresql数据拷贝到另外一个postgresql时报“字段 "id" 的类型为 uuid,...但表达式的类型为 character varying”异常,源postgresql中id字段是uuid类型,但是经过kettle后却变成了string类型,处理这个问题相对pg导入cassandra要简单些...,直接设置目的postgresql的连接属性即可: 双击“表输出”节点,弹出如下页面: 点击数据库连接行的“编辑”按钮进入下面配置页面: 在选项中增加命名参数: stringtype=unspecified...即可,当然也可以参考文章https://jonhuster.blog.csdn.net/article/details/109246186中的方法增加一个“Java代码”节点。

    1.5K10

    MySQL里trx_mysql_thread_id为0 的事务导致大量锁等待超时该咋整

    经确认,trx_mysql_thread_id=0 的事务全部为XA事务。 3....处理过程 因为trx_mysql_thread_id=0 的事务无法通过kill trx_mysql_thread_id 的方式处理,所以,需要回滚这些XA事务。...; # 以上查出来的信息拼接结果为(以下举其中一个为例)xa rollback 'tm156393736565426841','tm1333009',1096044365;执行回滚脚本 mysql> xa...XA事务(分布式事务)浅析 在本应用中,为了降低单点压力,根据业务情况进行了分表分库,将表分布在不同的库中(库分布在不同的机器上)。...比如更新db1库的A表时,必须同步更新db2库的B表,两个更新形成一个事务,要么都成功,要么都失败,起初,为了简化应用程序在事务处理的难度,因此直接使用MySQL数据库的分布式事务。

    2.6K40

    解读年度数据库PostgreSQL:如何处理并发控制(一)

    PostgreSQL使用更简单的方法,即新数据对象被直接插入相关表页中。读取对象时,PostgreSQL根据可见性检查规则,为每个事务选择合适的对象版本作为响应。.../* 插入或删除的命令ID */ TransactionId t_xvac; /* 老式VACUUM FULL的事务ID */ } t_field3...t_xmin保存插入此元组的事务的txid。 t_xmax保存删除或更新此元组的事务的txid。如果尚未删除或更新此元组,则t_xmax设置为0,即无效。...t_cid保存命令标识(command id,cid),cid的意思是在当前事务中,执行当前命令之前执行了多少SQL命令,从零开始计数。...例如,假设我们在单个事务中执行了3条INSERT命令BEGIN;INSERT;INSERT;INSERT;COMMIT;。如果第一条命令插入此元组,则该元组的t_cid会被设置为0。

    83730

    解读年度数据库PostgreSQL:如何处理并发控制(一)

    PostgreSQL使用更简单的方法,即新数据对象被直接插入相关表页中。读取对象时,PostgreSQL根据可见性检查规则,为每个事务选择合适的对象版本作为响应。...     /* 插入或删除的命令ID */                 TransactionId     t_xvac;    /* 老式VACUUM FULL的事务ID */        ...t_xmin保存插入此元组的事务的txid。 t_xmax保存删除或更新此元组的事务的txid。如果尚未删除或更新此元组,则t_xmax设置为0,即无效。...t_cid保存命令标识(command id,cid),cid的意思是在当前事务中,执行当前命令之前执行了多少SQL命令,从零开始计数。...例如,假设我们在单个事务中执行了3条INSERT命令BEGIN;INSERT;INSERT;INSERT;COMMIT;。如果第一条命令插入此元组,则该元组的t_cid会被设置为0。

    98170

    如何从零学习PostgreSQL Page结构

    <7.3 0 7.3 & 7.4 1 8.0 2 8.1 3 >8.3 4 prune_xid表示这个page上最早删除或者修改tuple的事务id,在vacuum操作的时候会用到...在HeapTupleFields中,t_xmin是插入这行tuple的事务id;t_xmax是删除或者锁住tuple的事务id;union结构中的t_cid是删除或者插入这个tuple的命令id,也就是命令序号...lp_off+lp_len=8160+32=8192),这行记录的插入事务id是557(t_min),和tuple的删除事务id是0(tmax),这里数据没有被删除,所以都是0。...我们删除一行tuple可以看到prune_xid有了值,为559,这个559就是删除这个tuple的事务id(当前最早的删除或更改了tuple的事务id) ?...同样,我们可以看到lp为1的这个tuple的t_xmax为559,这里就是删除这行tuple的事务id。

    1.2K20

    SQL优化(六) MVCC PostgreSQL实现事务和多版本并发控制的精华

    PostgreSQL中的MVCC原理 事务ID 在PostgreSQL中,每个事务都有一个唯一的事务ID,被称为XID。...xmin 在创建(insert)记录(tuple)时,记录此值为插入tuple的事务ID xmax 默认值为0.在删除tuple时,记录此值 cmin和cmax 标识在同一个事务中多个语句命令的序列值,...在此之前,先创建测试表 12345 CREATE TABLE test ( id INTEGER, value TEXT); 开启一个事务,查询当前事务ID(值为3277),并插入一条数据,xmin...因为在PostgreSQL中更新实际上是将旧tuple标记为删除,并插入更新后的新数据,所以更新后id为2的tuple从原来最前面变成了最后面 在新窗口中,id为2的tuple仍然如旧窗口中更新之前一样...之后所有的事务都比frozon事务新,因此VACUUM之前的所有已提交的数据都对之后的事务可见。PostgreSQL通过这种方式实现了事务ID的循环利用。

    2.1K50

    PolarDB VS PostgreSQL 云上性能与成本评测 -- PolarDB 比PostgreSQL 好?

    在此之前我也收到过一些DBA同学被公司的IT部的老板问及,为什么MySQL存储空间比PG要节省得问题,怎么回答这样的问题,从这里可以反应出成本是IT部门领导看中的问题。...1 台PolarDB 4C 16G 启动硬件压缩 PLS4 1 台PostgreSQL RDS 4C 16G PL1 5万IOPS 针对测试存储空间的部分,我们产生了7个表饱含了BIGINT...for PostgreSQL 在同样的数据存储量上,在实际使用的存储空间有优势。...图12 PostgreSQL RDS 测试结果 图 13 PolarDB for PostgreSQL 测试结果 最后针对大事务在业务中有一定的要求,我们模拟了50万插入数据作为一个事务提交的业务情况。...图 15 PolarBD IOPS 测试 图 16 RDS PostgreSQL IOPS 测试 结论:在整体测试中,通过各种测试方法比对数据库在高并发和大事务,及数据存储成本节省的测试项目中,PolarDB

    29110

    史上最详尽,一文讲透 MVCC 实现原理

    `test` (`value`) VALUES (1), (2), (3) 接下来我们在两个窗口中分别开启一个事务并查询出现有数据: 我们在其中一个事务中先更新 id 为 1 的数据,再插入一条 id...对于执行 insert 语句插入的数据,其回滚段类型为 insert undo logs,用来在事务中回滚当前的插入操作。...与 InnoDB 类似,PostgreSQL 为每一行数据添加了 4 个额外的字段: xmin — 插入与更新数据时写入的事务 ID xmax — 删除数据时写入的事务 ID cmin — 插入与更新数据时写入的命令...当一个事务更新一条数据,PostgreSQL 会创建一条新的记录,并将新的记录的 xmin 更新为当前事务的事务 ID。...当一个事务删除一条数据,PostgreSQL 不会创建一条新纪录,而是将该行记录的 xmax 更新为当前事务的 ID。

    1.4K20

    Linux 上安装 PostgreSQL

    - 00:15之前 18 状态 :睡眠中,进程ID:78607 19 Another app is currently holding the yum lock; waiting for...) 10 11 postgres=# 现在可以插入一条测试数据: INSERT INTO student (id, name, number) VALUES (1, '张三', '1023');...用户映射文件为pg_ident.conf,这个文件记录着与操作系统用户匹配的数据库用户,如果某操作系统用户在本文件中没有映射用户,则默认的映射数据库用户与操作系统用户同名。...3)、在文件查找 listen_addresses,他的值说明:     a、如果希望只能从本地计算机访问PostgreSQL数据库,就将该项设置为'localhost';     b、如果希望从局域网访问...PostgreSQL数据库,就将该项设置为PostgreSQL数据库的局域网IP地址;     c、如果希望从互联网访问PostgreSQL数据库,就将该项设置为PostgreSQL数据库的互联网IP地址

    6.4K10

    浅谈PostgreSQL中的并发实现

    每个数据page在fsm中中占用一个字节,当往表中插入数据时候,PG使用这个表的fsm文件找到新的数据应该插入个page中,这些fsm文件一般都会加载在PG的共享内存中。...插入数据时候,会在每行数据的header设置t_xmin=当前事务,t_xmax=0,t_cid=0,t_ctid=(0,1),插入过程中t_xmax永久设置为0.当一行数据被删除时候,PostgreSQL...行数据删除会在数据行的header中设置t_xmin={开始的事务id},t_xmax={删除数据整个事务的id};PostgreSQL中的更新不是采用原地更新的模式,而是删除旧数据行,插入新的数据行模式...行数据呈现 行数据插入 行数据删除 行数据更新 PostgreSQL中表中的每条记录都会记录版本信息,版本信息主要包括插入记录的事务ID(cmin)、删除记录事务ID(cmax).记录的...中快照是记录数据库当前时刻的状态的重要数据结构,快照保存当前活跃事务的最小事务ID,最大事务ID,当前的活跃事务列表、当前事务的CommandID等,快照可以分为多种类型,具体定义在SnapshotType

    2.3K20

    MVCC Postgresql 和 MYSQL 到底谁更......?

    这是有道理的——毕竟,在提交第一个事务之前,不会考虑更改DB的状态。 写到这,会比较枯燥,下面就开始讲点和实际数据库贴边的 MVCC 实现。...2写新数据时,旧数据不删除,而是把新数据插入,新旧数据在一起。PostgreSQL就是使用的这种实现方法。...这意味着您可以启动一个事务并插入一行,而在该事务提交之前,其他事务不会看到该行。一旦提交并创建了其他事务,它们就能够查看新行,因为它们满足xmin 的事务已经完成。...下面我们看看postgresql 表结构,以city表为例 ?...log对于update或者delete操作,每一行都保存了一个事务Id,修改事务Id为当前Session的事务id,生成数据行事务之前的版本,将当前行的回滚指针指向事务之前的版本。

    1.7K51

    史上最全PostgreSQL体系结构

    7月16日晚20:30-21:30,云和恩墨大讲堂邀请到了云和恩墨东区技术顾问成旸老师为我们分享Oracle中统计信息的相关知识。成老师将带我们由点到面,系统地了解统计信息。...之前为$PGDATA/pg_xlog) 3)$PGDATA/pg_xact 事务提交日志(pg10之前为$PGDATA/pg_clog) 4)服务器日志,可以在启动的时候指定,比如pg_ctl...-- 1 pg pg 168 Nov 10 16:08 postgresql-16.log -rw------- 1 pg pg 502 Nov 10 16:08 postgresql-16.csv <...2.3 pg_wal 见六 2.4 事务日志pg_xact pg_xact是事务提交日志,记录了事务的元数据。默认开启。内容一般不能直接读。...结合pg_hba.connf中,method为ident可以用特定的操作系统用户和指定的数据库用户登录数据库。

    4K20

    PG 14新特性汇总

    这样的空间可以重用,但是如果没有新元组插入该页,这样的空间会保持为空。 这种膨胀在某种程度上是不可避免的,也是正常的。...在具有大量共享缓冲区的集群上进行恢复时,对小表的快速截断 增强逻辑复制API,允许流处理正在进行的大型事务 允许逻辑复制将正在进行的长事务流到订阅者 使用逻辑复制时,在命令完成期间向WAL添加缓存失效消息...,使用带有结果缓存的参数化嵌套循环的好处会增加 7) FDW API 和 postgres_fdw 已扩展为允许批量插入外部表:如果FDW支持批量,并且请求了批量,那么累积行并以批量形式插入,否则每次插入一行...查询标识符 查询标识符用于标识查询,可以在各个扩展之中交叉使用。PG14之前,扩展需要使用一个算法计算query_id。通常情况下使用同一个算法计算,但任何扩展都可以使用自己的算法。...= public; 请注意,search_path上的模式应该只允许用户使用CREATE特权,因此这对于 v15 之前的版本不是一个好主意!

    890100

    PostgreSQL的MVCC vs InnoDB的MVCC

    PostgreSQL中的MVCC 为了支持多版本,PG对每个对象(PG术语:Tuple)增加了额外的字段: 1、xmin:进行插入或更新操作事务的事务ID。...可以看到: 1、Session-A开启一个事务,其事务ID为495 2、Session-B开启一个事务,其事务ID为496 3、Session-A插入一个tuple,存储到HEAP 4、新tuple的...xmin为495,而xmax为null 5、由于Session-A的事务没有提交,session-B看不到第3步插入的值 6、Session-A提交 7、都可以看到新插入的tuple UPDATE PostgreSQL...看到老版本,其xmax为499,499的事务删除的该记录 5、Session-A提交事务,老版本记录消失 6、所有会话都看不到之前的老版本 可以看到,这些操作都不会直接删除现有记录,如果需要会添加一个附加版本...3、回滚时恢复老版本 回滚时,PostgreSQL不用任何特定内容,需注意老版本的xmax等于update该记录的事务ID。因此在并发快照中该记录认为是alive的直到该事务ID的事务提交。

    1.2K10

    PostgreSQL主从复制--逻辑复制

    1 物理复制及逻辑复制对比 前文做了PostgreSQL物理复制的部署,其有如下主要优点 物理层面完全一致,是主要的复制方式,其类似于Oracle的DG 延迟低,事务执行过程中产生REDO record...,实时的在备库apply,事务结束时,备库立马能见到数据 物理复制的一致性、可靠性高,不必担心数据逻辑层面不一致 但是其又在实际使用的场景中存在一些无法满足的需求,例如: 无法满足指定库或部分表的复制需求.../** 在主库插入数据 */ sourcedb=# insert into logical_tb1(id,name) values(1,'a'),(2,'bca'); INSERT 0 2 在逻辑从库查看结果...此时在主库写入数据,查看从库情况如下: /** 主库插入一条记录 */ sourcedb=# insert into logical_tb2(id,addr) values(1,'beijing');...物理复制与逻辑复制特点和应用场景 PostgreSQL的逻辑复制与物理复制的差异比较突出,在使用中可以根据其特点选择使用哪种复制方式。 逻辑订阅,适合于发布端与订阅端都有读写的情况。

    4.5K31

    PostgreSQL 的 MVCC 机制解析

    ctid: 每条记录(称为一个tuple)在表中的物理位置标识。 xmin: 创建一条记录(tuple)时,记录此值为当前事务ID。...在该事务(seesion1)未提交前,其他事务(seesion2)可以看到之前的版本信息,不同的事务拥有各自的数据空间,其操作不会对对方产生干扰,保证了事务的隔离性。...根据PostgreSQL的MVCC规则,插入数据时,会将当前事务ID写入到xmin中,删除数据时,会将事务ID写入xmax中,更新数据相当于先删除原来的tuple再新增一个tuple,增删改操作都保留了事务...对某个tuple进行更新或删除时,其他事务读取的就是这个tuple之前的版本。...MVCC的优势 读写不会相互阻塞,写操作并没有堵塞其他事务的读,在写事务未提交前,读取的都是之前的版本,提高了并发的访问效率。

    4.2K00
    领券