たとえば、私は単純なテーブルを持っています:id
主キーとして、そしてfield
。それから私はします:そして
INSERT INTO table(id,field) VALUES (1,'blah')
私はそれをもう一度します。では、どうすればMySQLを次のように返すことができますか?
id
1
競合するキーをSELECTするように機能するようにするには?
たとえば、私は単純なテーブルを持っています:id
主キーとして、そしてfield
。それから私はします:そして
INSERT INTO table(id,field) VALUES (1,'blah')
私はそれをもう一度します。では、どうすればMySQLを次のように返すことができますか?
id
1
競合するキーをSELECTするように機能するようにするには?
コードがなければそれは不可能だと思います.mysqlは一般的な重複キーエラーを返します.
コード付きソリューション:
AUTO_INCREMENT 列を使用していますか?
INSERT IGNORE を使用して行が無視される場合、
AUTO_INCREMENT カウンターはインクリメントされず、LAST_INSERT_ID() は 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 |
+-------+----------+----------+