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.
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]'.
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
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.
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
.
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'.
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.
id
Kết quả là NULL
sẽ được chèn vào cột department
của bản ghi này.
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.
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
.
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.
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
.
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.
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.
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
.
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 products
và categories
vào bảng product_summary
bằng cách kết hợp hai bảng dựa trên category_id
.
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 đó.
log_table
Hàm LAST_INSERT_ID()
sẽ trả về order_id
cuối cùng được chèn tự độ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:
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.
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.