【发布时间】:2015-10-26 23:15:07
【问题描述】:
我遇到了一个奇怪的情况:我在 MySQL 5.6.14 中使用 INSERT INTO tabl1 (col1,...) SELECT (col2...) FROM tbl2... 和我的记录比以前多。准确的说是640。
我通过在两个表上执行 select count(*) 来检查,从旧表中减去新表(这给了我 -640)。
有什么想法吗?我想知道额外的 640 条记录是从哪里来的。
两者都是 InnoDB;旧表是拉丁字符集,新表是 utf8。怀疑这是等式的一部分,但也许对 MySQL 有更多经验的人会知道。
SQL 语句示例:
INSERT INTO `table1` (`col1`,`col2`,`col3`) SELECT (`colA`,`colB`,`colC`) FROM `table2`;
接收记录的表是新的,里面有0条记录,从来没有记录过。另外,它不是生产环境,所以除了这条语句之外,什么都不应该添加记录。
【问题讨论】:
-
请出示您使用的完整声明。数据库是否在积极使用中?自从您运行 INSERT 后,有人会删除记录吗?
-
如果您在插入之前已经有上一个表中的数据,那么您将拥有更多数据。如果您希望它们准确,那么您必须在插入之前先对表格进行截断。除非您的 sql 语句给您重复数据,否则您需要检查您的 sql statemetn。首先突出显示您的选择语句并运行它以查看结果,如果它正确,那么您需要做的就是在插入之前截断表格
-
我将此添加到问题中,但接收记录的表是全新的,包括架构。它也不是生产环境,所以除了这个 1 语句之外没有其他事务。最后,旧表的计数小于新表的计数(插入后)。
-
我不明白为什么这会给你比另一个表更多的行。您在该表上是否有一个触发器/过程正在生成虚拟行或其他东西?
-
没有触发器/程序。
标签: mysql