4

自動インクリメントする単一の主キー (pkey と呼ばれる) を持つ Mysql テーブルがあり、auto によって定義された次の使用可能な値になる主キーを除いて、すべてのデータを同じに保ちながら、1 つの行を複製したいと考えています。インクリメント。

私の最初の質問は、次のクエリは可能ですか?

UPDATE `table` SET pkey='next_available_primary_key' WHERE pkey='old_primary_key'

試した場合

UPDATE `table` SET pkey=null WHERE pkey='old_primary_key'

ただし、主キーの値をゼロに設定するだけです。ヘルプ/提案をお寄せいただきありがとうございます。

アップデート:

テーブル内のデータのコピーが 2 つ必要ないことを追加する必要があると思います。主キーを変更したいだけです。したがって、INSERT SELECT を使用する場合は、ON DUPLICATE KEY UPDATE pkey='next_available_primary_key' を使用して補正する必要があります。これを行う方法がわかりません...

4

5 に答える 5

7

テーブルに新しい行を作成しようとしている場合は、UPDATE ではなく INSERT が必要です。

これはどう?PKEY が自動インクリメントに設定されていることを確認してください。

INSERT INTO `table` (col,col,col)  /*name all the columns EXCEPT the primary key*/
SELECT col,col,col  /*name all the columns EXCEPT the primary key*/
  FROM 'table`
 WHERE pkey='old_primary_key'
于 2010-01-18T01:49:24.037 に答える
3

clone-sql-recordにある解決策はどうですか?

CREATE TEMPORARY TABLE %1 ENGINE=MEMORY SELECT * FROM mytable WHERE myid=%2;

UPDATE %1 SET myid=%3;

INSERT INTO mytable SELECT * FROM %1;

DROP TABLE %1;

どこ

  • %1 は "T"+raw_time_stamp、例: T20120124132754
  • %2 は古い ID です
  • %3 は newid です
于 2012-01-24T19:44:52.823 に答える
3
insert into t select 0,a,b,c,d,e from t where id = some_id

auto_increment 列の値として 0 を使用すると、mysql は次に利用可能なものを使用します...

新しいコメント用に編集しました。ID を次に利用可能なものに変更したい場合は、

update tbl set id = (select auto_increment from
  information_schema.tables where  table_name = 'tbl') where id = 4;
于 2010-01-18T01:46:22.753 に答える
0

自動インクリメントされた主キーを使用して、テーブルのレコードを複製します

CREATE TEMPORARY TABLE `tmp` SELECT * FROM `your_table_name`;

UPDATE `tmp` SET id = NULL ;

INSERT INTO `your_table_name` SELECT * FROM `tmp`;

DROP TEMPORARY TABLE IF EXISTS `tmp`;
于 2016-12-26T12:21:20.187 に答える