通过id修改MySQL表数据失败

通过id去修改MySQL表数据,用的是Update,然后运行后显示修改成功,但MySQL表中的数据并没有改变,是不是因为id没有匹配导致的,而且没有保错信息

img

img

img

字太小看不清,是不是打开了事务?在ps.executeUpdate后面加上conn.commit();看下是否可以

用ID查询数据库有没有对应数据

你这id哪来的,是从数据库里读到的吗,断点跟,看看到底是多少

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/784991
  • 这篇博客你也可以参考下:MySql数据库,删除一条数据后,新增数据id不连续解决方法
  • 同时,你还可以查看手册:MySQL 字符集、对齐方式、统一编码 选择一个整理ID 中的内容
  • 除此之外, 这篇博客: mysql使用存储过程插入记录并返回自增id踩坑中的 mysql使用存储过程插入记录并返回自增id踩坑(由于不同表中相同字段导致的错误 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 1. 附上mysql插入记录后返回自增id的方法链接

    mysql插入数据后返回自增ID的方法.

    2. 出问题的存储过程

    CREATE  PROCEDURE `proc_test`(IN tname VARCHAR(255),IN tpwd VARCHAR(255),OUT reid INT)
    BEGIN
    INSERT INTO test (uname,upsd)VALUES(tname,tpwd);
    SELECT max(uid) INTO reid FROM test;
    END
    

    运行测试之后,test数据表里成功多了一条记录,id也相应增加了,但返回值为null,最终发现返回null的原因是多个表中都存在名为uid的字段,而其它表中目前都为空,将uid改为 表名.字段名的形式后,问题解决,成功返回自增id。
    3. 修改后的存储过程

    CREATE  PROCEDURE `proc_test`(IN tname VARCHAR(255),IN tpwd VARCHAR(255),OUT reid INT)
    BEGIN
    INSERT INTO test (uname,upsd)VALUES(tname,tpwd);
    SELECT max(test.uid) INTO reid FROM test; #uid改为test.uid
    END
    

    这个只是非常简单基础的东西,至于高并发什么的,我目前没有遇到,还没有达到那个水平

    好吧,虽然这个问题很蠢,但真的困扰了我很久,当时学数据库得时候并没有系统地学习,都是用到什么搜什么,用完就过去了,也不理解原理什么的,当时还用的是半吊子水平的C#+sql server, 这次老师突然又让用,还要求必须java+mysql,这两当年学的时候前者只了解了一下最基本的知识,多线程都没搞清楚,后者就没有用过,只能硬着头皮瞎搞了……

    希望我这个小菜鸟少掉点头发!!!!
    希望我能顺利毕业!!!
    希望我接下来三年不要太痛苦!!!
    哦~加油鸭!!!!!!

  • 以下回答由chatgpt基于相关博客总结生成:

    根据提供的参考资料和问题描述,问题可能源自于id的匹配失败,更新语句并没有正确地匹配到相应的记录,导致修改失败,但是没有明确的错误提示信息。下面是一些解决方案:

    1. 确认需要修改的记录是否存在,可以通过select语句进行查询,如果没有查询到相应记录,则说明id匹配失败。
    SELECT * FROM table_name WHERE id=1;
    
    1. 确认update语句是否正确,可以通过在MySQL命令行执行update语句,观察是否有报错信息。
    UPDATE table_name SET column_name=value WHERE id=1;
    
    1. 确认表中是否设置了自增主键,如果没有,需要先设置自增主键,才能使用update语句更新记录。
    ALTER TABLE table_name ADD COLUMN id INT AUTO_INCREMENT NOT NULL PRIMARY KEY;
    
    1. 确认是否有其他操作导致id值发生了变化,如删除记录、重启数据库等操作,可能会导致自增id值不连续。可以通过使用SHOW TABLE STATUS命令查看表的状态,观察Auto_increment的值是否发生了变化。
    SHOW TABLE STATUS LIKE 'table_name';
    

    如果以上方法都不能解决问题,可能需要更深入的排查,可以考虑查看MySQL的错误日志,或者使用调试工具进行排查。

    另外,关于分库分表后的ID主键处理,可以考虑使用以下方法: - 使用uuid等全局唯一标识符代替自增id - 不同表设置不同的自增步长,或者手动控制自增id的分配 - 利用Redis生成id,或使用Twitter的snowflake算法生成id等方式。