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

sql删除一条记录后其他记录的id自动迁移,使id连续

在写一个应用时,有这么一个操作:客户端传过来点击的位置,进行运算后得到相应数据在数据库里的id,然后显示对应的信息。...但是在进行delete后数据显示就混乱了,发现根本原因是原本连续的数据id(例如:1、2、3、4),在sqlite的delete语句执行完后(比如说删除id为2的数据),变得不连续(1、3、4)。...删除后点击第三个数据,结果他显示成第二个,而第二个早就删除了,因此显示的信息完全混乱。...解决代码如下: 在执行删除时更新表,把删除位置后面的都往前移动一位 db.execSQL("delete from tb_diary2 where _id in ("+ sb + ")",...(Object[]) ids); //更新id,使id大于要删除的id的往前移动一位。

1.3K20

Mybatis映射文件深入 - 新增数据后返回主键ID - 动态SQL - SQL片段

Mybatis映射文件深入 - 新增数据后返回主键ID - 动态SQL - SQL片段 前言 在前面的篇章中,我们已经认识了如何使用 resultMap标签 映射查询的结果集字段、多条件查询、模糊查询。...新增数据后,返回主键 ID 应用场景 向数据库保存一个user对象后, 然后在控制台打印此新增user的主键值(id) # 点外卖 1....需要返回这条记录的主键, 然后给第三方配送平台, 送外卖 实现案例一:基于MyBatis 框架自带的主键返回功能 ① UserMapper接口 /* * # 复杂操作:插入一条数据返回对应的主键...user表中主键列 keyProperty="id" user实体主键属性 注意:支持主键自增类型的数据库 MySQL 和 SqlServer , oracle不支持 --...实现方式 把id和username封装到user对象中,将user对象中不为空的属性作为查询条件。 这个时候我们执行的sql就有多种可能。

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

    SQL:删除表中重复的记录

    --创建测试表 if object_id('test') is not null drop table test create table test ( id int identity(1,1)...insert test select from # --删除新表 drop table # --查看结果 select from test 查找表中多余的重复记录,重复记录是根据单个字段...peopleId in (select  peopleId  from  people  group  by  peopleId  having  count(peopleId) > 1)  2、删除表中多余的重复记录...a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq  having count() > 1)  4、删除表中多余的重复记录...“name”,而且不同记录之间的“name”值有可能会相同,  现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项;  Select Name,Count() From A Group

    4.8K10

    MySQL记录删除后竟能按中间被删除的主键加回去,磁盘空间被重用!——底层揭秘MySQL行格式记录头信息

    Infimum记录 的下一条记录就是本页中主键值最小的用户记录,而本页中主键值最大的用户记录的下一条记录就是 Supremum记录。...行ID,唯一标识一条记录 DB_TRX_ID 是 6字节 事务ID DB_ROLL_PTR 是 7字节 回滚指针 InnoDB表对主键的生成策略:优先使用用户自定义主键作为主键,如果用户没有定义主键...,则选取一个Unique键作为主键(必须NOT NULL不允许存NULL值),如果表中连Unique键都没有定义的话,则InnoDB会为表默认添加一个名为DB_ROW_ID的隐藏列作为主键。   ...从上表中可以看出:InnoDB存储引擎会为每条记录都添加 DB_TRX_ID和 DB_ROLL_PTR这两个列,但是 DB_ROW_ID是可选的(在没有自定义主键以及不允许存NULL值的Unique键的情况下才会添加该列...4.当记录被删除,页中记录存储结构如何变化? 当然最大的疑问就是被删除的记录还在页中么?   是的,你以为记录删除了,可它还在真实的磁盘上(占用空间依然存在)。

    92110

    2020-12-02:mysql中,一张表里面有 ID 自增主键,当 insert 了 17 条记录之后...

    2020-12-02:mysql中,一张表里面有 ID 自增主键,当 insert 了 17 条记录之后,删除了第 15,16,17 条记录,再把 Mysql 重启,再 insert 一条记录,这条记录的...福哥答案2020-12-04:答案来自此链接: 1.Mysql8.0以下版本 表类型为InnoDB引擎,这条记录的ID是15。...因为InnoDB表只把自增主键的最大ID记录到内存中,所以重启MYSQL或者对表OPTIMIZE操作,都会使最大ID丢失。 表类型为MylSAM引擎,这条记录的ID是18。...因为MylSAM表会把自增主键的最大ID记录到数据文件里面,重启MYSQL后,自增主键的最大ID也不会丢失。...2.Mysql8.0及以上版本 这条记录的ID是18,因为这个版本保存ID的值是在redo日志中的,重启之后是可以恢复的。

    81610

    如何使用sql代码清空表,使重置id自增值

    在 SQL 中,如果你希望重置一个表的自增值(通常是主键 id),你可以使用不同的方法,具体取决于你使用的数据库管理系统(DBMS)。...auto_increment_value = 1; ALTER TABLE questions AUTO_INCREMENT = @auto_increment_value; 注意:TRUNCATE TABLE 会删除表中的所有数据并重置自增值...删除 sqlite_sequence 表中的相关记录即可重置自增值。...Microsoft SQL Server 在 SQL Server 中,你可以使用 DBCC CHECKIDENT 来重置自增值。...影响:重置自增值可能会影响数据的完整性和引用完整性(如果其他表中有外键引用该表的主键)。 事务:在某些数据库系统中,重置自增值的操作可能是不可回滚的,所以请确保在事务外执行这些操作(如果适用)。

    14910

    MySQL 基本使用(上):DDL 和 DML 语句

    数据库重命名和删除 对于已创建的数据库,可以通过重命名数据库修改数据库名称,还可以点击删除链接进行删除,这些都位于选中指定数据库后,右侧面板顶部导航条「操作」面板中: ?...新建数据表 接下来,就进入了数据表字段(列)创建页面,我们首先需要设置一个主键 ID 字段,当选择索引为 PRIMARY(主键索引)时,会弹出创建索引窗口: ?...插入语句 新建数据表后,可以通过 INSERT INTO 插入数据,这里我们还可以通过 phpMyAdmin 演示,选中左侧面板的 post 数据表,点击右侧「插入」顶部导航,在表单字段中填写字段值,ID...在数据表中新增记录 插入成功后,可以看到对应的 SQL 插入语句: ? 插入 SQL 语句 再点击顶部「浏览」导航条,就可以看到插入的记录了: ?...要清空整张表记录,并将自增 ID 重置为 1,需要在「操作」面板通过 TRUNCATE 操作完成: ? 清空数据表 以上就是数据表增删改查的基本操作实现。

    3.8K30

    SQL DELETE 语句:删除表中记录的语法和示例,以及 SQL SELECT TOP、LIMIT、FETCH FIRST 或 ROWNUM 子句的使用

    SQL DELETE 语句 SQL DELETE 语句用于删除表中的现有记录。 DELETE 语法 DELETE FROM 表名 WHERE 条件; 注意:在删除表中的记录时要小心!...WHERE子句指定应删除哪些记录。如果省略WHERE子句,将会删除表中的所有记录!...可以在不删除表的情况下删除表中的所有行。...这意味着表结构、属性和索引将保持不变: DELETE FROM 表名; 以下 SQL 语句将删除 "Customers" 表中的所有行,而不删除表: DELETE FROM Customers; 删除表...WHERE Country='Germany' FETCH FIRST 3 ROWS ONLY; 添加 ORDER BY 关键字 在要对结果进行排序并返回排序后结果的前 3 条记录时,添加 ORDER

    2.4K20

    【重学 MySQL】六十五、auto_increment 的使用

    重置 AUTO_INCREMENT 值 要重置 AUTO_INCREMENT 值,可以将其设置为比当前最大值更大的值,或者通过删除所有记录并重新设置: TRUNCATE TABLE example;...-- 删除所有记录,并重置 AUTO_INCREMENT 值 或者: DELETE FROM example; ALTER TABLE example AUTO_INCREMENT = 1; -- 重置为...删除和插入:删除记录不会重置 AUTO_INCREMENT 值,除非使用 TRUNCATE TABLE。 事务:如果插入操作在一个事务中被回滚,AUTO_INCREMENT 值仍然会增加。...MySQL8.0 新特性:自增变量的持久化 MySQL 8.0 版本引入了自增变量的持久化这一新特性,旨在解决之前版本中自增主键在数据库重启后可能重置的问题。...总结 MySQL 8.0 的自增变量持久化特性解决了之前版本中自增主键在数据库重启后可能重置的问题。

    19710

    MySQL-存储引擎-创建表-字段数据类型-严格模式-字段约束-键-02

    当你没有设置主键的时候,会自上往下寻找非空且唯一的约束字段自动将其升级为主键字段 当你的表中没有任何约束(主键也是约束)字段的时候,InnoDB会使用内部的一个隐藏字段作为主键,我们无法利用该主键 MyISAM...在同一张表中,字段名不能相同 # 2. 宽度和约束条件可选,字段名和类型是必须的 # 3. 最后一个字段后不能加逗号!...key 的字段上,不能单独使用,通常都是跟 primary key 联用 主键字段应该具备自动递增的特点,每次添加数据,不需要用户手动输入 自动递增序号问题 删除数据后,序号不会接着上一条存在数据往下递增...,而是从上一次的最大序号开始递增 delete from 清空表仅仅是删除数据,不会重置 id delete from tb1; # 不加条件默认删除表内所有记录 truncate 清空并初始化表...,可以重置主键 truncate table tb1; # 清空表,id字段会重置 ?

    2.4K30

    数据库约束-主键约束-唯一约束-非空约束-默认值

    通过修改表结构添加主键约束 -- 方式3: 创建完表后,通过修改表结构添加主键约束 CREATE TABLE user3( id INT, `name` VARCHAR(20) ); -- 修改表添加主键..., 主键可以为多个字段 , 不过我们一般增加一个字段 id 来作为主键. ” 执行如下: -- 联合主键: 包含 id 与 name 两个字段作为主键,要求表中的数据 id 与 name 结合在一起不能重复...: 0 Warnings: 0 -- 删除主键之后的表结构,可以看到 id 已经不是主键了。...,不重置AUTO_INCREMENT的值 TRUNCATE摧毁表,重建表,AUTO_INCREMENT重置为1 如果想自定义id的值,可以使用下面的sql进行设置,一般不需要 ALTER TABLE 表名...| name | +----+--------+ | 5 | 沙僧 | -- 说明 delete 删除的表数据,并不会重置 id 的自增,而是接着之前的自增值继续自增 +----+-----

    6.4K10
    领券