Mysql 使用遇到的问题总结一
一、导入数据时:1062 - Duplicate entry ‘0’ for key ‘PRIMARY’
-
原因: 主键重复,或者设置了唯一索引
-
二、Column count doesn’t match value count at row 1 解释: 存储的数据与数据库表的字段类型定义不相匹配。 解决办法: 检查段类型是否正确, 是否越界,有无把一种类型的数据存储到另一种数据类型中.看看dao层访问数据库的sql语句是否书写错误,赋值的参数是否与字段类型一致 可能原因: 列数不相等; 书写错误; 三、Packet for query is too large 问题列表: 描述: mysql的max_allowed_packet设置过小引起的,默认设置的是 1024. mysql 根据配置文件会限制 server接受的数据包大小,有时候大的插入和更新会被max_allowed_packet 参数限制。导致失败 图片显示: 执行命令: set global max_allowed_packet = 210241024*10; 四、Mysql 远程连接缓慢的问题 在 [mysqld] 下添加 skip-name-resolve 可能的原因: mysql主机查询DNS很慢; 有很多客户端主机时会导致连接很慢; 五、[Err] 1093 - You can’t specify target table ‘x’ for update in FROM clause 例子: UPDATE user SET name=“onenote” WHERE id IN (SELECT id FROM user WHERE id = 4967 AND STATUSIN (0, 1, 4)); 原因: update语句中包含的子查询的表和update的表为同一张表时,报错:1093-Youcan’t specify target table for update in FROM clause mysql不允许update目标表和子查询里面的表为同一张表 解决办法: 利用子查询sql可以改变双层的子查询,即可执行成功 (但性能较差,仅仅适合较小的数据量的) 修改: UPDATE user SET name=“onenote” WHERE id IN(SELECT * FROM ( SELECT u.idFROM user u WHERE id = 4967 ANDSTATUS IN (0, 1, 4)) AS temp); 六、Lock wait timeout exceeded; try restarting transaction。 描述: ERROR 1205(HY000): Lock wait timeout exceeded; try restarting transaction。 解决方式: 1、查看数据库事务隔离级别 select @@transaction_isolation; 2、查看当前数据库的线程情况; show full processlist 3、如果没有查看到执行的较慢的sql记录线程,就查看innodb 的事务表INNODB_TRX, 查看是否有正在锁定的事务线程,看看其id 是否存在于 show fullprocesslist 的sleep线程中,如果是,就证明这个sleep 的线程事务一直没有commit或者rollback,线程阻塞了。手动kill 掉; 1、select * from information_schema.INNODB_TRX; 2、kill 114849 七、错误: java.math.BigInteger在连接MySQL时无法强制转换为java.lang.Long (ClassCastException:) 显示: Caused by:java.lang.ClassCastException: java.math.BigInteger cannot be cast tojava.lang.Long 可能原因: 当我们要求JDBC驱动程序建立连接时,它在场景之后做了很多工作,然后才真正给我们提供了正确的连接工作对象。 您的MySQL版本与您的mysql-connector.jar版本相结合似乎存在问题。尝试使用较新版本的MySQLConnector (请升级到8.0.12版。)