MySQL menyediakan sejumlah pernyataan yang berguna ketika diperlukan untuk INSERT
baris setelah menentukan apakah baris tersebut sebenarnya baru atau sudah ada
Di bawah ini kami akan memeriksa tiga metode berbeda dan menjelaskan pro dan kontra dari masing-masing secara bergantian sehingga Anda memiliki pemahaman yang kuat tentang cara mengonfigurasi pernyataan Anda sendiri saat memberikan data baru atau yang berpotensi ada untuk
mysql> INSERT INTO books
(id, title, author, year_published)
VALUES
(1, 'Green Eggs and Ham', 'Dr. Seuss', 1960);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
0
Menggunakan INSERT IGNORE
Menggunakan INSERT IGNORE
secara efektif menyebabkan MySQL mengabaikan kesalahan eksekusi saat mencoba melakukan pernyataan INSERT
. Ini berarti bahwa pernyataan INSERT IGNORE
yang berisi nilai duplikat dalam indeks
mysql> INSERT INTO books
(id, title, author, year_published)
VALUES
(1, 'Green Eggs and Ham', 'Dr. Seuss', 1960);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
5 atau bidang
mysql> INSERT INTO books
(id, title, author, year_published)
VALUES
(1, 'Green Eggs and Ham', 'Dr. Seuss', 1960);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
6 tidak menghasilkan kesalahan, melainkan hanya akan mengabaikan perintah
INSERT
tersebut sepenuhnya. Tujuan yang jelas adalah untuk mengeksekusi sejumlah besar pernyataan
INSERT
untuk kombinasi data yang sudah ada di database serta data baru yang masuk ke sistem
Misalnya, tabel
mysql> INSERT INTO books
(id, title, author, year_published)
VALUES
(1, 'Green Eggs and Ham', 'Dr. Seuss', 1960);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
_9 kita mungkin sudah berisi beberapa record
mysql> SELECT * FROM books LIMIT 3;
+----+-------------------------+---------------------+----------------+
| id | title | author | year_published |
+----+-------------------------+---------------------+----------------+
| 1 | In Search of Lost Time | Marcel Proust | 1913 |
| 2 | Ulysses | James Joyce | 1922 |
| 3 | Don Quixote | Miguel de Cervantes | 1605 |
+----+-------------------------+---------------------+----------------+
3 rows in set (0.00 sec)
_
Jika kita memiliki sejumlah besar data baru dan yang sudah ada untuk INSERT
dan sebagian dari data tersebut berisi nilai yang cocok untuk bidang
mysql> INSERT IGNORE INTO books
(id, title, author, year_published)
VALUES
(1, 'Green Eggs and Ham', 'Dr. Seuss', 1960);
Query OK, 0 rows affected (0.00 sec)
1 (yang merupakan
mysql> INSERT INTO books
(id, title, author, year_published)
VALUES
(1, 'Green Eggs and Ham', 'Dr. Seuss', 1960);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
5
mysql> INSERT IGNORE INTO books
(id, title, author, year_published)
VALUES
(1, 'Green Eggs and Ham', 'Dr. Seuss', 1960);
Query OK, 0 rows affected (0.00 sec)
3 dalam tabel), menggunakan
INSERT
dasar akan menghasilkan kesalahan yang diharapkan
mysql> INSERT INTO books
(id, title, author, year_published)
VALUES
(1, 'Green Eggs and Ham', 'Dr. Seuss', 1960);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
Di sisi lain, jika kita menggunakan INSERT IGNORE
, upaya duplikasi diabaikan dan tidak terjadi kesalahan yang dihasilkan
mysql> INSERT IGNORE INTO books
(id, title, author, year_published)
VALUES
(1, 'Green Eggs and Ham', 'Dr. Seuss', 1960);
Query OK, 0 rows affected (0.00 sec)
Menggunakan REPLACE
Jika Anda ingin benar-benar mengganti baris di mana perintah INSERT
akan menghasilkan kesalahan karena duplikat
mysql> INSERT INTO books
(id, title, author, year_published)
VALUES
(1, 'Green Eggs and Ham', 'Dr. Seuss', 1960);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
5 atau
mysql> INSERT INTO books
(id, title, author, year_published)
VALUES
(1, 'Green Eggs and Ham', 'Dr. Seuss', 1960);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
6 nilai seperti yang diuraikan di atas, satu opsi adalah memilih pernyataan
REPLACE
Saat mengeluarkan pernyataan REPLACE
_, ada dua kemungkinan hasil untuk setiap perintah yang dikeluarkan
- Tidak ada baris data yang ditemukan dengan nilai yang cocok dan dengan demikian pernyataan
INSERT
standar dilakukan - Baris data yang cocok ditemukan, menyebabkan baris yang ada dihapus dengan pernyataan
mysql> REPLACE INTO books
(id, title, author, year_published)
VALUES
(1, 'Green Eggs and Ham', 'Dr. Seuss', 1960);
Query OK, 2 rows affected (0.00 sec)
3 standar, kemudian INSERT
normal dilakukan setelahnya
Misalnya, kita dapat menggunakan REPLACE
untuk menukar catatan kita yang ada
mysql> REPLACE INTO books
(id, title, author, year_published)
VALUES
(1, 'Green Eggs and Ham', 'Dr. Seuss', 1960);
Query OK, 2 rows affected (0.00 sec)
6 dari In Search of Lost Time oleh Marcel Proust dengan Green Eggs and Ham oleh Dr. Seuss
mysql> REPLACE INTO books
(id, title, author, year_published)
VALUES
(1, 'Green Eggs and Ham', 'Dr. Seuss', 1960);
Query OK, 2 rows affected (0.00 sec)
Perhatikan bahwa meskipun kita hanya mengubah satu baris, hasilnya menunjukkan bahwa dua baris terpengaruh karena kita sebenarnya
mysql> REPLACE INTO books
(id, title, author, year_published)
VALUES
(1, 'Green Eggs and Ham', 'Dr. Seuss', 1960);
Query OK, 2 rows affected (0.00 sec)
7 baris yang ada lalu
mysql> REPLACE INTO books
(id, title, author, year_published)
VALUES
(1, 'Green Eggs and Ham', 'Dr. Seuss', 1960);
Query OK, 2 rows affected (0.00 sec)
8 baris baru untuk menggantikannya
Informasi lebih lanjut tentang penggunaan REPLACE
dapat ditemukan di dokumentasi resmi
Menggunakan INSERT .. ON DUPLICATE KEY UPDATE
Metode alternatif (dan umumnya disukai) untuk
mysql> SET @id = 1,
@title = 'In Search of Lost Time',
@author = 'Marcel Proust',
@year_published = 1913;
INSERT INTO books
(id, title, author, year_published)
VALUES
(@id, @title, @author, @year_published)
ON DUPLICATE KEY UPDATE
title = @title,
author = @author,
year_published = @year_published;
1 ke dalam baris yang mungkin berisi duplikat
mysql> INSERT INTO books
(id, title, author, year_published)
VALUES
(1, 'Green Eggs and Ham', 'Dr. Seuss', 1960);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
5 atau
mysql> INSERT INTO books
(id, title, author, year_published)
VALUES
(1, 'Green Eggs and Ham', 'Dr. Seuss', 1960);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
6 nilai adalah dengan menggunakan pernyataan dan klausa
INSERT .. ON DUPLICATE KEY UPDATE
Tidak seperti REPLACE
– perintah yang secara inheren merusak karena perintah
mysql> REPLACE INTO books
(id, title, author, year_published)
VALUES
(1, 'Green Eggs and Ham', 'Dr. Seuss', 1960);
Query OK, 2 rows affected (0.00 sec)
3 yang dilakukannya bila perlu – menggunakan
INSERT .. ON DUPLICATE KEY UPDATE
tidak merusak, karena hanya akan mengeluarkan pernyataan
INSERT
atau
mysql> SET @id = 1,
@title = 'In Search of Lost Time',
@author = 'Marcel Proust',
@year_published = 1913;
INSERT INTO books
(id, title, author, year_published)
VALUES
(@id, @title, @author, @year_published)
ON DUPLICATE KEY UPDATE
title = @title,
author = @author,
year_published = @year_published;
9, tetapi tidak pernah
mysql> REPLACE INTO books
(id, title, author, year_published)
VALUES
(1, 'Green Eggs and Ham', 'Dr. Seuss', 1960);
Query OK, 2 rows affected (0.00 sec)
3
Misalnya, kami telah memutuskan ingin mengganti rekaman
mysql> REPLACE INTO books
(id, title, author, year_published)
VALUES
(1, 'Green Eggs and Ham', 'Dr. Seuss', 1960);
Query OK, 2 rows affected (0.00 sec)
6 Telur Hijau dan Ham kami dan mengembalikannya ke rekaman In Search of Lost Time asli sebagai gantinya. Oleh karena itu, kami dapat mengambil pernyataan
INSERT
_ asli kami dan menambahkan klausa
mysql> SELECT * FROM books LIMIT 1;
+----+------------------------+---------------+----------------+
| id | title | author | year_published |
+----+------------------------+---------------+----------------+
| 1 | In Search of Lost Time | Marcel Proust | 1913 |
+----+------------------------+---------------+----------------+
1 row in set (0.00 sec)
_3 baru
mysql> SET @id = 1,
@title = 'In Search of Lost Time',
@author = 'Marcel Proust',
@year_published = 1913;
INSERT INTO books
(id, title, author, year_published)
VALUES
(@id, @title, @author, @year_published)
ON DUPLICATE KEY UPDATE
title = @title,
author = @author,
year_published = @year_published;
Perhatikan bahwa kita menggunakan sintaks
mysql> SET @id = 1,
@title = 'In Search of Lost Time',
@author = 'Marcel Proust',
@year_published = 1913;
INSERT INTO books
(id, title, author, year_published)
VALUES
(@id, @title, @author, @year_published)
ON DUPLICATE KEY UPDATE
title = @title,
author = @author,
year_published = @year_published;
9 normal (namun mengecualikan nama
mysql> SELECT * FROM books LIMIT 1;
+----+------------------------+---------------+----------------+
| id | title | author | year_published |
+----+------------------------+---------------+----------------+
| 1 | In Search of Lost Time | Marcel Proust | 1913 |
+----+------------------------+---------------+----------------+
1 row in set (0.00 sec)
5 yang tidak perlu dan kata kunci
mysql> SELECT * FROM books LIMIT 1;
+----+------------------------+---------------+----------------+
| id | title | author | year_published |
+----+------------------------+---------------+----------------+
| 1 | In Search of Lost Time | Marcel Proust | 1913 |
+----+------------------------+---------------+----------------+
1 row in set (0.00 sec)
6), dan hanya menetapkan nilai
mysql> SELECT * FROM books LIMIT 1;
+----+------------------------+---------------+----------------+
| id | title | author | year_published |
+----+------------------------+---------------+----------------+
| 1 | In Search of Lost Time | Marcel Proust | 1913 |
+----+------------------------+---------------+----------------+
1 row in set (0.00 sec)
7. Selain itu, meskipun metode
mysql> SELECT * FROM books LIMIT 1;
+----+------------------------+---------------+----------------+
| id | title | author | year_published |
+----+------------------------+---------------+----------------+
| 1 | In Search of Lost Time | Marcel Proust | 1913 |
+----+------------------------+---------------+----------------+
1 row in set (0.00 sec)
_3 tidak perlu berfungsi dengan baik, kami juga memilih untuk menggunakan
mysql> SELECT * FROM books LIMIT 1;
+----+------------------------+---------------+----------------+
| id | title | author | year_published |
+----+------------------------+---------------+----------------+
| 1 | In Search of Lost Time | Marcel Proust | 1913 |
+----+------------------------+---------------+----------------+
1 row in set (0.00 sec)
9 sehingga kami tidak perlu menentukan nilai sebenarnya yang ingin kami
INSERT
atau
mysql> SET @id = 1,
@title = 'In Search of Lost Time',
@author = 'Marcel Proust',
@year_published = 1913;
INSERT INTO books
(id, title, author, year_published)
VALUES
(@id, @title, @author, @year_published)
ON DUPLICATE KEY UPDATE
title = @title,
author = @author,
year_published = @year_published;
9 lebih dari sekali
Bagaimana cara memasukkan 1000 catatan sekaligus di MySQL?
MySQL Sisipkan Beberapa Baris .
Pertama, tentukan nama tabel yang ingin disisipkan setelah kata kunci INSERT INTO
Kedua, tentukan daftar kolom yang dipisahkan koma di dalam tanda kurung setelah nama tabel
Ketiga, tentukan daftar data baris yang dipisahkan koma dalam klausa VALUES. Setiap elemen dari daftar mewakili satu baris
Bagaimana cara memasukkan data ke database MySQL di Java?
1 Jawaban .
Buat pernyataan SQL INSERT, menggunakan sintaks Java PreparedStatement. .
Setel bidang pada objek Java PreparedStatement kami. .
Jalankan Java PreparedStatement. .
Tutup koneksi database Java MYSQL kami. .
Tangkap pengecualian SQL apa pun yang mungkin muncul selama proses
Bagaimana cara memasukkan data gumpalan di MySQL menggunakan Java?
Menyimpan blob ke database .
Langkah 1. Hubungkan ke basis data. Anda dapat terhubung ke database menggunakan metode getConnection() dari kelas DriverManager
Langkah 2. Buat pernyataan Disiapkan. .
Langkah 3. Tetapkan nilai ke placeholder. .
Langkah 4. Jalankan pernyataan
Bagaimana cara memasukkan banyak catatan di MySQL menggunakan Java?
Langkah-langkah untuk memproses penyisipan pernyataan Batch SQL dengan JDBC .
Membangun koneksi dengan database MySQL
Buat pernyataan menggunakan objek koneksi
Ulangi objek Pengguna dan sisipkan secara dinamis sebagai kumpulan
Menggunakan pernyataan try-with-resources untuk menutup resource JDBC secara otomatis