You are on page 1of 12

Bài hướng dẫn thực hành số 2

1. Các kiể u dữ liêụ

- Đinh
̣ nghiã : Kiể u dữ liê ̣u tức là Kiể u của Dữ liê ̣u

1.a Kiể u dữ liêụ số (Numeric)

Kiể u Lưu trữ Mô tả

TINYINT(size) 1 bytes Số nguyên rất nhỏ, có dạng signed hoặc


unsigned. Nếu signed, thì có dãy từ -128 tới
127. Nếu unsigned, là từ 0 tới 255. Ta có thể
xác định độ rộng field tới 4 số.

SMALLINT(size) 2 bytes Số nguyên nhỏ, có da ̣ng signed hoặc unsigned.
Nếu signed, có dãy từ -32768 tớ i 32767. Nếu
unsigned, là 0 tới 65535. Ta có thể xác định độ
rộng field tới 5 số.

MEDIUMINT(size 3 bytes Số nguyên vừa, có dạng signed hoặc unsigned.


) Nếu signed, thì có giá trị từ -8388608 tới
8388607. Nếu unsigned, sẽ có dãy từ 0 tới
16777215. Ta có thể xác định độ rộng field tới
9 số.

INT/INTGER(size) 4 bytes Số nguyên, dạng signed hoặc unsigned. Nếu


signed, thì cho dãy từ -2147483648 tới
2147483647. Nếu unsigned, thì cho dãy từ 0 tới
4294967295. Ta có thể cho độ rộng kiểu dữ
liệu nguyên tới 11 số – int(11).

BIGINT(size) 8 bytes Số nguyên lớn, dạng signed hoặc unsigned.


Nếu signed, sẽ có dãy từ -
9223372036854775808 tới
9223372036854775807. Nếu unsigned, thì có
dãy từ 0 tới 18446744073709551615. Ta có thể
xác định độ rộng field tới 20 số.

Kiể u Lưu trữ Mô tả

FLOAT(m,d) 4 bytes Kiể u dữ liê ̣u dấ u phẩ y đô ̣ng (số thực). Trong
đó m là tổ ng số còn d là số chữ số sau thâ ̣p
phân. Phầ n thâ ̣p phân có thể lên tới 24 chữ
số .

DOUBLE(m,d) 8 bytes Kiể u số thực nhưng lớn hơn Float. Trong đó
m là tổ ng số còn d là số chữ số sau thâ ̣p
phân. Phầ n thâ ̣p phân có thể lên tới 53 chữ
số .

DECIMAL(m,d) Phụ thuộc Kiể u dữ liê ̣u số có xác đinh
̣ số lẻ ở số thâ ̣p
vào khi định phân. Trong đó m là tổ ng số còn d là số chữ
nghĩa cột số sau thâ ̣p phân.

*Chú ý 1:

+) Unsigned: Phải là số nguyên dương

+) Float/Double thường được sử dụng trong các phép tính toán số thực thông thường

+) Decimal thường được sử dụng để tính toán các ứng dụng về tiền tệ (do độ chính xác cao
và phạm vi giá trị lớn)

+)Ví du ̣, ta cho ̣n kiể u dữ liê ̣u Decimal (6,3) cho thành giá tiề n là 80,000. Ở đây mang ý nghiã
đô ̣ rô ̣ng toàn chữ số 80,000 là 6 tiń h cả dấ u phẩ y, phầ n thâ ̣p phân sau dấ u phẩ y là 3.

1.b Kiể u dữ liêụ xâu/chuỗi

Kiể u dữ liêụ xâu Mô tả


Một chuỗi ký tự có độ dài cố đinh
̣ (có thể chứa chữ cái, số
và ký tự đă ̣c biê ̣t) trong khoảng 1-255. Kić h thước cố đinh
̣
đươ ̣c xác đinh
̣ trong dấ u ngoă ̣c đơn. Không bắ t buô ̣c phải
CHAR(size) khai báo đô ̣ dài, nhưng mă ̣c đinh
̣ là 1.

Một chuỗi ký tự có độ dài cố đinh


̣ (có thể chứa chữ cái, số
và ký tự đă ̣c biê ̣t) trong khoảng 1-255. Phải xác đinh
̣ đô ̣
dài, cho nên phải viế t là varchar(30) hoă ̣c là mô ̣t giá tri ̣
size khác.

Lưu ý: Nế u đă ̣t đô ̣ dài hơn 255, giá tri ̣sẽ đươ ̣c chuyể n
VARCHAR(size) thành da ̣ng Text.

Một chuỗi nhị phân độ dài cố định. Lưu trữ tố i đa là 255
BINARY(size) ký tự.

Một chuỗi nhị phân độ dài có thể thay đổi. Lưu trữ tố i đa
VARBINARY(size) là 255 ký tự.

Một đối tượng nhị phân rất nhỏ. Lưu trữ một chuỗi có độ
TINYBLOB dài tối đa 255 ký tự. Không chỉ đinh
̣ đô ̣ dài.

Một đối tượng nhị phân nhỏ. Lưu trữ tối đa 65.535 ký tự.
BLOB Không chỉ đinh
̣ đô ̣ dài.

Một đối tượng nhị phân cỡ trung bình. Lưu trữ tối đa
MEDIUMBLOB 16.777.215 ký tự. Không chỉ đinh
̣ đô ̣ dài.

Một đối tượng nhị phân cỡ lớn. Lưu trữ lên đến
LONGBLOB 4.294.967.295 ký tự. Không chỉ đinh
̣ đô ̣ dài.

Mỗi chuỗi văn bản rất nhỏ. Lưu trữ một chuỗi có độ dài tối
TINYTEXT đa 255 ký tự. Không chỉ đinh
̣ đô ̣ dài.

Mỗi chuỗi văn bản nhỏ. Lưu trữ một chuỗi có độ dài tối đa
TEXT 65.535 ký tự. Không chỉ đinh
̣ đô ̣ dài.
Mỗi chuỗi văn bản cỡ trung bình. Lưu trữ tối đa
MEDIUMTEXT 16.777.215 ký tự. Không chỉ đinh
̣ đô ̣ dài.

Mỗi chuỗi văn bản rất dài. Lưu trữ lên đến 4.294.967.295
LONGTEXT ký tự. Không chỉ đinh
̣ đô ̣ dài.

*Chú ý 2: Phân biê ̣t Blob và Text

Blob Text

Đô ̣ dài tố i đa 65.5535 ký tự 65.5535 ký tự


Để lưu trữ lươ ̣ng lớn dữ liê ̣u Để lưu trữ lươ ̣ng lớn dữ
Sử du ̣ng nhi ̣phân, ví du ̣ như hiǹ h ảnh. liê ̣u, ví dụ như văn bản
Dữ liê ̣u lưu trữ phân biê ̣t hoa Dữ liê ̣u lưu trữ không
thường. phân biê ̣t hoa thường.

*Chú ý 3:

- Các dữ liệu như dãy số 1,2,3,... có thể được khai báo dưới dạng xâu/chuỗi như char, varchar
và cũng có thể được khai báo dưới dạng số là int, float.

- Còn các dữ liệu như ký tự a,b,c... thì chỉ có thể được khai báo dưới dạng xâu/chuỗi, ta
không thể chuyển nó thành định dạng số.

1.c Kiể u dữ liêụ ngày và thời gian (Date and time)

Các kiể u dữ liêụ Mô tả


 Giá trị ngày trong định dạng
'YYYY-MM-DD'
 Ví du ̣: ngày 1 tháng 4 năm 2020 sẽ
DATE đươ ̣c lưu trữ là '2020-04-01'
 Giá trị thời gian trong định dạng
'hh:mm:ss'
 Ví du ̣: 10h35 phút 20 giây sẽ đươ ̣c
TIME lưu trữ là '10:35:20'
DATETIME  Giá trị ngày tháng và thời gian trong
định dạng 'YYYY-MM- DD
hh:mm:ss'
 Ví du ̣: 2h40 chiề u ngày 1 tháng 4
năm 2020 sẽ đươ ̣c lưu trữ là '2020-
04-01 14:40:00'
 Giá trị nhãn thời gian trong định
dạng 'YYYY-MM-DD hh:mm:ss'
 Giố ng đinh
̣ da ̣ng DATETIME chỉ là
không có dấ u ga ̣ch nố i.
 Ví du ̣: 2h40 chiề u ngày 1 tháng 4
năm 2020 sẽ đươ ̣c lưu trữ là
TIMESTAMP '20200401144000'

- Ví du ̣: giả sử như chúng ta có mô ̣t mẫu dữ liê ̣u cá nhân như sau:

Ho ̣ và tên Ngày sinh Giới tính SĐT

Nguyễn Phương Thảo 17-2-1994 Nữ 0987345679

Nguyễn Ngo ̣c Quỳnh 7-1-1997 Nữ 0305768901

❖ Dữ liê ̣u ở cô ̣t "Ho ̣ và tên" có da ̣ng chuỗi ký tự, có kiể u dữ liê ̣u là kiể u xâu.
❖ Dữ liệu ở cột "Ngày sinh" có dạng ngày tháng, có kiểu dữ liệu kiể u ngày tháng.
❖ Dữ liệu ở cột "Giới tính", có dạng chuỗi ký tự, có kiểu dữ liệu là kiể u xâu.
❖ Dữ liệu ở cột "SĐT" có dạng số nguyên, có kiểu dữ liệu là kiể u số .
❖ Ta ̣o bảng (Create table) và sử du ̣ng các kiể u dữ liê ̣u:
Create Database Phong1234;
Use Phong1234;
Create Table Nguoidan (
Hovaten char(40),
Ngaysinh date,
Gioitinh char(10),
SĐT int);
❖ Insert (nhập) dữ liê ̣u:
Use Phong1234;
Insert Into NguoiDan values
('Nguyen Phuong Thao', '1994-02-17', 'Nu', 0987345679),
('Nguyen Ngoc Quynh', '1997-01-07', 'Nu', 0305768901);

2. Tạo bảng Cơ sở dữ liệu

Đọc tài liệu thực hành cơ sở dữ liệu

2.1 Ràng buô ̣c (Constraint) của MySQl

- Ràng buộc là những quy tắ c được áp dụng ở các cột dữ liê ̣u trong bảng. Chúng được sử
dụng để kiể m tra tính hợp lê ̣ của dữ liê ̣u đầ u vào, qua đó đảm bảo tính chính xác và toàn ve ̣n
của dữ liê ̣u.

- Các loại ràng buộc: Primary Key, Foreign Key, Not Null, Default, Unique, Check.

2.2 Mối liên hệ giữa Primary Key (PK) và Foreign Key (FK)

- Xem hình vẽ ở cuối bài thực hành, ta thấy:

Hai bảng orders và bảng produclines chỉ có PK. Hai bảng orderdetails và bảng
products có PK và FK liên kết tới các bảng khác.
Bảng products đặt PK ở cột productCode và đặt FK ở cột productLine. FK ở cột
productLine của bảng products liên kết với PK ở cột productLine của bảng
productlines (1).
Bảng orderdetails đặt PK ở cột orderNumber và cột productCode (đây là trường hợp
khóa chính có nhiều column). Trong đó, cột orderNumber cũng được đặt là FK của
chính bảng orderdetails, tham chiếu tới PK của cột cùng tên của bảng orders (2). Còn
cột productCode cũng được đặt là FK của bảng orderdetails, tham chiếu tới PK của
cột cùng tên trong bảng products (3).

- Ta suy ra kết luận:

+) Từ (1) ta có: Giả sử có hai bảng A và B, bảng A có cột a và bảng B có cột b. Muố n thiết
lâ ̣p liên kết giữa hai bảng A và B thông qua hai cột a và b thì:
 Nếu đặt Foreign Key trên cột a thì cột b phải là cột đặt Primary Key và ngược lại, nếu
đặt Foreign Key trên cột b thì cột a phải là cột đặt Primary Key.
 Kiể u dữ liê ̣u của cả hai cột a và b phải giố ng nhau. Ví dụ cột a của bảng A là cột đặt
Primary Key và chứa hai giá tri ̣1 và 2 thì cột b của bảng B là cột đặt Foreign Key
cũng chỉ chứa những giá tri ̣1 và 2 mà không được chứa những giá tri ̣khác.
 Nói một cách dễ hiểu, trong trường hợp này thì Foreign Key ở bảng này chính là
Primary Key của một bảng khác.

+) Từ (2) và (3), ta thấy có thể đặt cả PK và FK trên cùng một cột.

+) Một bảng chỉ có thể có 1 Primary Key và có thể có nhiều Foreign Key. Primary Key có thể
đặt trên nhiều cột trong cùng bảng.

2.3 So sánh Primary Key và Foreign Key

Primary Key Foreign Key

Được đặt trên 1 hoặc nhiều cột Có Có

Cho phép các giá trị trùng lặp Không Có

Cho phép giá trị Null Không Có

Các hàng trong bảng được xác Có Có thể


định là duy nhất

Số lượng cho phép trên mỗi bảng 1 0 hoặc nhiều hơn

Ví dụ 1: Trường hợp các giá trị trùng lặp của Foreign Key

- Giả sử ta có bảng Studen (bảng mẹ) có Primary Key là ID

S_ID S_Name S_Address

101 Olivia New York

102 Emma Chicago


103 Isabella Washington

104 Sophia California

- Bảng Teacher là bảng con, đặt Foreign Key trên cột SID tham chiếu tới bảng Student để cho
thấy cụ thể học sinh mà giáo viên dạy. Các giá trị của cột S_ID bảng Teacher sẽ giống với
các giá trị của cột S_ID trong bảng Teacher, tuy nhiên vẫn có giá trị trùng lặp, cho thấy một
học sinh có thể học cùng lúc với nhiều giáo viên khác nhau.

T_ID T_Name T_Address S_ID

T11 Lydia Portland 102

T12 Jocelyn Houston 102

T13 Julia Atlanta 103

T14 Clare Las Vegas 103

Ví dụ 2: Trường hợp khóa ngoại là Null

- Giả sử có một 1 app ứng dụng cho phép người dùng xem, đăng, tải, bình luận về video và
hình ảnh. Trong bảng comment (bình luận), chúng ta có thể có khóa chính là ID_Comment
hai khóa ngoại là ID_Picture và ID_Video. Và khi ta chỉ bình luận về một video thì
ID_Picure sẽ trống, và nếu chỉ bình luận một hình ảnh thì ID_Video sẽ trống

2.4 So sánh Primary Key và Unique

- Giống:

 Đều ràng buộc các giá trị không được trùng trên các column được chúng định nghĩa.
 Đều được sử dụng để đảm bảm tính toàn vẹn dữ liệu
- Khác:

Primary Key Unique


Có thể chấp nhận chỉ có 1 giá trị
Không chấp nhận giá trị null
null
Do Unique cũng là một khóa
nhưng vì là một column bình
thường nên có thể nhận giá trị
NULL.
NULL cũng là một giá trị bình
thường nên khi có 2 record đều
NULL thì vẫn bị lỗi duplicate
value.

Có thể có nhiều hơn Unique trong


Chỉ có một Primary Key trong 1
1 bảng
bảng
Foreign Key có thể tham chiếu tới
Foreign Key có thể tham chiếu
cột có ràng buộc Unique
tới Primary Key

2.5 Kết luận về các trường hợp tham chiếu của Foreign Key

- Giả sử ta có bảng A cột a và bảng B cột b. Để kết nối hai bảng, ta đặt Primary Key trên cột
a và đặt Foreign Key tham chiếu trên cột b:

 Trường hợp 1 (có thể): Đặt Primary Key trên cột a, đặt Foreign Key trên cột b, cột b
trong bảng B là một cột bình thường và có đặt ràng buộc Not Null.
 Trường hợp 2 (có thể): Đặt Primary Key trên cột a, đặt Foreign Key trên cột b, cột b
cũng có thể đồng thời là cột được đặt cả Primary Key của bảng B luôn.
 Trường hợp 3 (có thể): Cho một cột c có ràng buộc Unique trong bảng A, ta cũng có
thể đặt Foreign Key trong cột b tham chiếu tới cột c, trong trường hợp này thì cột b có
thể có 1 hoặc nhiều giá trị null.
 Trường hợp 4 (không thể): Giả sử ta có một cột d không có ràng buộc gì hoặc là chỉ
có mỗi ràng buộc not null trên bảng A, thì không được phép đặt Foreign Key trên cột
b để tham chiếu tới cột d. Nếu làm thì sẽ xảy ra lỗi Missing Index For Constraint do
MySQL không chấp nhận điều này. Bản thân Primary Key hay Unique đều là một
Index, cho nên việc ta không đặt một Index lên cột d đã khiến cho cột b không thể
tham chiếu tới cột d được.

2.6 Ví dụ về Check, Null, Default


Ví du ̣ 3: Sử du ̣ng các toán tử IS NULL hoă ̣c IS NOT NULL để kiể m tra mô ̣t giá tri ̣Null

Bước 1: Ta ̣o bảng Kế t quả nhâ ̣n đươ ̣c

Bước 2: Dùng tổ hơ ̣p lênh


̣ Kế t quả nhâ ̣n đươ ̣c

Ví du ̣ 4: Sử du ̣ng Check để kiể m tra giá tri ̣

Bước 1: Ta ̣o ràng buô ̣c


Bước 2: Nhâ ̣p dữ liêụ Kế t quả nhâ ̣n đươ ̣c

Vì có dữ liê ̣u "17" mà ở bước 1 ta đã


yêu cầ u dữ liê ̣u >=18 nên hê ̣ thố ng sẽ
báo lỗi như sau:

Bước 3: Nhâ ̣p la ̣i dữ liêụ Kế t quả nhâ ̣n đươ ̣c

̣ thành mô ̣t giá tri ̣khác lớn hơn


Ta sửa giá tri 17
hoă ̣c bằ ng 18 thì dữ liê ̣u sẽ sẽ nhâ ̣p đươ ̣c vào

Ví dụ 5: Ví dụ về Default

- Ta tạo một bảng và chèn dữ liệu như sau:


- Ở đây cột Date_Of_Birth đã được đặt ràng buộc Default và Not Null, cho nên khi dùng câu
lệnh Insert Into để nhập dữ liệu và không nhập cho cột Date_Of_Birth, dữ liệu sẽ được tự
động mặc định:

- Lưu ý: Trong trường hợp này ta bắt buộc phải dùng cú pháp Insert Into ở ví dụ 5 chứ không
được dùng cú pháp Insert Into ở ví dụ 3 và 4

3. Thay đổi cấu trúc bảng

- Đọc tài liệu thực hành cơ sở dữ liệu

4. Xóa bảng

- Đọc tài liệu thực hành cơ sở dữ liệu

You might also like