DBMS (5) - Thao tác với dữ liệu trong MySQL

Bài trước: DBMS (4) - Tạo cơ sở dữ liệu quan hệ

-----

1.1       Thao tác với dữ liệu trong MySQL

Bạn đã tạo được cơ sở dữ liệu, đã tạo được bảng để chứa dữ liệu. Phần này bạn sẽ thực hiện thêm một số thao tác với hệ quản trị cơ sở dữ liệu MySQL:

– Thay đổi các cột của bảng

– Chèn dữ liệu vào bảng

– Truy vấn dữ liệu từ bảng

– Kết xuất cơ sở dữ liệu ra một tập tin (export database)

– Nhập một cơ sở dữ liệu có sẵn từ tập tin (import database)

1.1.1       Thay đổi các cột của bảng

Sau khi tạo bảng xong, bạn vẫn có thể thay đổi cấu trúc của nó. Ví dụ có thể thêm cột, xóa bớt cột, sửa tiêu đề của cột.

Ví dụ:

– Bảng loai_mon_an đang có cấu trúc là:

mysql> show columns from loai_mon_an;

+----------+--------------+------+-----+---------+-------+

| Field    | Type         | Null | Key | Default | Extra |

+----------+--------------+------+-----+---------+-------+

| ma_loai  | int          | YES  |     | NULL    |       |

| ten_loai | varchar(200) | YES  |     | NULL    |       |

| mo_ta    | varchar(500) | YES  |     | NULL    |       |

| hinh     | varchar(100) | YES  |     | NULL    |       |

+----------+--------------+------+-----+---------+-------+

4 rows in set (0.37 sec)

– Giờ sẽ thêm cột trang_thai (trạng thái: cho biết tình trạng của loại món ăn này: có (1)  hay không (0)). Cột trang_thai được thêm vào cuối bảng (sau cột hinh).

mysql> ALTER TABLE loai_mon_an ADD COLUMN trang_thai int AFTER hinh;

Query OK, 0 rows affected (0.53 sec)

Records: 0  Duplicates: 0  Warnings: 0

– Xem kết quả

mysql> show columns from loai_mon_an;

+------------+--------------+------+-----+---------+-------+

| Field      | Type         | Null | Key | Default | Extra |

+------------+--------------+------+-----+---------+-------+

| ma_loai    | int          | YES  |     | NULL    |       |

| ten_loai   | varchar(200) | YES  |     | NULL    |       |

| mo_ta      | varchar(500) | YES  |     | NULL    |       |

| hinh       | varchar(100) | YES  |     | NULL    |       |

| trang_thai | int          | YES  |     | NULL    |       |

+------------+--------------+------+-----+---------+-------+

5 rows in set (0.00 sec)

– Bạn có thể sửa tên cột trang_thai thành tinh_trang (tình trạng). Cú pháp là:

ALTER TABLE table_name RENAME COLUMN ten_cu TO ten_moi;

Ví dụ,

mysql> ALTER TABLE loai_mon_an RENAME COLUMN trang_thai TO tinh_trang;

Query OK, 0 rows affected (0.08 sec)

Records: 0  Duplicates: 0  Warnings: 0

Bạn có thể xem cấu trúc bảng để thấy kết quả.

– Xóa cột tinh_trang

mysql> ALTER TABLE loai_mon_an DROP COLUMN tinh_trang;

Query OK, 0 rows affected (0.12 sec)

Records: 0  Duplicates: 0  Warnings: 0

Bạn có thể xem cấu trúc bảng để thấy kết quả.

1.1.2       Chèn và truy vấn dữ liệu

Chèn dữ liệu vào bảng

Công việc của bạn là cần chèn các hàng dữ liệu sau vào bảng loai_mon_an:

Mã loại

Tên loại

Mô tả

Hình ảnh

1

Cơm

Các món cơm Việt

com.jpg

2

Lẩu

Các món lẩu

lau.jpg

3

Canh

Các món canh Việt

canh.jpg

4

Kho

Các món kho

kho.jpg

Giả sử bạn đã có cơ sở dữ liệu quan_ly_nha_hang, đã định nghĩa bảng loai_mon_an, đang kết nối vào MySQL server bằng user1. Sau đây là một số gợi ý để chèn dữ liệu cho một bảng.

 – Sử dụng lệnh sau để chèn dữ liệu cho một bảng.

INSERT INTO ten_bang (ten_cot1, ten_cot2,…)

VALUES (gia_tri_cot1, gia_tri_cot2,…)

– Để biết chắc chắn tên các cột của bảng (field), sử dụng lệnh SHOW COLUMNS FROM ten_bang. Ví dụ:

mysql> show columns from loai_mon_an;

+----------+--------------+------+-----+---------+-------+

| Field    | Type         | Null | Key | Default | Extra |

+----------+--------------+------+-----+---------+-------+

| ma_loai  | int          | YES  |     | NULL    |       |

| ten_loai | varchar(200) | YES  |     | NULL    |       |

| mo_ta    | varchar(500) | YES  |     | NULL    |       |

| hinh     | varchar(100) | YES  |     | NULL    |       |

+----------+--------------+------+-----+---------+-------+

4 rows in set (0.08 sec)

– Ví dụ chèn hàng dữ liệu đầu tiên cho bảng

mysql> insert into loai_mon_an(ma_loai, ten_loai, mo_ta, hinh) values(1, 'com', 'cac mon com Viet', 'com.jpg');

Query OK, 1 row affected (0.24 sec)

Lưu ý: nếu dữ liệu thuộc kiểu chuỗi thì phải bao lại bằng cặp dấu nháy đơn (‘’) hoặc nháy kép (“”). Ví dụ: ‘com’.

– Để kiểm tra xem việc chèn dữ liệu vào bảng được hay chưa? Sử dụng lệnh SELECT * FROM ten_bang. Ví dụ:

mysql> select * from loai_mon_an;

+---------+----------+------------------+---------+

| ma_loai | ten_loai | mo_ta            | hinh    |

+---------+----------+------------------+---------+

|       1 | com      | cac mon com Viet | com.jpg |

+---------+----------+------------------+---------+

1 rows in set (0.00 sec)

Bạn chèn hết các hàng dữ liệu còn lại của bảng loai_mon_an, để thực hành các bài tiếp theo.

mysql> select * from loai_mon_an;

+---------+----------+-------------------+----------+

| ma_loai | ten_loai | mo_ta             | hinh     |

+---------+----------+-------------------+----------+

|       1 | com      | cac mon an Viet   | com.jpg  |

|       2 | lau      | cac mon lau       | lau.jpg  |

|       3 | canh     | cac mon canh Viet | canh.jpg |

|       4 | kho      | cac mon kho       | kho.jpg  |

+---------+----------+-------------------+----------+

4 rows in set (0.00 sec)

Truy vấn dữ liệu

Truy vấn dữ liệu là bạn đặt ra các câu hỏi dựa trên các bảng dữ liệu, sau đó MySQL server sẽ tìm kiếm và hiển thị kết quả cho bạn.

Cú pháp căn bản của một câu truy vấn có dạng:

SELECT – FROM – WHERE: nghĩa là bạn muốn hiển thị cái gì, từ bảng nào và dựa trên điều kiện gì?

Tuy nhiên, cú pháp tổng quát thì nó gồm một số thành phần sau:

SELECT [*| DISTINCT] <Danh sách các cột [AS <Bí danh>]>

FROM <Danh sách Tên bảng/Tên View>

[WHERE <Biểu thức điều kiện>]

[GROUP BY <Danh sách cột>]

[HAVING <Điều kiện>]

[ORDER BY <Tên cột/ Số thứ tự cột/Biểu thức> [ASC/DESC]]

Ví dụ:

– Hiển thị tất cả các loại món ăn đang có trong bảng loai_mon_an

mysql> SELECT * FROM loai_mon_an WHERE true;

+---------+----------+-------------------+----------+

| ma_loai | ten_loai | mo_ta             | hinh     |

+---------+----------+-------------------+----------+

|       1 | com      | cac mon an Viet   | com.jpg  |

|       2 | lau      | cac mon lau       | lau.jpg  |

|       3 | canh     | cac mon canh Viet | canh.jpg |

|       4 | kho      | cac mon kho       | kho.jpg  |

+---------+----------+-------------------+----------+

4 rows in set (0.00 sec)

– Hiển thị loại món ăn có mã loại là 3

mysql> SELECT * FROM loai_mon_an WHERE ma_loai = 3;

+---------+----------+-------------------+----------+

| ma_loai | ten_loai | mo_ta             | hinh     |

+---------+----------+-------------------+----------+

|       3 | canh     | cac mon canh Viet | canh.jpg |

+---------+----------+-------------------+----------+

1 row in set (0.00 sec)

– Hiển thị các thông tin về món ăn có tên là lau (lẩu)

mysql> SELECT * FROM loai_mon_an WHERE ten_loai = 'lau';

+---------+----------+-------------+---------+

| ma_loai | ten_loai | mo_ta       | hinh    |

+---------+----------+-------------+---------+

|       2 | lau      | cac mon lau | lau.jpg |

+---------+----------+-------------+---------+

1 row in set (0.05 sec)

1.1.3       Xuất và nhập một cơ sở dữ liệu

Xuất một cơ sở dữ liệu thành một tập tin

Khi bạn đã có một cơ sở dữ liệu, với rất nhiều dữ liệu trong các bảng và các quan hệ đã được tạo. Để tạo ra một bản lưu dự phòng, hoặc chia sẻ cơ sở dữ liệu cho người khác bạn có thể xuất cơ sở dữ liệu thành một tập tin.

Sử dụng lệnh MYSQLDUMP. Lệnh này nằm trong thư mục \mysql\bin>

Ví dụ:

C:\Program Files\mysql\bin>mysqldump -u user1 -p quan_ly_nha_hang > quanLyNhaHang.sql

Enter password: ******

Tập tin kết quả quanLyNhaHang.sql sẽ được lưu trong thư mục \mysql\bin>

Việc xuất (export) một cơ sở dữ liệu sang dạng .sql, thực tế là việc ghi lại các lệnh: tạo bảng, thiết lập khóa, chèn dữ liệu …v.v vào một tập tin dạng văn bản. Để kiểm tra điều này, hãy xuất một cơ sở dữ liệu sang dạng một tập tin .sql, sau đó mở tập tin này bằng phần mềm Notepad chẳng hạn, rồi xem kết quả.

[quanLyNhaHang.sql]

-- MySQL dump 10.13  Distrib 8.0.30, for Win64 (x86_64)

--

-- Host: localhost    Database: quan_ly_nha_hang

-- ------------------------------------------------------

-- Server version 8.0.30

--

-- Table structure for table `loai_mon_an`

--

 

DROP TABLE IF EXISTS `loai_mon_an`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!50503 SET character_set_client = utf8mb4 */;

CREATE TABLE `loai_mon_an` (

  `ma_loai` int DEFAULT NULL,

  `ten_loai` varchar(200) DEFAULT NULL,

  `mo_ta` varchar(500) DEFAULT NULL,

  `hinh` varchar(100) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

/*!40101 SET character_set_client = @saved_cs_client */;

 

--

-- Dumping data for table `loai_mon_an`

--

 

LOCK TABLES `loai_mon_an` WRITE;

/*!40000 ALTER TABLE `loai_mon_an` DISABLE KEYS */;

INSERT INTO `loai_mon_an` VALUES (1,'com','cac mon an Viet','com.jpg'),(2,'lau','cac mon lau','lau.jpg'),(3,'canh','cac mon canh Viet','canh.jpg'),(4,'kho','cac mon kho','kho.jpg');

/*!40000 ALTER TABLE `loai_mon_an` ENABLE KEYS */;

UNLOCK TABLES;

-- Dump completed on 2022-08-22  9:51:33

Nhập một cơ sở dữ liệu từ tập tin

Ngược lại, khi bạn muốn khôi phục lại, hoặc sử dụng lại một cơ sở dữ liệu đã được export trước đó. Bạn có thể thực hiện việc nhập (import) một cơ sở dữ liệu từ tập tin.

Để thực hành phần này, bạn sẽ thực hiện xóa cơ sở dữ liệu quan_ly_nha_hang. Lưu ý: bạn phải đảm bảo chắc chắn đã kết xuất cơ sở dữ liệu này sang một tập tin rồi.

Xem trong MySQL có cơ sở dữ liệu quan_ly_nha_hang không?

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| quan_ly_nha_hang   |

| sys                |

+--------------------+

5 rows in set (0.00 sec)

Thực hiện xóa:

mysql> DROP DATABASE quan_ly_nha_hang;

Query OK, 1 row affected (0.23 sec)

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| sys                |

+--------------------+

4 rows in set (0.00 sec)

– Để nhập một cơ sở dữ liệu, bạn cần tạo một cơ sở dữ liệu “rỗng” trước.

mysql> CREATE DATABASE IF NOT EXISTS quan_ly_nha_hang_new;

Query OK, 1 row affected (0.08 sec)

– Sau đó, dùng lệnh sau để nhập cơ sở dữ liệu từ tập tin .sql vào

C:\Program Files\mysql\bin>mysql -u user1 -h localhost -p quan_ly_nha_hang_new < quanLyNhaHang.sql

Enter password: ******

C:\Program Files\mysql\bin>

– Đăng nhập lại vào MySQL server

C:\Program Files\mysql\bin>mysql -u user1 -h localhost -p

Enter password: ******

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 16

– Làm việc với cơ sở dữ liệu quan_ly_nha_hang_new

mysql> use quan_ly_nha_hang_new;

Database changed

– Thực hiện một số lệnh để kiểm tra cơ sở dữ liệu vừa được nhập mới

mysql> show tables from quan_ly_nha_hang_new;

+--------------------------------+

| Tables_in_quan_ly_nha_hang_new |

+--------------------------------+

| loai_mon_an                    |

+--------------------------------+

1 row in set (0.00 sec)

 

mysql> select * from loai_mon_an;

+---------+----------+-------------------+----------+

| ma_loai | ten_loai | mo_ta             | hinh     |

+---------+----------+-------------------+----------+

|       1 | com      | cac mon an Viet   | com.jpg  |

|       2 | lau      | cac mon lau       | lau.jpg  |

|       3 | canh     | cac mon canh Viet | canh.jpg |

|       4 | kho      | cac mon kho       | kho.jpg  |

+---------+----------+-------------------+----------+

4 rows in set (0.00 sec)

Lưu ý: việc nhập một cơ sở dữ liệu, chính là quá trình chạy lại các lệnh: tạo bảng, thiết lập khóa, chèn dữ liệu …v.v từ một tập tin dạng văn bản.

1.1.4       Xem và đọc thêm

– Dùng các từ khóa sau để tìm kiếm trên mạng và đọc thêm: chèn dữ liệu cho bảng mysql, mysql insert data into table, export và import cơ sở dữ liệu bằng dòng lệnh, export and import database in command line.

– INSERT: https://dev.mysql.com/doc/refman/8.0/en/insert.html

– Chu Thị Hường, Bài giảng Hệ quản trị CSDL, [chương 2: các câu lệnh SQL cơ bản] [ebook]

 

1.1.5       Bài tập và thực hành

Bài 1. Làm lại các câu lệnh ở phần lý thuyết.

Bài 2. Thực hiện một số yêu cầu sau:

1.      Tạo cơ sở dữ liệu “rỗng” có tên là quan_ly_sach

2.      Nhập (import) cơ sở dữ liệu này [chickenrainshop_structure_data.sql] vào cơ sở dữ liệu quan_ly_sach.

3.      Thực hiện các truy vấn, và ghi lại kết quả:

a.       Cơ sở dữ liệu quan_ly_sach có bao nhiêu bảng?

b.      Bảng books có bao nhiêu cột dữ liệu?

c.       Danh sách các cuốn sách có trong bảng books

d.      Sửa lại tên bảng writers thành writers_new.

Gợi ý:

Bài 2.3.a:

mysql> use quan_ly_sach

Database changed

mysql> show tables;

+------------------------+

| Tables_in_quan_ly_sach |

+------------------------+

| books                  |

| books_writers          |

| categories             |

| comments               |

| coupons                |

| groups                 |

| orders                 |

| users                  |

| writers                |

+------------------------+

9 rows in set (0.00 sec)

Bài 2.3.b

mysql> show columns from books;

+---------------+--------------+------+-----+---------+----------------+

| Field         | Type         | Null | Key | Default | Extra          |

+---------------+--------------+------+-----+---------+----------------+

| id            | int          | NO   | PRI | NULL    | auto_increment |

| category_id   | int          | YES  |     | NULL    |                |

| title         | varchar(100) | NO   |     | NULL    |                |

| slug          | varchar(255) | NO   |     | NULL    |                |

| image         | varchar(255) | YES  |     | NULL    |                |

| info          | text         | NO   |     | NULL    |                |

| price         | int          | NO   |     | NULL    |                |

| sale_price    | int          | NO   |     | NULL    |                |

| publisher     | varchar(100) | NO   |     | NULL    |                |

| publish_date  | date         | NO   |     | NULL    |                |

| link_download | varchar(255) | NO   |     | NULL    |                |

| published     | tinyint(1)   | YES  |     | 0       |                |

| created       | datetime     | YES  |     | NULL    |                |

| modified      | datetime     | YES  |     | NULL    |                |

+---------------+--------------+------+-----+---------+----------------+

14 rows in set (0.00 sec)

Bài 2.3.c

mysql> select title from books;

+-----------------------------------------+

| title                                   |

+-----------------------------------------+

| Ba ?i?m tinh y?u trên ???ng tu t?p      |

| Khám phá ngôn ng? t? duy                |

| Ng??i th?p sáng tâm h?n                 |

| Ánh sáng vô hình                        |

| Tr?i xanh c?a táo                       |

| Ông già và bi?n c?                      |

| Bi?n ??i thay                           |

| Chuông nguy?n h?n ai                    |

| Nhà ?ào t?o sành s?i                    |

| Nh?ng ?i?u s?p nói và không nói v?i b?n |

| M?t v?i m?t là ba                       |

+-----------------------------------------+

11 rows in set (0.00 sec)

2.3.d

mysql> alter table writers rename to writers_new;

Query OK, 0 rows affected (0.11 sec)

 

mysql> show tables;

+------------------------+

| Tables_in_quan_ly_sach |

+------------------------+

| books                  |

| books_writers          |

| categories             |

| comments               |

| coupons                |

| groups                 |

| orders                 |

| users                  |

| writers_new            |

+------------------------+

9 rows in set (0.00 sec)

1.1.6       Câu hỏi ôn tập

Câu 1. Lệnh [mysql> show columns from loai_mon_an;] dùng để làm gì?

A. Hiển thị các hàng dữ liệu của bảng loai_mon_an

B. Hiển thị tên các cột dữ liệu của bảng loai_mon_an

C. Lệnh trên bị lỗi và không thể thực thi

D. Hiển thị tên các bảng của cơ sở dữ liệu

Câu 2. Lệnh [mysql> ALTER TABLE loai_mon_an ADD COLUMN trang_thai int AFTER hinh;] dùng để làm gì?

A. Đổi tên bảng loai_mon_an thành trang_thai

B. Đổi tên cột trang_thai trong bảng loai_mon_an thành hinh

C. Trong bảng loai_mon_an, thêm cột trang_thai vào sau cột hinh

D. Trong bảng loai_mon_an, chuyển cột trang_thai ra sau cột hinh

Câu 3. Lệnh [C:\Program Files\mysql\bin>mysqldump -u user1 -p quan_ly_nha_hang > quanLyNhaHang.sql] dùng để làm gì?

A. Đăng nhập vào máy SQL server và truy cập vào cơ sở dữ liệu quan_ly_nha_hang

B. Hiển thị danh sách các bảng có trong cơ sở dữ liệu quan_ly_nha_hang

C. Đọc thông tin từ tập tin quanLyNhaHang.sql đưa vào cơ sở dữ liệu quan_ly_nha_hang

D. Kết xuất (export) cơ sở dữ liệu quan_ly_nha_hang vào tập tin quanLyNhaHang.sql

----

Đáp án: 1(B), 2(C), 3(D)

////// 5

-----

Cập nhật: [22/8/2022]
-----