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

Barbara Streisand
Lepaskan: 2024-11-10 03:30:02
asal
1048 orang telah melayarinya

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)
);
Salin selepas log masuk

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();
Salin selepas log masuk

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' || ?, ...);
Salin selepas log masuk

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!

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