2017-10-03 19 views
0

私は、このテーブル定義を持っている:MySQL ERROR 1062(23000):キー 'watched'の重複エントリ '2'?

mysql> DESCRIBE watched; 
+---------+--------+------+-----+---------+----------------+ 
| Field | Type | Null | Key | Default | Extra   | 
+---------+--------+------+-----+---------+----------------+ 
| id  | int(6) | NO | PRI | NULL | auto_increment | 
| stream | int(3) | NO |  | 0  |    | 
| month | date | NO |  | NULL |    | 
| watched | int(6) | NO | UNI | 1  |    | 
+---------+--------+------+-----+---------+----------------+ 

そして、これは内部のデータです:私はこのクエリを実行すると

mysql> SELECT * FROM watched; 
+----+--------+------------+---------+ 
| id | stream | month  | watched | 
+----+--------+------------+---------+ 
| 1 |  11 | 2017-10-01 |  2 | 
| 2 |  11 | 2017-10-01 |  1 | 
+----+--------+------------+---------+ 
2 rows in set (0.00 sec) 

は:

INSERT INTO watched (stream, month) VALUES (11, DATE_FORMAT(NOW(), "%Y-%m-01")) ON DUPLICATE KEY UPDATE watched=watched+1; 

を私はこのエラーを取得する:

ERROR 1062 (23000): Duplicate entry '2' for key 'watched' 

IDはPRIMARYとAUTO_INCREMENTに設定され、監視はUNIQUEに設定されているので、SQL文で監視値を増減することができます。監視=監視+ 1

しかし、UNIQUE監視フィールドの設定方法はわかりません増減値を1で...

EDIT:

これは、テーブルの構造である:

mysql> SHOW CREATE TABLE watched; 
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| Table | Create Table                                                                    | 
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| watched | CREATE TABLE `watched` (
    `id` int(6) NOT NULL AUTO_INCREMENT, 
    `stream` int(3) NOT NULL DEFAULT '0', 
    `month` date NOT NULL, 
    `watched` int(6) NOT NULL DEFAULT '1', 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `watched` (`watched`) 
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 | 
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
1 row in set (0.03 sec) 
+0

'watched.watched'のように' UNIQUE'制約がないはずです。 –

+0

'SHOW CREATE TABLEからの出力を投稿しました; –

+0

私は誤った箇所を見て回るように質問を更新しました。ありがとうございました – John

答えて

0

私はちょうど使用して、マイケルの提案どおりwatched.watchedからUNIQUEを削除する必要があります。

ALTER TABLE watched DROP INDEX watched 

そして、増加カウンタ+ 1発見されたかのように新しいレコードを挿入しない場合は、ストリームのためのUNIQUEを作成します。

ALTER TABLE watched ADD UNIQUE (stream); 

今すぐエラーがなくなって、カウンタはインクリメント+ 1であり、すべてが正常に動作してます。.. .God bless MySQL:

関連する問題