9

次のコードがあります

CREATE TABLE IF NOT EXISTS `abuses` (
  `abuse_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL DEFAULT '0',
  `abuser_username` varchar(100) NOT NULL DEFAULT '',
  `comment` text NOT NULL,
  `reg_date` int(11) NOT NULL DEFAULT '0',
  `id` int(11) NOT NULL,
  PRIMARY KEY (`abuse_id`),
  KEY `reg_date` (`reg_date`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COMMENT='Table with abuse reports' AUTO_INCREMENT=2 ;

このテーブルは既にデータベースに存在するのですが、phpmyadminでsqlファイルをインポートすると以下のエラーが発生します

--
-- Dumping data for table `probid_abuses`
--
INSERT INTO  `abuses` (  `abuse_id` ,  `user_id` ,  `abuser_username` ,  `comment` ,  `reg_date` , `auction_id` ) 
VALUES ( 1, 100020,  'artictundra', 'I placed a bid for it more than an hour ago. It is still active. I thought I was supposed to get an email after 15 minutes.', 1338052850, 108625 ) ;

#1062 - Duplicate entry '1' for key 'PRIMARY' 

既に存在するため、作成しようとしないと思いましたが、なぜそのように動作するのですか?

4

5 に答える 5

4

CREATE TABLE で、

Abuse_id の AUTO_INCREMENT は 2 に設定されています。MySQL は 1 が既に存在すると見なします。

INSERT ステートメントを使用して、レコード 1 に Abuse_id を挿入しようとしています。CREATE_TABLE の AUTO_INCREMENT を 1 に設定して、もう一度試してください。

それ以外の場合は、INSERT ステートメントの Abuse_id を「NULL」に設定します。

どうすればこれを解決できますか?

于 2016-06-21T12:34:39.153 に答える
2

これは、「abuse_id」を自動インクリメントとして既に定義しているためです。その値を挿入する必要はありません。自動的に挿入されます。データの重複である 1 を何度も挿入しているため、エラーが発生します。主キーは一意である必要があります。繰り返してはいけません。

あなたがしなければならないことは、以下のように挿入クエリを変更することです

INSERT INTO  `abuses` (  `user_id` ,  `abuser_username` ,  `comment` ,  `reg_date` , `auction_id` ) 
VALUES ( 100020,  'artictundra', 'I placed a bid for it more than an hour ago. It is still active. I     thought I was supposed to get an email after 15 minutes.', 1338052850, 108625 ) ;
于 2014-12-29T09:20:23.850 に答える
1

達成したい内容に応じて、ファイル内で INSERT を INSERT IGNORE に置き換えることができます。これにより、挿入しようとしている既存の行に対してエラーが発生するのを回避できます。

http://dev.mysql.com/doc/refman/5.5/en/insert.htmlを参照してください。

于 2013-09-13T23:26:04.550 に答える
0

あなたの場合、挿入する最初の値は NULL でなければなりません。これは AUTO_INCREMENT であるためです。

于 2015-02-15T23:25:35.023 に答える