Câu lệnh INSERT INTO VALUES()

Chúng ta đã tìm ra cách tạo bảng, bây giờ chúng ta hãy xem chi tiết cách thêm dữ liệu vào bảng bằng truy vấn SQL.

Trên thực tế, nó rất đơn giản để làm điều này, nhưng có một số sắc thái. Tùy chọn đơn giản nhất để chèn dữ liệu vào bảng yêu cầu chỉ định hai điều:

  • tên cột
  • giá trị cột (dữ liệu)

Tên cột phải được chỉ định, vì rất thường các cột có giá trị mặc định không được chỉ định khi chèn dữ liệu. Và thông thường mỗi bảng đều có ít nhất một cột như vậy, row id chẳng hạn.

Dạng chung của truy vấn để chèn dữ liệu vào bảng trông giống như sau:

INSERT INTO table (column1, column2, column3) VALUES
    (value1, value2, value3),
    (value1, value2, value3),
    (value1, value2, value3);

Ví dụ: nếu bạn muốn chèn một bản ghi mới vào bảng người dùng, truy vấn sẽ như sau:

INSERT INTO user (name, level, created_time) VALUES
	('Rabinovich', 5, ‘2022-06-06’);

CHÈN VÀO câu lệnh CHỌN

Một tình huống phổ biến khác để chèn dữ liệu vào một bảng là lấy dữ liệu đó từ một bảng khác, lược đồ hoặc thậm chí là một DBMS.

Để làm điều này, có một định dạng truy vấn INSERT INTO khác, trong đó, thay vì phần GIÁ TRỊ, bạn có thể chỉ định một truy vấn để chọn dữ liệu.

Hình thức chung của một yêu cầu như vậy là:

INSERT INTO table (column1, column2, column3)
SELECT-request;

Hãy viết một truy vấn sẽ thêm tất cả người dùng từ bảng employee vào bảng user:

INSERT INTO user (name, created_time)
   SELECT employee.name, employee.join_date
   FROM employee;

Chúng tôi có nhiều dữ liệu khác nhau trong bảng nhân viên, nhưng chúng tôi chỉ chọn hai trường từ chúng - tên và thời gian đến công ty.

Ngoài ra, bảng người dùng yêu cầu bạn chỉ định cấp độ người dùng - level. Nhân viên không có cấp độ trong bảng nhân viên, vì vậy chúng tôi sẽ sử dụng thực tế là bảng người dùng có giá trị mặc định cho trường cấp độ. Chúng tôi chỉ không chỉ định cấp độ và SQL sẽ đặt giá trị mặc định.

Giả sử chúng tôi không hài lòng với giá trị mặc định và chúng tôi muốn cấp độ là 99 và thay thế user.created_time bằng ngày hôm nay, thì chúng tôi có thể viết như sau:

INSERT INTO user (name, level, created_time)
   SELECT employee.name, 99, CURDATE()
   FROM employee;

Có rất nhiều điều có thể được thực hiện, nhưng tôi nghĩ rằng điều này sẽ đủ cho bây giờ. Bạn có thể đọc thêm trên trang MySQL chính thức.