2

requestsテーブルの1つのフィールドの個別の値をテーブルの唯一のフィールドに挿入しようとしていますpastmonth

CREATE TABLE `pastmonth` (
  `video_id` char(5) DEFAULT NULL,
  PRIMARY KEY (`video_id`)
);

INSERT INTO pastmonth (video_id)
SELECT DISTINCT (video_id)
FROM requests
WHERE exec_datetime >= NOW() - 60*24*60*60;

ただし、このエラーが発生します

Error Code: 1062. Duplicate entry 'abcde' for key 'PRIMARY'

abcde次のクエリは、エントリが1つしかないことを示しているため、テーブルの値に重複するエントリがあるとは思いませんがrequests、とにかくDISTINCT値を選択しているため、エントリがあったかどうかは関係ありません。

SELECT COUNT(*) FROM requests WHERE video_id = 'abcde';

COUNT(*)
1

私は一意ではないインデックスを持っていrequests.video_idますが、それは私が抱えている問題とは無関係だと思います。破損したbtreeインデックスがある可能性はありますか?

編集

CREATE TABLE `requests` (
  `request_id` bigint(20) NOT NULL AUTO_INCREMENT,
  `video_id` char(5) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
  `exec_datetime` datetime DEFAULT NULL,
  PRIMARY KEY (`request_id`),
  KEY `exec_datetime` (`exec_datetime`),
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1
4

1 に答える 1

1

requests表では、video_idフィールドは次のように定義されています。

`video_id` char(5) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,

しかし、新しいテーブルでは、次のように定義されています。

`video_id` char(5)

文字セットと対応する照合に違いがある可能性があります。両方のフィールドの文字セットと照合がまったく同じであることを確認してください。

于 2013-03-21T03:57:06.970 に答える