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
ON DUPLICATE KEY UPDATE
, tetapi lajur subs_email
anda tiada kekangan unik, menyebabkan pertanyaan gagal. 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
subs_email
: <code class="language-sql">ALTER TABLE subs ADD UNIQUE (subs_email);</code>
<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>
Penyelesaian 2: Pernyataan yang disediakan berparameter menggunakan KEMASKINI KUNCI PENDUA
<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>
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!