Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:添加主键后缺少数据_Mysql_Insert_Primary Key - Fatal编程技术网

MySQL:添加主键后缺少数据

MySQL:添加主键后缺少数据,mysql,insert,primary-key,Mysql,Insert,Primary Key,在向表中添加主键之后,我发现了一些非常奇怪的行为。在创建键之前,表中有6672行。创建密钥后,共有103个。但是,如果在空表上创建键,然后添加相同的数据,则会有6672行。是的,用于生成主键的所有值都是唯一的。 下面是我运行的代码 该表为“WC”: CREATE TABLE `wc` ( `gvkey` bigint(20) NOT NULL, `date_fin` date NOT NULL, `wc` double DEFAULT NULL, `wc_less_debt_st

在向表中添加主键之后,我发现了一些非常奇怪的行为。在创建键之前,表中有6672行。创建密钥后,共有103个。但是,如果在空表上创建键,然后添加相同的数据,则会有6672行。是的,用于生成主键的所有值都是唯一的。 下面是我运行的代码

该表为“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;
如果在添加主键之前运行测试,则结果为6672。创建密钥后运行时,结果为103。如果我移动电话

ALTER TABLE wc
    ADD PRIMARY KEY `gvkey-date` (gvkey asc, date_fin asc);
若要在
从wc中删除后立即执行
操作,然后运行
插入操作
,则它可以正常工作,从而在表中生成6672行

我以前在向已经填充了数据的表添加主键时遇到过一些问题,但从来没有这么明显

这种行为是已知的吗?向填充的表中添加主键的做法是否不好?我这样做的动机(先填充然后创建PK)是因为我认为插入在没有主键的情况下会运行得更快。虽然这对这个表没有关系,但我正在处理一些记录超过300万条的表。我对数据库管理还比较陌生,所以任何建议或解释都将不胜感激。我在其他任何地方都没有发现这一点


谢谢,

查询返回的
选择DISTINCT
行数是多少?6k或100?@SalmanA,SELECT DISTINCT返回6672行。