Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menggabungkan Rentetan dengan Kunci Utama Auto-Incrementing dalam Sisipan MySQL?

Bagaimana untuk Menggabungkan Rentetan dengan Kunci Utama Auto-Incrementing dalam Sisipan MySQL?

Barbara Streisand
Barbara Streisandasal
2024-11-10 03:30:021152semak imbas

How to Concatenate a String with an Auto-Incrementing Primary Key in MySQL Insert?

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!

Kenyataan:
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