03. Insert dữ liệu vào table trong MySQL [MySQL]


Đầu tiên ta sẽ tạo database và table

CREATE DATABASE testing_db;
USE testing_db;
CREATE TABLE people(name VARCHAR(50) , age INT);
mysql> CREATE DATABASE testing_db;
Query OK, 1 row affected (0.00 sec)

mysql> USE testing_db;
Database changed
mysql> CREATE TABLE people(name VARCHAR(50) , age INT);
Query OK, 0 rows affected (0.01 sec)


mysql> DESC people;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(50) | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

mysql> 

Để thêm dữ liệu vào table ta dùng

INSERT INTO people (name,age) VALUE("Mr D", 34);
mysql> INSERT INTO people (name,age) VALUE("Mr D", 34);
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM people;
+------+------+
| name | age  |
+------+------+
| Mr D |   34 |
+------+------+
1 row in set (0.00 sec)

mysql> 

Ta dùng "SELECT * FROM people;" để lấy ra tất cả các cột dữ liệu trong table people. Nếu ta muốn thêm nhiều như liệu cùng 1 lúc thì ta làm như sau.

INSERT INTO people (name,age) VALUES("Trang",25),("Yen",3);
mysql> INSERT INTO people (name,age) VALUES("Trang",25),("Yen",3);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM people;
+-------+------+
| name  | age  |
+-------+------+
| Mr D  |   34 |
| Trang |   25 |
| Yen   |    3 |
+-------+------+
3 rows in set (0.00 sec)

mysql> 

Ta xem lại cấu trúc của table people

mysql> DESC people;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(50) | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

Ta thấy name VARCHAR(50) chỉ có 50 ký tự. Nếu ta thêm name lớn hơn 50 ký tự thì sao ?

mysql> INSERT INTO people (name,age) VALUE("Mr D3219391293193919qdjajdakjdakdjakdjakdjakdjakdjakdjakdjakdja", 34);
ERROR 1406 (22001): Data too long for column 'name' at row 1
mysql> SELECT * FROM people;
+-------+------+
| name  | age  |
+-------+------+
| Mr D  |   34 |
| Trang |   25 |
| Yen   |    3 |
+-------+------+
3 rows in set (0.00 sec)

mysql> 

Lúc này MySql sẽ báo lỗi và không có thêm vào table.

Do name , age Null là YES và giá trị mặc định là NUll nên nếu ta thêm dữ liệu như sau

INSERT INTO people() VALUE();

Thì kết quả như thế nào

mysql> INSERT INTO people() VALUE();
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM people;
+-------+------+
| name  | age  |
+-------+------+
| Mr D  |   34 |
| Trang |   25 |
| Yen   |    3 |
| NULL  | NULL |
+-------+------+
4 rows in set (0.00 sec)

mysql> 

Ta thấy là do name và age không khai báo nên đều là NULL hết.

Còn nếu ta làm như sau

INSERT INTO people (name,age) VALUE("Mr T");

Thì sẽ báo lỗi vì ta có khai báo là thêm dữ liệu cho age mà chỗ VALUE không có.

mysql> INSERT INTO people (name,age) VALUE("Mr T");
ERROR 1136 (21S01): Column count doesn't match value count at row 1
mysql> 

Do đó muốn thêm name vào còn age để default thì ta làm như sau

INSERT INTO people (name) VALUE("Mr T");
mysql> INSERT INTO people (name) VALUE("Mr T");
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM people;
+-------+------+
| name  | age  |
+-------+------+
| Mr D  |   34 |
| Trang |   25 |
| Yen   |    3 |
| NULL  | NULL |
| Mr T  | NULL |
+-------+------+
5 rows in set (0.00 sec)

mysql> 

Ta thấy Lúc này Mr T có tuổi là NULL. Vì vậy ta phải cập nhật lại là nếu không có nhập vào age thì lấy giá trị default.

ALTER TABLE people MODIFY age INT NOT NULL DEFAULT 1;
mysql> ALTER TABLE people MODIFY age INT NOT NULL DEFAULT 1;
ERROR 1138 (22004): Invalid use of NULL value
mysql> 

Lúc này sẽ báo lỗi vì dữ liệu trong bảng people đang có là NULL, nên khi cập nhật lại age là NOT NULL sẽ bị lỗi. Vì vậy ta sẽ update dữ liệu trong bảng people không còn là NUll nữa rồi mới chỉnh sửa age là NOT NULL mới được.

UPDATE people SET age = 0 WHERE age IS NULL;
mysql> UPDATE people SET age = 0 WHERE age IS NULL;
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> SELECT * FROM people;
+-------+------+
| name  | age  |
+-------+------+
| Mr D  |   34 |
| Trang |   25 |
| Yen   |    3 |
| NULL  |    0 |
| Mr T  |    0 |
+-------+------+
5 rows in set (0.00 sec)

mysql> 

Giờ ta có thể chỉnh lại age NOT NULL DEFAULT 1;

ALTER TABLE people MODIFY age INT NOT NULL DEFAULT 1;
mysql> DESC people;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(50) | YES  |     | NULL    |       |
| age   | int(11)     | NO   |     | 1       |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql>

Nếu ta thêm dữ liệu vào không có age thì sẽ lấy giá trị default là 1.

INSERT INTO people (name) VALUE("Mr B");
mysql> INSERT INTO people (name) VALUE("Mr B");
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM people;
+-------+-----+
| name  | age |
+-------+-----+
| Mr D  |  34 |
| Trang |  25 |
| Yen   |   3 |
| NULL  |   0 |
| Mr T  |   0 |
| Mr B  |   1 |
+-------+-----+
6 rows in set (0.00 sec)

mysql> 

Mr B có age là 1.

Tương tự với name.

UPDATE people SET name = "USER" WHERE name  IS NULL;
SELECT * FROM people;

mysql> UPDATE people SET name = "USER" WHERE name  IS NULL;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM people;
+-------+-----+
| name  | age |
+-------+-----+
| Mr D  |  34 |
| Trang |  25 |
| Yen   |   3 |
| USER  |   0 |
| Mr T  |   0 |
| Mr B  |   1 |
+-------+-----+
6 rows in set (0.00 sec)

mysql> 
ALTER TABLE people MODIFY name VARCHAR(50) NOT NULL DEFAULT "USER";
mysql> ALTER TABLE people MODIFY name VARCHAR(50) NOT NULL DEFAULT "USER";
Query OK, 0 rows affected (0.12 sec)
Records: 0  Duplicates: 0  Warnings: 0



mysql> DESC people;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(50) | NO   |     | USER    |       |
| age   | int(11)     | NO   |     | 1       |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> 

Như vậy ta đã tìm hiểu xong cách INSERT data vào trong Table.

U