Thứ Ba, 25 tháng 7, 2023

Lệnh INSERT trong MySQL: Thêm dữ liệu vào bảng

Trong bài này ta sẽ học lệnh Insert trong MySQL, đây là lệnh dùng để thêm dữ liệu vào các table.

Trải qua 10 bài vừa rồi quả là hơi căng thẳng nhỉ? Để giải tỏa tâm lý cho các bạn thì trong bài này chúng ta sẽ tìm hiểu một lệnh rất quan trọng và rất đơn giản đó là lệnh INSERT. Tuy nói là đơn giản nhưng nó cũng có nhiều vấn đề mà các bạn cần lưu ý khi sử dụng và tôi sẽ giải thích cho các bạn những lưu ý đó.

Mục lục

  • 1. Lệnh INSERT trong MySQL
    • Cú pháp 1: Khai báo rõ tên column
    • Cú pháp 2: Không khai báo rõ tên column
  • 2. Insert có khóa ngoại (Primary Key)
  • 3. Một số vấn đề khác
  • 4. Lời kết

1. Lệnh INSERT trong MySQL

Trước khi vào tìm hiểu lệnh INSERT thì ta cần tạo database, tạo table đã nhé. Giả sử tôi tạo database tên qlsv và table sinhvien như sau:

1
2
3
4
5
6
7
8
9
CREATE DATABASE IF NOT EXISTS qlsv;
USE qlsv;
 
CREATE TABLE IF NOT EXISTS sinhvien(
    sv_id INT(11) NOT NULL AUTO_INCREMENT,
    sv_name VARCHAR(255) NOT NULL,
    sv_description  VARCHAR(500),
    CONSTRAINT pk_sinhvien PRIMARY KEY(sv_id)
) ENGINE = InnoDB

Hình minh họa:

Bài viết này được đăng tại tranvanbinh.vn

/321/insert-mysql-sinh-vien.png

Thực ra thì MySQL hay MSSQL đều có cú pháp giống nhau bởi chúng đều là ngôn ngữ truy vấn T-SQL. Sau đây là một số cú pháp mà ta có thẻ sử dụng để INSERT database.

Cú pháp 1: Khai báo rõ tên column

1
2
3
INSERT INTO
table_name(field1, field2, field2, ..., fieldn)
VALUES('field1', 'field2', 'field3', ...,'fieldn')

Khi sử dụng cú pháp này thì các field ở vị trí nào sẽ tương ứng với vị trí của nó ở VALUES, và ở phần khai báo có bao nhiêu column thì ở phần value sẽ có bấy nhiêu value tương ứng.

Ví dụ:

1
2
INSERT INTO sinhvien(sv_name, sv_description)
VALUES ('Nguyen van cuong', 'Sinh vien dai hoc');<br />

Vì sv_id là PRIMARY KEY và tăng tự động (AUTO_INCREMENT) nên tôi không cần truyền dữ liệu cho nó.

Cú pháp 2: Không khai báo rõ tên column

1
2
INSERT INTO table_name
VALUES ('field_1', 'field_2', ..., 'field_n');

Trong trường hợp này thì bạn bắt buộc phải truyền cho tất cả các column, ví dụ bạn có 10 column thì bạn phải truyền cho cả 20, nếu không sẽ báo lỗi ngay.

Ví dụ:

1
2
INSERT INTO sinhvien
VALUES ('2', 'Nguyen van Kinh', 'Hoc sinh trung hoc');

Các bạn thấy tuy là khóa chính và tăng tự động nhưng vẫn phải truyền value cho nó, điều này khác hoàn toàn với cách trên.

2. Insert có khóa ngoại (Primary Key)

Bây giờ bạn xóa database mà ta demo ở trên để làm lại database khác. Giả sử ta có bảng SINHVIEN và bảng LOP, trong đó SINHVIEN sẽ là con của bảng LOP. Vây ta cần tạo hai bảng này và thêm khóa chính PRIMARY KEY như sau:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE DATABASE IF NOT EXISTS qlsv;
USE qlsv;
 
 
CREATE TABLE IF NOT EXISTS lop(
    lop_id INT(11) NOT NULL AUTO_INCREMENT,
    lop_name VARCHAR(255) NOT NULL,
    CONSTRAINT pk_lop PRIMARY KEY(lop_id)
) ENGINE = INNODB;
 
CREATE TABLE IF NOT EXISTS sinhvien(
    sv_id INT(11) NOT NULL AUTO_INCREMENT,
    sv_name VARCHAR(255) NOT NULL,
    sv_description  VARCHAR(500),
    lop_id INT(11) NOT NULL,
    CONSTRAINT pk_sinhvien PRIMARY KEY(sv_id),
    CONSTRAINT fk_sinhvien_lop FOREIGN KEY (lop_id) REFERENCES lop(lop_id)
) ENGINE = INNODB;

Hình minh họa:

/321/insert-mysql-sinh-vien-foreign-key.png

Trong trường hợp INSERT vào bảng có khóa ngoại thì bạn cần phải lưu ý những đặc điểm sau (lấy sơ đồ trên làm ví dụ):

  • Khi thêm vào bảng LOP thì thêm bình thường không vấn đề gì.
  • Khi thêm vào bảng SINHVIEN thì tại vì nó có một khóa ngoại là lop_id có trỏ đến bảng LOP nên bắt buộc giá trị của lop_id phải tồn tại trong bảng LOP, nếu không sẽ bị báo lỗi ngay.

Áp dụng hai lưu ý trên thì vấn đề thêm dữ liệu quá đơn giản.

Ví dụ: Thêm dữ liệu bảng LOP sau đó thêm dữ liệu cho bảng SINHVIEN.

1
2
INSERT INTO lop(lop_name) VALUES('CNTT');
INSERT INTO lop(lop_name) VALUES('SPTIN')

Sau khi INSERT xong thì bảng LOP sẽ có hai record như sau:

insert bang lop data png

Ok, lop_id đã được thiết lập tăng tự động. Bây giờ ta sẽ viết code thêm bảng SINHVIEN nhé:

1
2
INSERT INTO sinhvien(sv_name, sv_description, lop_id)
VALUES ('Nguyen Van Cuong', 'Hoc sinh guong mau', 1)

Chạy câu truy vấn này thì thêm thành công. Nhưng giờ giả sử bạn đổi giá trị của lop_id sang số 4 thử xem? Chạy sẽ bị lỗi tại vì lop_id = 4 không tồn tại bên bảng LOP.

3. Một số vấn đề khác

Bây giờ ta tìm hiểu một số vấn đề khác hơi râu ria một chút như sau:

  • Trường hợp bạn thêm cho field là số thì bạn không cần đặt trong cặp dấu nháy đơn, tuy nhiên nếu đặt vẫn được (khuyến khích đặt).
  • Trường hợp bạn thêm là chuỗi thì nếu trong chuỗi có ký tự dấu nháy đơn, kép thì bạn nên thêm dấu / đằng trước nếu không sẽ bị lỗi ngay.

Ví dụ:

1
2
INSERT INTO sinhvien(sv_name, sv_description, lop_id)
VALUES ('Nguyen Van Cuong', 'Hoc sinh guong mau 'nhat lop' ', 1)

4. Lời kết

Hè hè, ở trên mình nói bài này khá đơn giản nhưng đọc vào hơi điên đầu phải không nào :D, các bạn bị lừa rồi đấy nhé. Nếu cảm thấy tức tối khi bị lừa thì hãy chờ bài tiếp theo chúng ta sẽ tìm hiểu một lệnh khác cũng khá đơn giản để bù đắp lỗi lầm của mình đó là lệnh SELECT. Chúc bạn học tốt!

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
Lệnh INSERT trong MySQL: Thêm dữ liệu vào bảng, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master