MySQL:添加主键后数据丢失

时间:2012-12-22 08:41:49

标签: mysql insert primary-key

在向表中添加主键后,我发现了一些非常奇怪的行为。在创建密钥之前,表中有6,672行。创建密钥后,有103.但是如果在空表上创建密钥,那么添加相同的数据就有6,672行。是的,用于制作主键的所有值都是唯一的。 我跑的代码如下。

表格是'WC':

CREATE TABLE `wc` (
  `gvkey` bigint(20) NOT NULL,
  `date_fin` date NOT NULL,
  `wc` double DEFAULT NULL,
  `wc_less_debt_st` double DEFAULT NULL,
  `curr_liab_x` double DEFAULT NULL,
  `wc_adj` double DEFAULT NULL,
  `wc_adj_v2` double DEFAULT NULL,
  PRIMARY KEY (`gvkey`,`date_fin`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

创建表后,运行以下代码:

ALTER TABLE wc
DROP PRIMARY KEY;

DELETE FROM wc;

INSERT INTO wc (date_fin, gvkey)
SELECT DISTINCT u.udate, g.gvkey 
FROM gvkey as g INNER JOIN udate as u
WHERE g.flag = TRUE;

ALTER TABLE wc
ADD PRIMARY KEY `gvkey-date` (gvkey asc, date_fin asc);

测试表的大小:

SELECT COUNT(gvkey) FROM (SELECT gvkey FROM wc GROUP BY gvkey) AS x;

如果在添加主键之前运行测试,则结果为6,672。在创建密钥后运行时,结果为103.如果我然后移动呼叫

ALTER TABLE wc
    ADD PRIMARY KEY `gvkey-date` (gvkey asc, date_fin asc);

delete from wc之后,然后运行INSERT然后它工作正常,表格中有6,672行。

我之前遇到过一些问题,即将主键添加到已经填充了数据的表中但是从来没有这么明显。

这是否已知行为,将主键添加到已填充的表是不好的做法?我按此顺序执行此操作的动机(填充然后创建PK)是因为我认为插入在没有主键的情况下运行得更快。虽然这个表没关系,但我正在使用一些记录超过3m的表。我对数据库管理还很陌生,所以任何建议或解释都将不胜感激。我还没有在其他地方找到任何提及。

谢谢,

0 个答案:

没有答案
相关问题