通过id去修改MySQL表数据,用的是Update,然后运行后显示修改成功,但MySQL表中的数据并没有改变,是不是因为id没有匹配导致的,而且没有保错信息
字太小看不清,是不是打开了事务?在ps.executeUpdate后面加上conn.commit();看下是否可以
用ID查询数据库有没有对应数据
你这id哪来的,是从数据库里读到的吗,断点跟,看看到底是多少
1. 附上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,这两当年学的时候前者只了解了一下最基本的知识,多线程都没搞清楚,后者就没有用过,只能硬着头皮瞎搞了……
希望我这个小菜鸟少掉点头发!!!!
希望我能顺利毕业!!!
希望我接下来三年不要太痛苦!!!
哦~加油鸭!!!!!!
根据提供的参考资料和问题描述,问题可能源自于id的匹配失败,更新语句并没有正确地匹配到相应的记录,导致修改失败,但是没有明确的错误提示信息。下面是一些解决方案:
SELECT * FROM table_name WHERE id=1;
UPDATE table_name SET column_name=value WHERE id=1;
ALTER TABLE table_name ADD COLUMN id INT AUTO_INCREMENT NOT NULL PRIMARY KEY;
SHOW TABLE STATUS LIKE 'table_name';
如果以上方法都不能解决问题,可能需要更深入的排查,可以考虑查看MySQL的错误日志,或者使用调试工具进行排查。
另外,关于分库分表后的ID主键处理,可以考虑使用以下方法: - 使用uuid等全局唯一标识符代替自增id - 不同表设置不同的自增步长,或者手动控制自增id的分配 - 利用Redis生成id,或使用Twitter的snowflake算法生成id等方式。