0

次のようなテーブルがあります。

| ID | int PRIMARY  
| Name | varchar  
| timestamp | timestamp

IDを知ってこれを行うにはどうすればよいですか?

私が何を望んでいるのかをよりよく示すために、2 つのクエリを使用して理解を深める例を次に示します。

まず、ID が存在するかどうかを確認するために SELECT クエリを実行します。
存在しない場合 (最も一般的)、入力として与えられた ID を無視して新しい行を作成し、ID に MySQL の AUTO_INCREMENT を使用します。

これをアーカイブする方法はありますか?

注:外部キーがここでどのように機能するかによります。INSERT INTO の代わりに REPLACE を使用することは答えではありません。

注 2: AUTO_INCREMENT が存在しない場合は強制的に使用したいので、一見、INSERT IGNORE INTO も答えではないようです。私が何かを見逃していない限り... それが私が尋ねている理由でもあります.

4

1 に答える 1

0

あなたがやろうとしているのは、重複キーの更新のようです

INSERT INTO yourTable (
    id,
    name,
    timestamp
) VALUES (
    5,
    'something',
    NOW()
)
ON DUPLICATE KEY UPDATE
    name = VALUES(name),
    timestamp = VALUES(timestamp);

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

INSERT () VALUES ()簡単です。 ON DUPLICATE KEY UPDATEUNIQUE / PRIMARY キーが競合する場合、代わりにその行内のいくつかの値を更新する必要があることを伝えます。このfields = VALUES(fields)構文は、競合する行内のこれらのフィールドを、INSERT 内で指定された値で更新するように指示します。

2 番目のアプローチは、ストアド プロシージャを使用してテーブルへの INSERT を処理することです。これは、前提条件の SELECT を実行します。同じクエリ内のテーブルで SELECT と INSERT の両方を行うことはできないためです。

于 2013-03-28T19:05:01.900 に答える