0

たとえば、私は単純なテーブルを持っています:id主キーとして、そしてfield。それから私はします:そして INSERT INTO table(id,field) VALUES (1,'blah') 私はそれをもう一度します。では、どうすればMySQLを次のように返すことができますか?

id

1

競合するキーをSELECTするように機能するようにするには?

4

2 に答える 2

0

コードがなければそれは不可能だと思います.mysqlは一般的な重複キーエラーを返します.

コード付きソリューション:

AUTO_INCREMENT 列を使用していますか?

INSERT IGNORE を使用して行が無視される場合、

AUTO_INCREMENT カウンターはインクリメントされず、LAST_INSERT_ID() は 0 を返します。

これは、行が挿入されなかったことを反映しています。

それで:

  • 挿入 無視
  • LAST_INSERT_ID() の場合、完了 (新しい行が挿入されました)
  • そうでなければあなたのデータは重複しています

last_insert_id() ドキュメント >

挿入 ドキュメントを無視 >

于 2013-01-08T11:57:11.150 に答える
0

あなたは次のことを考えるかもしれません...

    DROP TABLE IF EXISTS my_table;

    CREATE TABLE my_table(my_id INT NOT NULL PRIMARY KEY,my_field VARCHAR(12) NOT NULL,conflict TINYINT NOT NULL DEFAULT 0);

    INSERT INTO my_table (my_id,my_field) VALUES (1,'blah') ON DUPLICATE KEY UPDATE conflict = 1;

    SELECT * FROM my_table WHERE conflict = 1;
    Empty set (0.00 sec)

    INSERT INTO my_table (my_id,my_field) VALUES (1,'blah') ON DUPLICATE KEY UPDATE conflict = 1;
    Query OK, 2 rows affected (0.07 sec)

    SELECT * FROM my_table WHERE conflict = 1;
    +-------+----------+----------+
    | my_id | my_field | conflict |
    +-------+----------+----------+
    |     1 | blah     |        1 |
    +-------+----------+----------+
于 2013-01-08T11:59:02.137 に答える