Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Memasukkan atau Kemas Kini Rekod dengan Cekap dalam MySQL Menggunakan JIKA WUJUD KEMASKINI INSERT LAIN KE DALAM?

Bagaimana untuk Memasukkan atau Kemas Kini Rekod dengan Cekap dalam MySQL Menggunakan JIKA WUJUD KEMASKINI INSERT LAIN KE DALAM?

Linda Hamilton
Lepaskan: 2025-01-08 15:51:41
asal
424 orang telah melayarinya

How to Efficiently Insert or Update Records in MySQL Using IF EXISTS UPDATE ELSE INSERT INTO?

MySQL memasukkan atau mengemas kini rekod dengan cekap: JIKA ADA KEMASKINI KEMASKINI LAIN MASUKKAN KE DALAM

SQL menyediakan beberapa kaedah untuk memasukkan atau mengemas kini rekod dalam jadual pangkalan data berdasarkan kewujudan kunci unik. Panduan ini menerangkan sebab apa yang anda cuba tidak berfungsi dan menyediakan dua penyelesaian yang diuji menggunakan pernyataan INSERT ... ON DUPLICATE KEY UPDATE MySQL.

Mengapa percubaan anda gagal

  • Tiada kekangan unik: Pertanyaan anda cuba menggunakan ON DUPLICATE KEY UPDATE, tetapi lajur subs_email anda tiada kekangan unik, menyebabkan pertanyaan gagal.
  • Ralat sintaks: Blok IF EXISTS dan BEGIN/END yang anda cuba gunakan bukan sintaks SQL yang sah untuk MySQL.

Penyelesaian 1: Cipta kekangan unik dan gunakan INSERT ... PADA KEMASKINI KUNCI DUA

  1. Pastikan terdapat kekangan unik pada lajur subs_email:
<code class="language-sql">ALTER TABLE subs ADD UNIQUE (subs_email);</code>
Salin selepas log masuk
  1. Gunakan pertanyaan berikut:
<code class="language-sql">INSERT INTO subs (subs_name, subs_email, subs_birthday)
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE
  subs_name     = VALUES(subs_name),
  subs_birthday = VALUES(subs_birthday);</code>
Salin selepas log masuk

Penyelesaian 2: Pernyataan yang disediakan berparameter menggunakan KEMASKINI KUNCI PENDUA

  1. Sediakan dan laksanakan pernyataan menggunakan ruang letak parameter:
<code class="language-java">String sql = "INSERT INTO subs (subs_name, subs_email, subs_birthday) VALUES (?, ?, ?)"
                    + " ON DUPLICATE KEY UPDATE subs_name = ?, subs_birthday = ?";

PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, name);
preparedStatement.setString(2, email);
preparedStatement.setString(3, birthday);
preparedStatement.setString(4, name); // 重复键更新的第二个参数
preparedStatement.setString(5, birthday); // 重复键更新的第三个参数
preparedStatement.executeUpdate();</code>
Salin selepas log masuk

Ingat untuk menggunakan ruang letak parameter untuk mengelakkan serangan suntikan SQL.

Dengan menggunakan penyelesaian ini, anda boleh memasukkan atau mengemas kini rekod dengan cekap dalam jadual pangkalan data berdasarkan keunikan subs_email lajur.

Atas ialah kandungan terperinci Bagaimana untuk Memasukkan atau Kemas Kini Rekod dengan Cekap dalam MySQL Menggunakan JIKA WUJUD KEMASKINI INSERT LAIN KE DALAM?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan