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
-----