0

編集:

ID を新しく作成された自動インクリメント ID に更新したいのですが、行の残りの列は変更されません。

オリジナル:

私はmysqlに次のようなテーブルを持っています:

id    userId    productId

すべての列は UBIGINT であり、id は AUTO INCREMENT に設定された PRIMARY KEY です。

だから今、同じテーブルに行を再挿入したいのですが、新しく作成された ID を使用します。そして、古い行は削除する必要があります!

注文にIDを使用しています(高い==新しい)。

他のオプションはタイムスタンプ列を追加してこの列を更新するため、これは可能ですが、タイムスタンプは使用しません。だから、これは何としてでも防ぎたい。

4

3 に答える 3

2

次のテーブルがあるとしましょう

create table so (
    `id` int(11) not null auto_increment,
    `num` varchar(20) not null, primary key (`id`),
    unique (`num`)
 ) engine=InnoDB default charset=utf8;

次に、次のクエリを使用して新しい行を挿入できます

insert into so (num) values ("hi") on duplicate key update id=last_insert_id()+1;

すでに「hi」行がある場合、このクエリは、最後に挿入された行の次に等しい ID になるように更新します。

あなたの場合

insert into table (userId, productId) values (someUserId, someProductId)
on duplicate key update id=last_insert_id()+1;

また、replaceMySQL 拡張機能もあります。

replace into table (userId, productId) values (someUserId, someProductId);

テーブルにまたは制約があるon duplicate key update場合にのみ機能します。とは異なり、最初に既存の行を削除してから新しい行を挿入しますが、更新するだけです。uniqueprimary keyon duplicate key update replaceon duplicate key update

于 2013-07-17T17:51:59.163 に答える
0

はい、可能です。古いレコードを削除して別のレコードを追加するだけです。ただし、auto_increment は常に増加することを知っておく必要があります。

于 2013-07-17T17:51:32.903 に答える