Điều gì sẽ xảy ra, nếu bạn muốn tạo nhiều bản ghi như vậy (để đăng ký 10 người dùng, không chỉ một)? Tôi tìm giải pháp sau (chỉ 5 truy vấn):
Bước I: Tạo bảng tạm thời để lưu trữ dữ liệu mới.
CREATE TEMPORARY TABLE tmp (id bigint(20) NOT NULL, ...)...;
Tiếp theo, điền vào bảng này với các giá trị.
INSERT INTO tmp (username, password, bio, homepage) VALUES $ALL_VAL
Tại đây, thay vì $ALL_VAL
bạn đặt danh sách các giá trị: ('test1', 'test1', 'bio1', 'home1'), ..., ('testn', 'testn', 'bion', 'homen')
Bước II: Gửi dữ liệu đến bảng 'người dùng'.
INSERT IGNORE INTO users (username, password)
SELECT username, password FROM tmp;
Tại đây, "IGNORE" có thể được sử dụng, nếu bạn cho phép một số người dùng đã ở bên trong. Tùy chọn bạn có thể sử dụng CẬP NHẬT tương tự như bước III, trước bước này, để tìm người dùng đã ở bên trong (và đánh dấu họ trong bảng tmp). Ở đây chúng tôi hỗ trợ, tên người dùng đó được khai báo như PRIMARY
trong bảng người dùng.
Bước III: Áp dụng cập nhật để đọc tất cả id người dùng từ bảng người dùng vào bảng tmp. ĐÂY LÀ BƯỚC ESSENTIAL.
UPDATE tmp JOIN users ON tmp.username=users.username SET tmp.id=users.id
Bước IV: Tạo bảng khác, sử dụng id đọc cho người dùng
INSERT INTO profiles (userid, bio, homepage)
SELECT id, bio, homepage FROM tmp