一、导入数据时: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很慢;
- 有很多客户端主机时会导致连接很慢;
- 在 [mysqld] 下添加
-
五、[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
- 1、select * from information_schema.INNODB_TRX;
- 1、查看数据库事务隔离级别
- 描述:
-
七、错误: 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版。)
- 显示: