DBMS (4) - Tạo cơ sở dữ liệu quan hệ

 Bài trước: DBMS (3) - Thao tác với Database Engine bằng dòng lệnh

-----

1.1       Tạo cơ sở dữ liệu quan hệ bằng dòng lệnh

Như các bạn đã biết, cơ sở dữ liệu là một tập hợp thông tin có tổ chức, các thông tin này được lưu trữ trong các hệ quản trị cơ sở dữ liệu. Cơ sở dữ liệu mô tả một phần thế giới thật.

Có nhiều loại cơ sở dữ liệu như: dạng tập tin, quan hệ, hướng đối tượng, bán cấu trúc. Phần này sẽ làm quen với cơ sở dữ liệu quan hệ.

1.1.1       Cơ sở dữ liệu quan hệ

Hiểu một cách đơn giản, cơ sở dữ liệu quan hệ bao gồm có các bảng dữ liệu và mối quan hệ giữa các bảng.

Ví dụ, để làm một ứng dụng quản lý nhà hàng, bạn sẽ tạo một cơ sở dữ liệu có tên là quan_ly_nha_hang.

Cơ sở dữ liệu quan_ly_nha_hang gồm các bảng dữ liệu sau:

– loai_mon_an (Loại món ăn)

– mon_an (Món ăn)

– khach_hang (Khách hàng)

– hoa_don (Hóa đơn)

– chi_tiet_hoa_don (Chi tiết hóa đơn)

Bạn có thể dễ hình dung ra bảng các loại món ăn (loai_mon_an) sẽ có các thông tin như sau:

Số thứ tự

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

 

 

 

Để xác định tính duy nhất và dễ dàng phân biệt giữa các loại món ăn, người ta sẽ thay cột Số thứ tự thành Mã_loại. Khi đó bảng dữ liệu loai_mon_an sẽ có dạng:

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

 

 

 

Trong hệ quản trị cơ sở dữ liệu quan_ly_nha_hang, để tạo bảng dữ liệu loai_mon_an như trên, bạn cần thực hiện 2 việc: một là mô tả cấu trúc của bảng; hai là chèn dữ liệu vào bảng.

Mô tả cấu trúc của bảng

Để mô tả cấu trúc của một bảng, cần có một số thông tin sau:

– Tên của bảng (ví dụ loai_mon_an)

– Phần chú thích (ví dụ Loại món ăn)

– Tên các thuộc tính (tiêu đề các cột của bảng), ví dụ: ma_loai, ten_loai, mo_ta, hinh

– Loại dữ liệu của thuộc tính, ví dụ: int(11), varchar(200)

– Các thông tin bổ sung khác của mỗi thuộc tính, ví dụ: Collation (bảng mã), Attributes (ràng buộc), Null, Default, Extra

Ví dụ, đây là mô tả của bảng loai_mon_an

#

Name

Type

Collation

Attributes

Null

Default

Extra

1

ma_loai

int(11)

 

 

No

None

AUTO_INCREMENT

2

ten_loai

varchar(200)

utf8_unicode_ci

 

No

None

 

3

mo_ta

varchar(500)

utf8_unicode_ci

 

No

None

 

4

Hinh

varchar(100)

utf8_unicode_ci

 

No

None

 

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

Khi đã tạo và định nghĩa cấu trúc của bảng, hiểu nôm na là bạn đã tạo ra được một cái bảng với hàng đầu tiên là tiêu đề các cột. Bây giờ, bạn đã có thể chèn dữ liệu vào cho bảng; mỗi hàng dữ liệu của bảng chính là dữ liệu của một đối tượng cụ thể. Ví dụ: [1 - Cơm - Các món cơm Việt - com.jpg]

1.1.2       Ngôn ngữ SQL

Các thao tác bạn thường thực hiện với cơ sở dữ liệu gồm:

– Tạo cơ sở dữ liệu

– Tạo bảng

– Tạo quan hệ

– Nhập dữ liệu cho các bảng

– Xuất (Export) cơ sở dữ liệu ra một tập tin

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

– Truy vấn thông tin từ CSDL

Để thực hiện các thao tác trên, bạn cần sử dụng tới các câu lệnh của ngôn ngữ SQL.

Ngôn ngữ SQL (Structured Query Language) là ngôn ngữ truy vấn có cấu trúc, dùng để tạo, thay đổi cấu trúc, thông tin; thao tác với dữ liệu trong cơ sở dữ liệu.

Phần tiếp theo, bạn sẽ sử dụng các lệnh của SQL để định nghĩa và thao tác với cơ sở dữ liệu, với bảng và với dữ liệu.

1.1.3       Tạo cơ sở dữ liệu

Để tạo cơ sở dữ liệu, bạn cần phải đảm bảo:

– Máy database server (hay thành phần database engine đang chạy)

– Dùng chương trình dòng lệnh (CMD, Command Prompt) kết nối vào database server

Để xem trên server hiện đang có các cơ sở dữ liệu nào? sử dụng lệnh show databases.

// kết thúc lệnh nhớ có dấu chấm phẩy (;).

mysql> show databases;

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

| Database           |

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

| information_schema |

| mysql              |

| performance_schema |

| sys                |

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

4 rows in set (0.00 sec)

Theo thông tin hiển thị, hiện tại server đang có 4 cơ sở dữ liệu của hệ thống.

Lệnh tạo cơ sở dữ liệu mới:

create database if not exists ten_database

mysql> create database if not exists quan_ly_nha_hang;

Query OK, 1 row affected (0.12 sec)

Kiểm tra xem việc tạo cơ sở dữ liệu được chưa?

mysql> show databases;

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

| Database           |

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

| information_schema |

| mysql              |

| performance_schema |

| quan_ly_nha_hang   |

| sys                |

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

5 rows in set (0.00 sec)

Nếu tạo một cơ sở dữ liệu đã có rồi thì sao?

mysql> create database quan_ly_nha_hang;

ERROR 1007 (HY000): Can't create database 'quan_ly_nha_hang'; database exists

Hệ thống sẽ báo lỗi là không tạo được do đã có rồi. Do vậy trong lệnh tạo cơ sở dữ liệu mới sẽ có tham số đi kèm là IF NOT EXISTS, để đảm bảo chỉ tạo cơ sở dữ liệu mới nếu nó chưa tồn tại.

Một máy database server cho phép bạn tạo nhiều cơ sở dữ liệu.

Ví dụ, bạn có thể tạo thêm cơ sở dữ liệu có tên là quan_ly_sinh_vien.

mysql> create database if not exists quan_ly_sinh_vien;

mysql> show databases;

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

| Database           |

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

| information_schema |

| mysql              |

| performance_schema |

| quan_ly_nha_hang   |

| quan_ly_sinh_vien  |

| sys                |

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

6 rows in set (0.00 sec)

Nếu bạn cố tạo một cơ sở dữ liệu đã có rồi, với tham số IF NOT EXISTS thì sẽ nhận được lời cảnh báo của hệ thống.

mysql> create database if not exists quan_ly_sinh_vien;

Query OK, 1 row affected, 1 warning (0.07 sec)

Để xem nội dung của cảnh báo, bạn sử dụng lệnh SHOW WARNINGS.

mysql> show warnings;

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

| Level | Code | Message                                                    |

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

| Note  | 1007 | Can't create database 'quan_ly_sinh_vien'; database exists |

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

1 row in set (0.00 sec)

 

Cơ sở dữ liệu sau khi được tạo sẽ có trong thư mục: \mysql\data, bạn có thể mở thư mục này để kiểm tra.

Để xóa cơ sở dữ liệu, bạn sử dụng lệnh DROP DATABASE

mysql> drop database if exists quan_ly_sinh_vien;

Query OK, 0 rows affected (0.17 sec)

1.1.4       Tạo bảng

Sau khi đã có cơ sở dữ liệu rồi, công việc tiếp theo của bạn là tạo (định nghĩa) các bảng dữ liệu.

Trong SQL, các lệnh thường được chia thành hai loại:

– Các lệnh định nghĩa dữ liệu (DDL: data definition language), ví dụ lệnh tạo cơ sở dữ liệu (CREATE DATABASE), lệnh tạo bảng (CREATE TABLE)

– Các lệnh thao tác với dữ liệu (DML: data manipulation language), ví dụ các lệnh truy vấn cơ sở dữ liệu

Khi thực hiện các thao tác với cơ sở dữ liệu, bạn nên đăng nhập bằng tài khoản thông thường thay vì tài khoản quản trị hệ thống.

Xem các tài khoản đang có trên hệ thống MySQL server (lệnh này chỉ thực thi được khi bạn đăng nhập bằng tài khoản quản trị hệ thống, ví dụ root):

mysql> select user from mysql.user;

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

| user             |

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

| mysql.infoschema |

| mysql.session    |

| mysql.sys        |

| nvteo            |

| root             |

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

5 rows in set (0.00 sec)

Xem phiên làm việc hiện tại đang đăng nhập bằng tài khoản nào?

mysql> select current_user();

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

| current_user() |

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

| root@localhost |

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

1 row in set (0.02 sec)

Bạn đang đăng nhập bằng tài khoản root, vì vậy bạn nên thoát ra và đăng nhập vào bằng tải khoản thông thường (ví dụ user1). Nếu trong hệ thống chưa có tài khoản user1, thì bạn cần tạo thêm tài khoản này.

mysql> create user 'user1'@'localhost' identified by '123456';

Query OK, 0 rows affected (0.17 sec)

Kiểm tra lại xem đã tạo được user1 chưa?

mysql> select user from mysql.user;

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

| user             |

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

| mysql.infoschema |

| mysql.session    |

| mysql.sys        |

| nvteo            |

| root             |

| user1            |

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

6 rows in set (0.00 sec)

Thoát khỏi tài khoản root, và đăng nhập vào tài khoản user1 để thực hiện các thao tác liên quan đến dữ liệu.

mysql> quit;

Bye

 

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

Enter password: ******

Đầu tiên cần chắc chắn là bạn đang làm việc với cơ sở dữ liệu nào, bằng lệnh USE.

mysql> use quan_ly_nha_hang;

ERROR 1044 (42000): Access denied for user 'user1'@'localhost' to database 'quan_ly_nha_hang'

Tuy nhiên, user1 chưa có quyền sử dụng cơ sở dữ liệu quan_ly_nha_hang, nên bạn cần thực hiện gán quyền truy cập. Nhớ đăng nhập bằng root thì mới gán quyền được.

mysql> grant all on *.* to 'user1'@'localhost';

Query OK, 0 rows affected (0.11 sec)

Sau khi gán quyền cho user1, bạn đăng nhập lại vào tài khoản user1, khai báo sử dụng cơ sở dữ liệu quan_ly_nha_hang, để tạo bảng có tên là loai_mon_an.

mysql> use quan_ly_nha_hang;

Database changed

mysql> create table if not exists loai_mon_an(ma_loai int,ten_loai varchar(200), mo_ta varchar(500), hinh varchar(100));

Query OK, 0 rows affected (0.12 sec)

Tương tự như khi tạo cơ sở dữ liệu, bạn chỉ có thể tạo bảng nếu nó chưa có, vì vậy bạn cần có thêm tham số IF NOT EXISTS. Sau tên bảng (loai_mon_an), bạn cần cung cấp thông tin mô tả cho các cột của bảng.

Xem các bảng đang có trong cơ sở dữ liệu.

mysql> show tables;

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

| Tables_in_quan_ly_nha_hang |

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

| loai_mon_an                |

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

1 row in set (0.15 sec)

Bạn cũng có thể vào thư mục mysql\data\ten_co_so_du_lieu, để kiểm tra xem có bảng vừa tạo hay chưa?

Xóa một bảng.

mysql> drop table if exists loai_mon_an;

Query OK, 0 rows affected (0.04 sec)

 

mysql> show tables;

Empty set (0.00 sec)

1.1.5       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: tạo cơ sở dữ liệu bằng dòng lệnh, tạo cơ sở dữ liệu trong mysql, create a mysql database using CLI, SHOW WARNINGS Statement

– How to work with MySQL: https://www3.ntu.edu.sg/home/ehchua/programming/sql/MySQL_HowTo.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]

– Nguyễn Anh Tuấn, https://www.youtube.com/watch?v=jk8s9zb4myU

1.1.6       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. Tạo các bảng dữ liệu sau cho cơ sở dữ liệu quan_ly_nha_hang

loai_mon_an (Loại món ăn)

#

Name

Type

Collation

Attributes

Null

Default

Extra

1

ma_loai

int(11)

No

None

AUTO_INCREMENT

2

ten_loai

varchar(200)

utf8_unicode_ci

No

None

3

mo_ta

varchar(500)

utf8_unicode_ci

No

None

4

hinh

varchar(100)

utf8_unicode_ci

No

None

 

mon_an (Món ăn)

#

Name

Type

Collation

Attributes

Null

Default

Extra

1

ma_mon

int(11)

No

None

AUTO_INCREMENT

2

ma_loai

int(11)

No

None

3

ten_mon

varchar(100)

utf8_unicode_ci

No

None

4

noi_dung_tom_tat

varchar(200)

utf8_unicode_ci

No

None

5

noi_dung_chi_tiet

varchar(500)

utf8_unicode_ci

No

None

6

don_gia

double

No

None

7

don_gia_khuyen_mai

double

No

None

8

khuyen_mai

varchar(200)

utf8_unicode_ci

No

nước ngọt, khăn lạnh

9

hinh

varchar(100)

utf8_unicode_ci

No

None

10

ngay_cap_nhat

date

No

None

11

dvt

varchar(50)

utf8_unicode_ci

No

đĩa

12

trong_ngay

boolean

No

0

 

khach_hang (Khách hàng)

#

Name

Type

Collation

Attributes

Null

Default

Extra

1

ma_khach_hang

int(11)

No

None

AUTO_INCREMENT

2

ten_khach_hang

varchar(100)

utf8_unicode_ci

No

None

3

email

varchar(50)

utf8_unicode_ci

No

None

4

dia_chi

varchar(100)

utf8_unicode_ci

No

None

5

dien_thoai

varchar(20)

utf8_unicode_ci

No

None

6

ghi_chu

varchar(200)

utf8_unicode_ci

No

None

 

hoa_don (Hóa đơn)

#

Name

Type

Collation

Attributes

Null

Default

Extra

1

ma_hoa_don

int(11)

No

None

AUTO_INCREMENT

2

ma_khach_hang

int(11)

No

None

3

ngay_dat

date

No

None

4

tong_tien

double

No

None

5

tien_dat_coc

double

No

None

6

con_lai

double

No

None

7

hinh_thuc_thanh_toan

varchar(100)

utf8_unicode_ci

No

None

8

ghi_chu

varchar(200)

utf8_unicode_ci

No

None

 

chi_tiet_hoa_don (Chi tiết hóa đơn)

#

Name

Type

Collation

Attributes

Null

Default

Extra

1

ma_hoa_don

int(11)

No

None

2

ma_mon

int(11)

No

None

3

so_luong

int(11)

No

None

4

don_gia

double

No

None

5

mon_thuc_don

boolean

No

1

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

Câu 1. Trong lệnh CREATE DATABASE, tham số IF NOT EXISTS mang ý nghĩa gì?

A. Để tạo xong cơ sở dữ liệu rồi thoát khỏi chương trình

B. Để xóa một cơ sở dữ liệu có sẵn

C. Để chỉ tạo cơ sở dữ liệu nếu nó chưa có

D. Để không thực thi lệnh

Câu 2. Trong mysql, lệnh SHOW WARNINGS dùng để làm gì?

A. Khởi chạy MySQL server

B. Dùng để xóa sạch màn hình nhập lệnh

C. Dùng để hiển thị trạng thái của MySQL server

D. Hiển thị các lỗi, cảnh báo, chú ý của các lệnh vừa được thực thi trong phiên làm việc hiện thời

Câu 3. Trong lệnh DROP DATABASE, tham số IF EXISTS mang ý nghĩa gì?

A. Chỉ xóa cơ sở dữ liệu nếu nó có tồn tại

B. Thoát khỏi phiên làm việc

C. Tắt MySQL server

D. Kiểm tra MySQL server có chạy hay không

Câu 4. Trong SQL, các lệnh định nghĩa dữ liệu được gọi là DDL, nó là viết tắt của cụm từ nào?

A. Database Definition Language

B. Data Definition Language

C. Defining Data Language

D. Do Database Local

Câu 5. Trong SQL, các lệnh thao tác với dữ liệu được gọi là DML, nó là viết tắt của cụm từ nào?

A. Data Manipulation Language

B. Database Manipulation Language

C. Doing Make Language

D. Drop MySQL Local

---

Đáp án 1 (C), 2 (D), 3 (A), 4 (B), 5 (A)

////// 4

-----

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