0

テーブルの 1 つに (同じテーブルから) 挿入しようとしています。値の1つを変更する必要があるため、ここで回答したように選択して挿入しようとしました。自動インクリメント pk があり、新しく挿入された pk でカウントを続行したいと考えています。したがって、挿入すると、pk に 1 が追加されます。

INSERT INTO test.pp_publication_info
(id,
publication_fk,
template_fk,
allow_excel_upload)
SELECT 
id, 55, template_fk, allow_excel_upload
FROM pp_publication_info where id = "1";

1KEY PRIMARY のエントリが重複している 1062 エラーが表示されます。AIのせいでID列が+1されると思います。だから私は追加できるかどうかを確認しましたON DUPLICATE KEY UPDATE id。残念ながら、クエリのどこにそれを入れても問題ありませんでした。

要するにINSERT、AI機能を保持しながら選択して、このようにすることはできますか? もしそうなら、私はどこで間違っているのですか?

追加:私のテーブルのステートメントを作成します:

CREATE TABLE `pp_publication_info` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`publication_fk` int(10) unsigned NOT NULL,
`template_fk` int(10) unsigned DEFAULT NULL,
`allow_excel_upload` tinyint(1) DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;
4

1 に答える 1

1

あなたのidコラムはAUTO_INCREMENT

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

これは、レコードが挿入されたときにデータベースが識別子を生成することを意味します。そのため、そのフィールドに値を挿入しないでください。自動的に入力されます。

だから、このようなもの:

INSERT INTO test.pp_publication_info
  (publication_fk,
   template_fk,
   allow_excel_upload)
SELECT 
  55, template_fk, allow_excel_upload
FROM pp_publication_info where id = 1;

が実行されると、新しいレコードの列に、シーケンス内の次の値が入力されているINSERTことがわかります。id(さまざまな理由で発生する可能性があるシーケンスのギャップを除いて。)

于 2015-11-19T15:09:51.473 に答える