Menggabungkan Rentetan dengan Auto-Incrementing Primary Key dalam MySQL Insert
Apabila memasukkan data ke dalam pangkalan data MySQL, ia boleh berguna untuk menggabungkan rentetan dengan ID kunci utama yang meningkat secara automatik untuk mencipta pengecam unik.
Pertimbangkan jadual pengguna berikut:
CREATE TABLE users ( user_id INT NOT NULL AUTO_INCREMENT, username VARCHAR(255) NOT NULL, PRIMARY KEY (user_id) );
Andaikan anda ingin menetapkan lajur nama pengguna kepada awalan rentetan (cth., 'pengguna') diikuti dengan id_pengguna yang meningkat secara automatik. Walau bagaimanapun, nilai user_id tidak dijana sehingga selepas operasi sisip.
Percubaan untuk mencapai ini dengan satu pernyataan menggunakan pencetus SEBELUM INSERT tidak dapat dilaksanakan kerana nilai user_id belum tersedia. Begitu juga, menggunakan pencetus AFTER INSERT untuk mengemas kini medan nama pengguna adalah tidak dibenarkan.
Penyelesaian 1: Sisip dan Kemas Kini
Satu pendekatan ialah melakukan operasi sisipan terlebih dahulu, kemudian segera laksanakan kenyataan UPDATE untuk menggabungkan rentetan dan user_id. Ini boleh dilakukan dalam PHP seperti berikut:
// Insert user data $stmt = $mysqli->prepare(...); $stmt->bind_param(...); $stmt->execute(); // Get the auto-incremented user ID $user_id = $mysqli->insert_id; // Update username $update_stmt = $mysqli->prepare("UPDATE users SET username = 'user$user_id' WHERE user_id = ?"); $update_stmt->bind_param("i", $user_id); $update_stmt->execute();
Penyelesaian 2: Pertanyaan INSERT Tersuai
Jika user_id bukan nilai penambahan automatik, anda boleh memasukkan nama pengguna yang digabungkan dalam pernyataan INSERT asal. Ini memerlukan pengubahsuaian pertanyaan SQL untuk memasukkan penggabungan:
INSERT INTO users (username, ...) VALUES ('user' || ?, ...);
Dalam pertanyaan ini, gantikan pemegang tempat ? dengan pembolehubah PHP yang mengandungi user_id yang anda tentukan semasa sisipan.
Lajur Dijana (MySQL 5.7 dan Kemudian)
MySQL 5.7 memperkenalkan lajur terjana, yang membolehkan anda membuat lajur berdasarkan ungkapan. Walau bagaimanapun, adalah tidak mungkin untuk mentakrifkan lajur yang dijana yang merujuk kepada lajur peningkatan automatik.
Atas ialah kandungan terperinci Bagaimana untuk Menggabungkan Rentetan dengan Kunci Utama Auto-Incrementing dalam Sisipan MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!