mysql> Select Last_Insert_Id[]; +------------------+ | Last_Insert_Id[] | +------------------+ | 3 | +------------------+ 1 row in set [0.00 sec]7
mysql> Select Last_Insert_Id[]; +------------------+ | Last_Insert_Id[] | +------------------+ | 3 | +------------------+ 1 row in set [0.00 sec]8
mysql> Select Last_Insert_Id[]; +------------------+ | Last_Insert_Id[] | +------------------+ | 3 | +------------------+ 1 row in set [0.00 sec]9
0Code language: SQL [Structured Query Language] [sql]
INSERT INTO table_name [column_list] VALUES [value_list_1], [value_list_2], ... [value_list_n];
1Code language: SQL [Structured Query Language] [sql]
INSERT INTO table_name [column_list] VALUES [value_list_1], [value_list_2], ... [value_list_n];
2Code language: SQL [Structured Query Language] [sql]
INSERT INTO table_name [column_list] VALUES [value_list_1], [value_list_2], ... [value_list_n];
3Code language: SQL [Structured Query Language] [sql]
INSERT INTO table_name [column_list] VALUES [value_list_1], [value_list_2], ... [value_list_n];
4Code language: SQL [Structured Query Language] [sql]
INSERT INTO table_name [column_list] VALUES [value_list_1], [value_list_2], ... [value_list_n];
Như chúng ta đã biết, hàm LAST_INSERT_ID[] của MySQL trả về số thứ tự được tạo mới nhất nhưng trong trường hợp chèn nhiều hàng, hàm này sẽ trả về số thứ tự được tạo bởi hàng được chèn đầu tiên
Ví dụ
mysql> Insert into Student[Name] values['Ram'],['Mohan'],['Aryan']; Query OK, 3 rows affected [0.03 sec] Records: 3 Duplicates: 0 Warnings: 0
Truy vấn trên chèn ba giá trị vào bảng Sinh viên với sự trợ giúp của Truy vấn chèn nhiều hàng. Có thể kiểm tra giá trị của Cột 'Id' với sự trợ giúp của truy vấn sau -
mysql> Select * from Student; +----+-------+ | Id | Name | +----+-------+ | 1 | Raman | | 2 | Rahul | | 3 | Ram | | 4 | Mohan | | 5 | Aryan | +----+-------+ 5 rows in set [0.00 sec]
Điều đó có nghĩa là Last_Insert_Id[] phải trả về giá trị đầu ra là 5 nhưng như chúng ta có thể thấy nó trả về giá trị 3 như sau:
mysql> Select Last_Insert_Id[]; +------------------+ | Last_Insert_Id[] | +------------------+ | 3 | +------------------+ 1 row in set [0.00 sec]
Nó trả về giá trị 3 vì 3 là giá trị của hàng được chèn đầu tiên với truy vấn chèn nhiều hàng phía trên
Có phải chúng ta đang nói về các cột auto_increment ở đây cho số ID không? . Nếu bạn thêm nhiều hàng cùng một lúc như bạn đang làm, nó sẽ cung cấp số ID của hàng đầu tiên trong số những hàng đã được thêm vào. Biết rằng các ID tăng lên một lần mỗi lần, sau đó bạn có thể tìm ra ID của tất cả các hàng
Ví dụ: nếu bạn chèn 4 hàng và last_insert_id[] cho 5, thì bạn biết ID là 5, 6, 7, 8
Điều quan trọng cần lưu ý là last_insert_id[] cung cấp giá trị auto_increment cuối cùng trên kết nối hiện tại , vì vậy nhiều kết nối thực hiện thao tác chèn đồng thời sẽ không ảnh hưởng . Tôi tin rằng nó được thiết kế có mục đích chính xác cho tình huống này.
Mặc dù tôi không chắc chắn, nhưng tôi cũng cho rằng khi bạn thực hiện một câu lệnh INSERT để thêm nhiều hàng, nó được thực hiện như một thao tác nguyên tử. Vì vậy, nếu bạn có hai lần chèn diễn ra trên hai kết nối khác nhau, bạn sẽ không bị xen kẽ – một kết nối sẽ thêm tất cả các hàng của nó, sau đó là tất cả các hàng của nó, chứ không phải một kết nối thêm một số hàng của nó, sau đó thêm một số hàng khác. . Tuy nhiên, nếu bạn thực hiện chúng dưới dạng các câu lệnh INSERT riêng biệt, thì chắc chắn bạn có thể nhận được sự xen kẽ như thế
Tóm lược. trong hướng dẫn này, bạn sẽ học cách sử dụng một câu lệnh MySQL
5 để chèn nhiều hàng vào một bảngCode language: SQL [Structured Query Language] [sql]
INSERT INTO table_name [column_list] VALUES [value_list_1], [value_list_2], ... [value_list_n];
Câu lệnh nhiều hàng của MySQL INSERT INTO table_name [column_list]
VALUES
[value_list_1],
[value_list_2],
...
[value_list_n];
Code language: SQL [Structured Query Language] [sql]
5
INSERT INTO table_name [column_list]
VALUES
[value_list_1],
[value_list_2],
...
[value_list_n];
Để chèn nhiều hàng vào một bảng, bạn sử dụng mẫu câu lệnh
5 sauCode language: SQL [Structured Query Language] [sql]
INSERT INTO table_name [column_list] VALUES [value_list_1], [value_list_2], ... [value_list_n];
Code language: SQL [Structured Query Language] [sql]
INSERT INTO table_name [column_list] VALUES [value_list_1], [value_list_2], ... [value_list_n];
Trong cú pháp này
- Đầu tiên, chỉ định tên của bảng mà bạn muốn chèn sau từ khóa
0
Code language: SQL [Structured Query Language] [sql]SHOW VARIABLES LIKE 'max_allowed_packet';
- Thứ hai, chỉ định danh sách cột được phân tách bằng dấu phẩy bên trong dấu ngoặc đơn sau tên bảng
- Thứ ba, chỉ định danh sách dữ liệu hàng được phân tách bằng dấu phẩy trong mệnh đề
1. Mỗi phần tử của danh sách đại diện cho một hàng. Số lượng giá trị trong mỗi phần tử phải giống với số lượng cột trongSHOW VARIABLES LIKE 'max_allowed_packet';
2
Code language: SQL [Structured Query Language] [sql]SHOW VARIABLES LIKE 'max_allowed_packet';
MySQL INSERT INTO table_name [column_list]
VALUES
[value_list_1],
[value_list_2],
...
[value_list_n];
Code language: SQL [Structured Query Language] [sql]
5 giới hạn nhiều hàng
INSERT INTO table_name [column_list]
VALUES
[value_list_1],
[value_list_2],
...
[value_list_n];
Về lý thuyết, bạn có thể chèn bất kỳ số lượng hàng nào bằng cách sử dụng một câu lệnh
5. Tuy nhiên, khi máy chủ MySQL nhận được câu lệnhCode language: SQL [Structured Query Language] [sql]
INSERT INTO table_name [column_list] VALUES [value_list_1], [value_list_2], ... [value_list_n];
5 có kích thước lớn hơnCode language: SQL [Structured Query Language] [sql]
INSERT INTO table_name [column_list] VALUES [value_list_1], [value_list_2], ... [value_list_n];
6, nó sẽ đưa ra lỗi gói quá lớn và chấm dứt kết nốiCode language: SQL [Structured Query Language] [sql]
SHOW VARIABLES LIKE 'max_allowed_packet';
Câu lệnh này hiển thị giá trị hiện tại của biến
6Code language: SQL [Structured Query Language] [sql]
SHOW VARIABLES LIKE 'max_allowed_packet';
Code language: SQL [Structured Query Language] [sql]
SHOW VARIABLES LIKE 'max_allowed_packet';
Đây là đầu ra trên máy chủ cơ sở dữ liệu MySQL của chúng tôi. Lưu ý rằng giá trị trong máy chủ của bạn có thể khác
Số là cột
8 là số byteCode language: SQL [Structured Query Language] [sql]
SHOW VARIABLES LIKE 'max_allowed_packet';
Để đặt giá trị mới cho biến
6, bạn sử dụng câu lệnh sauCode language: SQL [Structured Query Language] [sql]
SHOW VARIABLES LIKE 'max_allowed_packet';
mysql> Select * from Student; +----+-------+ | Id | Name | +----+-------+ | 1 | Raman | | 2 | Rahul | | 3 | Ram | | 4 | Mohan | | 5 | Aryan | +----+-------+ 5 rows in set [0.00 sec]2
trong đó
mysql> Select * from Student; +----+-------+ | Id | Name | +----+-------+ | 1 | Raman | | 2 | Rahul | | 3 | Ram | | 4 | Mohan | | 5 | Aryan | +----+-------+ 5 rows in set [0.00 sec]20 là một số nguyên đại diện cho số kích thước gói tối đa được phép tính bằng byte
Lưu ý rằng
6 không có ảnh hưởng đến câu lệnhCode language: SQL [Structured Query Language] [sql]
SHOW VARIABLES LIKE 'max_allowed_packet';
mysql> Select * from Student; +----+-------+ | Id | Name | +----+-------+ | 1 | Raman | | 2 | Rahul | | 3 | Ram | | 4 | Mohan | | 5 | Aryan | +----+-------+ 5 rows in set [0.00 sec]22. Câu lệnh
mysql> Select * from Student; +----+-------+ | Id | Name | +----+-------+ | 1 | Raman | | 2 | Rahul | | 3 | Ram | | 4 | Mohan | | 5 | Aryan | +----+-------+ 5 rows in set [0.00 sec]23 có thể chèn bao nhiêu hàng tùy thích
MySQL INSERT INTO table_name [column_list]
VALUES
[value_list_1],
[value_list_2],
...
[value_list_n];
Code language: SQL [Structured Query Language] [sql]
5 ví dụ nhiều hàng
INSERT INTO table_name [column_list]
VALUES
[value_list_1],
[value_list_2],
...
[value_list_n];
Hãy lấy một ví dụ về việc sử dụng câu lệnh nhiều hàng
5Code language: SQL [Structured Query Language] [sql]
INSERT INTO table_name [column_list] VALUES [value_list_1], [value_list_2], ... [value_list_n];
Đầu tiên, tạo một bảng mới có tên là
mysql> Select * from Student; +----+-------+ | Id | Name | +----+-------+ | 1 | Raman | | 2 | Rahul | | 3 | Ram | | 4 | Mohan | | 5 | Aryan | +----+-------+ 5 rows in set [0.00 sec]26 để trình diễn
mysql> Select * from Student; +----+-------+ | Id | Name | +----+-------+ | 1 | Raman | | 2 | Rahul | | 3 | Ram | | 4 | Mohan | | 5 | Aryan | +----+-------+ 5 rows in set [0.00 sec]8
Thứ hai, sử dụng câu lệnh nhiều hàng
5 để chèn hai hàng vào bảngCode language: SQL [Structured Query Language] [sql]
INSERT INTO table_name [column_list] VALUES [value_list_1], [value_list_2], ... [value_list_n];
mysql> Select * from Student; +----+-------+ | Id | Name | +----+-------+ | 1 | Raman | | 2 | Rahul | | 3 | Ram | | 4 | Mohan | | 5 | Aryan | +----+-------+ 5 rows in set [0.00 sec]26
mysql> Select Last_Insert_Id[]; +------------------+ | Last_Insert_Id[] | +------------------+ | 3 | +------------------+ 1 row in set [0.00 sec]0
MySQL đã đưa ra thông báo sau
mysql> Select Last_Insert_Id[]; +------------------+ | Last_Insert_Id[] | +------------------+ | 3 | +------------------+ 1 row in set [0.00 sec]1
Điều đó có nghĩa là hai hàng đã được chèn vào bảng
mysql> Select * from Student; +----+-------+ | Id | Name | +----+-------+ | 1 | Raman | | 2 | Rahul | | 3 | Ram | | 4 | Mohan | | 5 | Aryan | +----+-------+ 5 rows in set [0.00 sec]26 thành công
Lưu ý rằng khi bạn chèn nhiều hàng và sử dụng hàm
mysql> Select * from Student; +----+-------+ | Id | Name | +----+-------+ | 1 | Raman | | 2 | Rahul | | 3 | Ram | | 4 | Mohan | | 5 | Aryan | +----+-------+ 5 rows in set [0.00 sec]80 để lấy id được chèn cuối cùng của cột
mysql> Select * from Student; +----+-------+ | Id | Name | +----+-------+ | 1 | Raman | | 2 | Rahul | | 3 | Ram | | 4 | Mohan | | 5 | Aryan | +----+-------+ 5 rows in set [0.00 sec]81, bạn sẽ chỉ nhận được id của hàng được chèn đầu tiên, không phải id của hàng được chèn cuối cùng
Thứ ba, sử dụng câu lệnh
mysql> Select * from Student; +----+-------+ | Id | Name | +----+-------+ | 1 | Raman | | 2 | Rahul | | 3 | Ram | | 4 | Mohan | | 5 | Aryan | +----+-------+ 5 rows in set [0.00 sec]82 sau để xác minh các phần chèn
mysql> Select Last_Insert_Id[]; +------------------+ | Last_Insert_Id[] | +------------------+ | 3 | +------------------+ 1 row in set [0.00 sec]6
Hình ảnh này cho thấy đầu ra
Trong hướng dẫn này, bạn đã học cách sử dụng câu lệnh MySQL
5 để chèn nhiều hàng vào một bảngCode language: SQL [Structured Query Language] [sql]
INSERT INTO table_name [column_list] VALUES [value_list_1], [value_list_2], ... [value_list_n];