Câu lệnh INSERT trong MySQL được sử dụng để thêm dữ liệu vào một bảng. Trong hướng dẫn này, chúng ta sẽ tìm hiểu chi tiết về cách sử dụng câu lệnh INSERT, từ những ví dụ cơ bản cho đến các trường hợp phức tạp hơn.

1. Cấu trúc cơ bản của câu lệnh INSERT

Câu lệnh INSERT cơ bản có cú pháp như sau:

table_name

Câu lệnh trên sẽ chèn một dòng dữ liệu vào bảng users với id là 1, name là 'John Doe', và email là '[email protected]'.

2. Chèn dữ liệu không cần chỉ định cột

Nếu bạn chèn giá trị vào tất cả các cột trong bảng và theo đúng thứ tự, bạn có thể bỏ qua phần danh sách cột. Cú pháp sẽ như sau:

id

Ví dụ:

users

Trong trường hợp này, giá trị của cột created_at sẽ được tự động thiết lập là thời gian hiện tại.

5. Sử dụng INSERT ... SELECT

Ngoài việc chèn dữ liệu từ một câu lệnh VALUES, MySQL còn cho phép chèn dữ liệu từ kết quả của một câu truy vấn khác. Cú pháp như sau:

old_users

Câu lệnh trên sẽ chèn tất cả người dùng từ bảng old_users có email kết thúc bằng @example.com vào bảng users.

6. Sử dụng ON DUPLICATE KEY UPDATE

Trong một số trường hợp, bạn muốn chèn dữ liệu nhưng nếu dòng dữ liệu đó đã tồn tại (dựa trên khóa chính hoặc khóa duy nhất), bạn có thể cập nhật giá trị của dòng đó thay vì chèn mới. Cú pháp sử dụng ON DUPLICATE KEY UPDATE như sau:

users

Nếu email '[email protected]' đã tồn tại, câu lệnh trên sẽ cập nhật tên của người dùng thành 'Eve White'.

7. Xử lý lỗi với IGNORE

Khi thực hiện câu lệnh INSERT, nếu có lỗi xảy ra (ví dụ vi phạm khóa chính hoặc khóa duy nhất), MySQL sẽ trả về lỗi và không thực hiện chèn dữ liệu. Tuy nhiên, bạn có thể sử dụng tùy chọn IGNORE để bỏ qua các lỗi này và tiếp tục chèn các dòng khác.

Ví dụ:

id

Kết quả là NULL sẽ được chèn vào cột department của bản ghi này.

2. Chèn với các giá trị mặc định (DEFAULT)

Trong MySQL, bạn có thể sử dụng từ khóa DEFAULT để chèn các giá trị mặc định vào một cột. Điều này đặc biệt hữu ích khi bảng của bạn có các cột đã được định nghĩa với giá trị mặc định.

Ví dụ:

Giả sử bạn có bảng products với các cột id, name, price, và stock (trong đó stock có giá trị mặc định là 100). Bạn có thể sử dụng từ khóa DEFAULT để chèn dữ liệu:

DEFAULT

Hàm LOAD_FILE() trong MySQL sẽ đọc tệp từ hệ thống và lưu trữ nó vào cột kiểu BLOB.

4. Chèn với điều kiện WHERE (Kết hợp với SELECT)

Trong các trường hợp phức tạp, bạn có thể kết hợp câu lệnh INSERT với SELECT và điều kiện WHERE để lọc dữ liệu trước khi chèn vào bảng đích.

Ví dụ:

Giả sử bạn có bảng old_users và muốn chỉ chèn những người dùng từ old_users có email thuộc miền example.com vào bảng users:

@example.com

MySQL sẽ tự động chèn giá trị cho cột order_id.

6. Chèn từ khóa ngoại (Foreign Key)

Khi làm việc với các bảng có ràng buộc khóa ngoại, bạn phải đảm bảo rằng dữ liệu được chèn tương ứng với các khóa chính từ bảng cha.

Ví dụ:

Giả sử bạn có bảng orders với cột customer_id là khóa ngoại từ bảng customers. Để chèn dữ liệu vào bảng orders, customer_id phải tồn tại trong bảng customers:

customer_id = 1

Câu lệnh trên sẽ cập nhật số lượng sản phẩm Laptop nếu product_id = 101 đã tồn tại, bằng cách cộng thêm 50 vào giá trị hiện tại.

8. Chèn với INSERT IGNORE

Khi bạn không muốn câu lệnh INSERT trả về lỗi khi vi phạm ràng buộc (ví dụ khóa chính hoặc khóa duy nhất), bạn có thể sử dụng INSERT IGNORE.

Ví dụ:

Giả sử bảng users có cột email là duy nhất, bạn có thể sử dụng INSERT IGNORE để bỏ qua các bản ghi đã tồn tại:

email

Câu lệnh trên sẽ chèn dữ liệu từ bảng productscategories vào bảng product_summary bằng cách kết hợp hai bảng dựa trên category_id.

10. Sử dụng INSERT DELAYED

MySQL hỗ trợ từ khóa DELAYED để chèn dữ liệu vào bảng nhưng không làm chậm quá trình xử lý của các truy vấn khác. DELAYED chèn dữ liệu vào hàng đợi và thực hiện chèn sau đó.

Ví dụ:

log_table

Hàm LAST_INSERT_ID() sẽ trả về order_id cuối cùng được chèn tự động.

12. Sử dụng INSERT INTO ... SET

Một cách khác để chèn dữ liệu vào bảng là sử dụng từ khóa SET, đặc biệt khi bạn muốn chỉ định giá trị cho các cột một cách rõ ràng hơn:

Ví dụ:

INSERT INTO users
SET id = 10, name = 'George', email = '[email protected]';

Cách này thường được sử dụng khi bạn muốn chèn từng cặp cột = giá trị một cách dễ đọc hơn, đặc biệt khi số lượng cột lớn.

Kết luận

Câu lệnh INSERT trong MySQL không chỉ đơn giản mà còn rất linh hoạt và mạnh mẽ. Những ví dụ nâng cao ở trên đã bao gồm hầu hết các trường hợp mà bạn có thể gặp khi làm việc với dữ liệu trong MySQL, từ việc chèn dữ liệu cơ bản đến các kỹ thuật tối ưu như INSERT IGNORE, ON DUPLICATE KEY UPDATE, và sử dụng kết hợp với các truy vấn khác.