v Các kiểu bảng trong MySQL v Các ràng buộc toàn vẹn dữ liệu v Làm việc với cơ sở dữ liệu MySQL n Liệt kê các cơ sở dữ liệu trên server n Tạo cơ sở dữ liệu n Chọn cơ sở dữ liệu cần làm v
Trang 1Tạo Cơ sở dữ liệu và
Trang 2Mục tiêu
v Làm việc với cơ sở dữ liệu MySQL
n Liệt kê các cơ sở dữ liệu trên server
n Tạo cơ sở dữ liệu
n Chọn cơ sở dữ liệu cần làm việc
n Xóa cơ sở dữ liệu
v Các kiểu bảng trong MySQL
v Các ràng buộc toàn vẹn dữ liệu
v Làm việc với cơ sở dữ liệu MySQL
n Liệt kê các cơ sở dữ liệu trên server
n Tạo cơ sở dữ liệu
n Chọn cơ sở dữ liệu cần làm việc
n Xóa cơ sở dữ liệu
v Các kiểu bảng trong MySQL
Trang 3Xem các csdl hiện có trên server
v Cú pháp:
v Lệnh được dùng để kiểm tra csdl vừa tạo
v Giúp tránh tạo csdl mới trùng tên với csdl đã có hoặc
SHOW DATABASE;
Xem các csdl hiện có trên server
v Cú pháp:
v Lệnh được dùng để kiểm tra csdl vừa tạo
v Giúp tránh tạo csdl mới trùng tên với csdl đã có hoặc
Trang 4Lệnh tạo Cơ sở Dữ liệu mới
n Trong đó:
n database_name: tên của csdl mới
n [IF NOT EXISTS]: là thành phần tùy chọn giúp tránh lỗi tạo một csdl mới có tên trùng với tên csdl đã có
v Ví du: Tạo cơ sở dữ liệu với tên QLBANHANG
CREATE DATABASE [IF NOT EXISTS] database_name;
Lệnh tạo Cơ sở Dữ liệu mới
n Trong đó:
n database_name: tên của csdl mới
n [IF NOT EXISTS]: là thành phần tùy chọn giúp tránh lỗi tạo một csdl mới có tên trùng với tên csdl đã có
v Ví du: Tạo cơ sở dữ liệu với tên QLBANHANG
CREATE DATABASE [IF NOT EXISTS] database_name;
Trang 5Chọn cơ sở dữ liệu làm việc
n Trong đó:
n database_name: tên của csdl cần làm việc
v Ví du: Chọn cơ sở dữ liệu QLBANHANG
n database_name: tên của csdl cần làm việc
v Ví du: Chọn cơ sở dữ liệu QLBANHANG
Trang 6Xóa cơ sở dữ liệu
v Cú pháp:
n Trong đó:
n database_name: tên của csdl cần làm việc
v Chú ý:
n Câu lệnh sẽ xóa vĩnh viễn csdl của bạn ra khỏi server
n Csdl bị xóa không thể phục hồi
n Câu lệnh sẽ xóa vĩnh viễn csdl của bạn ra khỏi server
n Csdl bị xóa không thể phục hồi
v Ví dụ: xóa csdl QLBANHANG
DROP DATABASE [IF NOT EXISTS] database_name;
Trang 7Các kiểu bảng trong MySQL
v MySQL hỗ trợ nhiều kiểu bảng hoặc các máy lưu trữ khác nhau để giúp chúng ta tối ưu hóa CSDL.
v Kiểu của bảng được chỉ ra khi tạo một bảng mới.
v Mỗi khi một bảng được tạo, MySQL sẽ tạo ra một file frm để lưu trữ bảng và các định nghĩa cột Ngoài ra, tùy vào kiểu bảng, sử dụng index và loại dữ liệu mà MySQL còn tạo thêm một số file
khác.
v Nếu lúc tạo không chỉ ra kiểu bảng, kiểu mặc định của bảng là
MyISAM,
v MySQL chia bảng thành hai loại
n Các bảng có tính an toàn giao tác (transaction-safe tables): InnoDB và BDB
n Các bảng không có tính an toàn giao tác (not transaction-safe tables): HEAP, ISAM, MERGE, and MyISAM
Các kiểu bảng trong MySQL
v MySQL hỗ trợ nhiều kiểu bảng hoặc các máy lưu trữ khác nhau để giúp chúng ta tối ưu hóa CSDL.
v Kiểu của bảng được chỉ ra khi tạo một bảng mới.
v Mỗi khi một bảng được tạo, MySQL sẽ tạo ra một file frm để lưu trữ bảng và các định nghĩa cột Ngoài ra, tùy vào kiểu bảng, sử dụng index và loại dữ liệu mà MySQL còn tạo thêm một số file
khác.
v Nếu lúc tạo không chỉ ra kiểu bảng, kiểu mặc định của bảng là
MyISAM,
v MySQL chia bảng thành hai loại
n Các bảng có tính an toàn giao tác (transaction-safe tables): InnoDB và BDB
n Các bảng không có tính an toàn giao tác (not transaction-safe tables): HEAP, ISAM, MERGE, and MyISAM
Trang 8Các kiểu bảng trong MySQL
v Các thuận lợi của tính an toàn giao tác (transaction-safe tables)
n An toàn hơn Ngay cả khi MySQL bị treo hoặc có vấn đề về phần cứng, bạn vẫn có thể nhận được lại dữ liệu của bạn, hoặc tự động phục hồi từ bản sao lưu + bản ghi giao dịch (transaction log)
n Có thể gộp nhiều câu lệnh và thực hiện chúng một lần với lệnh COMMIT
n Có thể thực hiện ROLLBACK để bỏ qua các thay đổi (nếu đang không chạy chế độ commit tự động)
n Nếu như cập nhật không thành công, tất cả các thay đổi của sẽ được phục hồi (Với bảng không có tính an toàn giao tác, tất cả thay đổi đã xảy ra là vĩnh viễn)
v Các thuận lợi của không có tính an toàn giao tác (not safe tables)
transaction-n Nhanh hơn nhiều vì không có chi phí giao dịch
n Sẽ sử dụng không gian đĩa ít hơn khi không có phí giao dịch
n Sẽ sử dụng bộ nhớ ít hơn khi thực hiện cập nhật
Các kiểu bảng trong MySQL
v Các thuận lợi của tính an toàn giao tác (transaction-safe tables)
n An toàn hơn Ngay cả khi MySQL bị treo hoặc có vấn đề về phần cứng, bạn vẫn có thể nhận được lại dữ liệu của bạn, hoặc tự động phục hồi từ bản sao lưu + bản ghi giao dịch (transaction log)
n Có thể gộp nhiều câu lệnh và thực hiện chúng một lần với lệnh COMMIT
n Có thể thực hiện ROLLBACK để bỏ qua các thay đổi (nếu đang không chạy chế độ commit tự động)
n Nếu như cập nhật không thành công, tất cả các thay đổi của sẽ được phục hồi (Với bảng không có tính an toàn giao tác, tất cả thay đổi đã xảy ra là vĩnh viễn)
v Các thuận lợi của không có tính an toàn giao tác (not safe tables)
transaction-n Nhanh hơn nhiều vì không có chi phí giao dịch
n Sẽ sử dụng không gian đĩa ít hơn khi không có phí giao dịch
n Sẽ sử dụng bộ nhớ ít hơn khi thực hiện cập nhật
Trang 9Các kiểu bảng trong MySQL
v Bảng kiểu ISAM
n Có dung lượng tối đa là 4GB và không thể di chuyển
n Sử dụng B-Tree index
n Index được lưu trong tập tin ISM, dữ liệu lưu trong file ISD
n ISAM đã bị loại khỏi các phiên bản từ 5.x trở đi Nó được thay thế bởi MyISAM
v Bảng kiểu MyISAM
n Dung lượng của một bảng dữ liệu kiểu MyISAM phụ thuộc và hệ điều hành
n Bảng dữ liệu kiểu MyISAM có thể chuyển từ hệ thống này sang hệ thống khác (do dữ liệu của bảng lưu trữ ở dạng byte mức thấp)
n Index được lưu trong tập tin MYI, dữ liệu lưu trong file MYD
n Có thể tạo index trên các cột BLOB và TEXT Chấp nhận giá trị NULL trong cột
n Index được lưu trong tập tin ISM, dữ liệu lưu trong file ISD
n ISAM đã bị loại khỏi các phiên bản từ 5.x trở đi Nó được thay thế bởi MyISAM
v Bảng kiểu MyISAM
n Dung lượng của một bảng dữ liệu kiểu MyISAM phụ thuộc và hệ điều hành
n Bảng dữ liệu kiểu MyISAM có thể chuyển từ hệ thống này sang hệ thống khác (do dữ liệu của bảng lưu trữ ở dạng byte mức thấp)
n Index được lưu trong tập tin MYI, dữ liệu lưu trong file MYD
n Có thể tạo index trên các cột BLOB và TEXT Chấp nhận giá trị NULL trong cột
Index
n Có thể mở rộng đến 64 khóa trên một bảng (64 index), độ dài mỗi khóa có thể lên tới
1024 Bytes
Trang 10Các kiểu bảng trong MySQL
v Bảng kiểu InnoDB
n Có đặc tính an toàn giao tác và hỗ trợ khóa dòng (row level locking)
n Các khóa ngoại được hỗ trợ trong kiểu InnoDB
n Tập tin dữ liệu của bảng dữ liệu kiểu InnoDB có thể lưu trữ ở nhiều file khác nhau
Vì thế dung lượng của bảng InnoDB phụ thuộc vào dung lượng của ổ đĩa
n Tập tin dữ liệu của InnoDB có thể chuyển từ hệ thống này sang hệ thống khác
n Điểm bất lợi của InnoDB so với MyISAM là nó cần nhiều không gian lưu trữ
v Bảng kiểu BDB
n BDB cũng tương tự như InnoDB ở tính an toàn giao tác Nó hỗ trợ khóa trang (page level locking)
n Tập tin dữ liệu của BDB lại không thể chuyển đổi giữa các hệ thống
Các kiểu bảng trong MySQL
v Bảng kiểu InnoDB
n Có đặc tính an toàn giao tác và hỗ trợ khóa dòng (row level locking)
n Các khóa ngoại được hỗ trợ trong kiểu InnoDB
n Tập tin dữ liệu của bảng dữ liệu kiểu InnoDB có thể lưu trữ ở nhiều file khác nhau
Vì thế dung lượng của bảng InnoDB phụ thuộc vào dung lượng của ổ đĩa
n Tập tin dữ liệu của InnoDB có thể chuyển từ hệ thống này sang hệ thống khác
n Điểm bất lợi của InnoDB so với MyISAM là nó cần nhiều không gian lưu trữ
Trang 11Các kiểu bảng trong MySQL
v Bảng kiểu MERGE
n Bảng dữ liệu kiểu Merge được thêm vào để giải quyết vấn đề hạn chế của MyISAM
Nó biến nhiều bảng MyISAM thành một bảng dữ liệu vì thế những hạn chế về dung lượng của MyISAM không còn là trở ngại kĩ thuật nữa
v Bảng kiểu HEAP
n Bảng dữ liệu kiểu Heap được lưu trữ trong bộ nhớ Do đó, nó là kiểu bảng được thao tác nhanh nhất Do bởi cơ chế lưu trữ, dữ liệu sẽ bị mất đi khi máy tính không còn nguồn điện và đối khi nó còn có thể gây ra tình trạng tràn bộ nhớ đối với máy chủ csdl Các bảng Heap không hỗ trợ những trường có kiểu AUTO_INCREMENT,
BLOB và TEXT
Các kiểu bảng trong MySQL
v Bảng kiểu MERGE
n Bảng dữ liệu kiểu Merge được thêm vào để giải quyết vấn đề hạn chế của MyISAM
Nó biến nhiều bảng MyISAM thành một bảng dữ liệu vì thế những hạn chế về dung lượng của MyISAM không còn là trở ngại kĩ thuật nữa
v Bảng kiểu HEAP
n Bảng dữ liệu kiểu Heap được lưu trữ trong bộ nhớ Do đó, nó là kiểu bảng được thao tác nhanh nhất Do bởi cơ chế lưu trữ, dữ liệu sẽ bị mất đi khi máy tính không còn nguồn điện và đối khi nó còn có thể gây ra tình trạng tràn bộ nhớ đối với máy chủ csdl Các bảng Heap không hỗ trợ những trường có kiểu AUTO_INCREMENT,
BLOB và TEXT
Trang 12Liệt kê các bảng
v Để hiển thị các bảng có trong CSDL
SHOW TABLES;
v Để hiển thị các bảng có trong CSDL
Trang 13Tạo bảng
v Cú pháp:
n Mệnh đề IF NOT EXISTS giúp bạn gặp lỗi khi tạo ra một bảng mới trùng tên với một bảng khác đã có trong csdl
n Bạn có thể chỉ ra kiểu bảng dữ liệu dùng cho bảng dữ liệu của mình
CREATE TABLE [IF NOT EXISTS] table_name(
Tên_cột_1 Kiểu_dl [NOT NULL], Tên_cột_2 Kiểu_dl [NOT NULL],
n Bạn có thể chỉ ra kiểu bảng dữ liệu dùng cho bảng dữ liệu của mình
CREATE TABLE [IF NOT EXISTS] table_name(
Tên_cột_1 Kiểu_dl [NOT NULL], Tên_cột_2 Kiểu_dl [NOT NULL],
Tên_cột_N Kiểu_dl [NOT NULL]
) type=table_type
Trang 14Tạo bảng
v Ví dụ tạo bảng monhoc để lưu thông tin các môn học
CREATE TABLE vattu (
mavtu CHAR (4) NOT NULL ,
phantram int
) ENGINE=InnoDB DEFAULT CHARSET =latin1;
v Ví dụ tạo bảng monhoc để lưu thông tin các môn học
CREATE TABLE vattu (
mavtu CHAR (4) NOT NULL ,
phantram int
) ENGINE=InnoDB DEFAULT CHARSET =latin1;
Trang 15Tạo bảng
v Tạo bảng có cột tự động tăng
CREATE TABLE khoa (
) ENGINE=InnoDB DEFAULT CHARSET =latin1;
v Tạo bảng có cột tự động tăng
CREATE TABLE khoa (
) ENGINE=InnoDB DEFAULT CHARSET =latin1;
Trang 16Chỉnh sửa cấu trúc bảng
v Thêm cột mới vào bảng
v Ví dụ: Thêm cột hinhanh có kiểu varchar(250) vào bảng vattu
ALTER TABLE <Tên_bảng>
ADD [COLUMN] Tên_cột_1 Kiểu_dl [NOT NULL], ADD [COLUMN] Tên_cột_2 Kiểu_dl [NOT NULL],
ADD [COLUMN] Tên_cột_N Kiểu_dl [NOT NULL]
ALTER TABLE vattu
ADD hinhanh VARCHAR(250) CHARACTER SET utf8 NOT NULL
Chỉnh sửa cấu trúc bảng
v Thêm cột mới vào bảng
v Ví dụ: Thêm cột hinhanh có kiểu varchar(250) vào bảng vattu
ALTER TABLE <Tên_bảng>
ADD [COLUMN] Tên_cột_1 Kiểu_dl [NOT NULL], ADD [COLUMN] Tên_cột_2 Kiểu_dl [NOT NULL],
ADD [COLUMN] Tên_cột_N Kiểu_dl [NOT NULL]
ALTER TABLE vattu
ADD hinhanh VARCHAR(250) CHARACTER SET utf8 NOT NULL
Trang 17Chỉnh sửa cấu trúc bảng
v Xóa cột khỏi bảng
v Ví dụ: xóa cột diachi khỏi bảng sinhvien
ALTER TABLE <Tên_bảng>
DROP [COLUMN] Tên_cột_1, DROP [COLUMN] Tên_cột_2,
DROP [COLUMN] Tên_cột_N ;
ALTER TABLE sinhvien
DROP COLUMN diachi
Chỉnh sửa cấu trúc bảng
v Xóa cột khỏi bảng
v Ví dụ: xóa cột diachi khỏi bảng sinhvien
ALTER TABLE <Tên_bảng>
DROP [COLUMN] Tên_cột_1, DROP [COLUMN] Tên_cột_2,
DROP [COLUMN] Tên_cột_N ;
Trang 18Chỉnh sửa cấu trúc bảng
v Sửa cột (đổi tên cột, đổi kiểu dữ liệu)
v Ví dụ: Thay đổi tên cột Tenkh trong bảng KHOA thành tên
ten_khoa với kiểu dữ liệu varchar(200)
ALTER TABLE <Tên_bảng>
CHANGE [COLUMN] Tên_cũ Tên_mới Kiểu_DL [NOT NULL]
ALTER TABLE sinhvien
CHANGE COLUMN tenkh ten_khoa varchar(200) Not Null
Tên của cột muốn đổi
Chỉnh sửa cấu trúc bảng
v Sửa cột (đổi tên cột, đổi kiểu dữ liệu)
v Ví dụ: Thay đổi tên cột Tenkh trong bảng KHOA thành tên
ten_khoa với kiểu dữ liệu varchar(200)
ALTER TABLE <Tên_bảng>
CHANGE [COLUMN] Tên_cũ Tên_mới Kiểu_DL [NOT NULL]
ALTER TABLE sinhvien
CHANGE COLUMN tenkh ten_khoa varchar(200) Not Null
Tên mới
Trang 19Xóa bảng khỏi CSDL
v Cú pháp
v Ví dụ: Xóa bảng VATTU
DROP TABLE Tên_bảng
DROP TABLE VATTU
v Cú pháp
v Ví dụ: Xóa bảng VATTU
Trang 20Ràng buộc toàn vẹn là gì ?
v Ràng buộc toàn vẹn là các quy tắc kiểm tra dữ liệu nhằm đảm bảo tính đúng đắn cho dữ liệu khi thực hiện các thao tác cập
nhật(thêm, sửa, xoá).
v Thông thường có các ràng buộc như sau:
n Ràng buộc về miền giá trị của cột (thông thường áp dụng trên các cột dữ liệu kiểu số,kiểu thời gian,…)
n Ràng buộc toàn vẹn giữa các cột trong một bảng.
v Ví dụ
n Ngày thuê (phòng, sách) phải nhỏ hơn hoặc bằng ngày trả (phòng, sách)
n Chuyến bay: ngày giờ đi<ngày giờ đến, nơi đi khác nơi đến
n Ràng buộc toàn vẹn giữa các cột ở các bảng trong cùng mối quan hệ
n Ví dụ : Số lượng nhập phải nhỏ hơn hoặc bằng số lượng đặt
Ràng buộc toàn vẹn là gì ?
v Ràng buộc toàn vẹn là các quy tắc kiểm tra dữ liệu nhằm đảm bảo tính đúng đắn cho dữ liệu khi thực hiện các thao tác cập
nhật(thêm, sửa, xoá).
v Thông thường có các ràng buộc như sau:
n Ràng buộc về miền giá trị của cột (thông thường áp dụng trên các cột dữ liệu kiểu số,kiểu thời gian,…)
n Ràng buộc toàn vẹn giữa các cột trong một bảng.
v Ví dụ
n Ngày thuê (phòng, sách) phải nhỏ hơn hoặc bằng ngày trả (phòng, sách)
n Chuyến bay: ngày giờ đi<ngày giờ đến, nơi đi khác nơi đến
n Ràng buộc toàn vẹn giữa các cột ở các bảng trong cùng mối quan hệ
n Ví dụ : Số lượng nhập phải nhỏ hơn hoặc bằng số lượng đặt
Trang 21Các ràng buộc toàn vẹn
v Để đảm bảo tính toàn vẹn của dữ liệu trong csdl, MySQL cung cấp các CONSTRAINT sau:
v PRIMARY KEY và UNIQUE - Kiểm tra duy nhất
n Cho phép kiểm tra tính duy nhất của dữ liệu bên trong bảng, giúp ngăn cản người
dùng nhập trùng dữ liệu
Ví dụ: Số báo danh, mã nhân viên số, cmnd, biển kiểm soát…
v FOREIGN KEY…REFERENCES Kiểm tra tồn tại
n Cho phép kiểm tra tính tồn tại của dữ liệu, nhằm ngăn cản việc người dùng nhập một giá trị không có trong bảng khác
v CHECK và DEAFAULT - Kiểm tra miền giá trị
n Cho phép kiểm tra miền giá trị của dữ liệu bên trong bảng, nhằm ngăn cản việc
người dùng nhập một giá trị không nằm trong qui định
Các ràng buộc toàn vẹn
v Để đảm bảo tính toàn vẹn của dữ liệu trong csdl, MySQL cung cấp các CONSTRAINT sau:
v PRIMARY KEY và UNIQUE - Kiểm tra duy nhất
n Cho phép kiểm tra tính duy nhất của dữ liệu bên trong bảng, giúp ngăn cản người
dùng nhập trùng dữ liệu
Ví dụ: Số báo danh, mã nhân viên số, cmnd, biển kiểm soát…
v FOREIGN KEY…REFERENCES Kiểm tra tồn tại
n Cho phép kiểm tra tính tồn tại của dữ liệu, nhằm ngăn cản việc người dùng nhập một giá trị không có trong bảng khác
v CHECK và DEAFAULT - Kiểm tra miền giá trị
n Cho phép kiểm tra miền giá trị của dữ liệu bên trong bảng, nhằm ngăn cản việc
người dùng nhập một giá trị không nằm trong qui định
Trang 22n Thường dùng với PRIMARY KEY , DEFAULT
n Chỉ ra constraint bằng lệnh ALTER TABLE
n Thường dùng với CHECK , FOREIGN KEY, UNIQUE
v Các constraint được chỉ ra và gắn chúng vào bảng bằng hai cách sau:
n Chỉ ra constraint ngay khi tạo bảng (viết cùng với lệnh
CREATE TABLE )
n Thường dùng với PRIMARY KEY , DEFAULT
n Chỉ ra constraint bằng lệnh ALTER TABLE
n Thường dùng với CHECK , FOREIGN KEY, UNIQUE
Trang 23Tạo Constraint
v Cú pháp tạo các constraint khi tạo bảng.
CREATE TABLE<ten_bang>
( ten_cot_1Kieu_dl [not null],
ten_cot_2Kieu_dl Default Giá_trị_mặc_định,
[ constraint <ten _constraint> ] Primary Key ( ds_cot_lam_khoa_chinh),
[ constraint < ten_constraint >] Unique ( ds_cot ),
[ constraint < ten_constraint >] Check ( bieu_thuc ),
[ constraint < ten_constraint >] Foreign Key ( ten_cot_lam_khoa_ngoai )
Reference ten_bang(ds_ten_cot_khoa_chinh) [ ON DELETE {CASCADE|NO ACTION} ]
[ ON UPDATE {CASCADE|NO ACTION} ]
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
v Cú pháp tạo các constraint khi tạo bảng.
CREATE TABLE<ten_bang>
( ten_cot_1Kieu_dl [not null],
ten_cot_2Kieu_dl Default Giá_trị_mặc_định,
[ constraint <ten _constraint> ] Primary Key ( ds_cot_lam_khoa_chinh),
[ constraint < ten_constraint >] Unique ( ds_cot ),
[ constraint < ten_constraint >] Check ( bieu_thuc ),
[ constraint < ten_constraint >] Foreign Key ( ten_cot_lam_khoa_ngoai )
Reference ten_bang(ds_ten_cot_khoa_chinh) [ ON DELETE {CASCADE|NO ACTION} ]
[ ON UPDATE {CASCADE|NO ACTION} ]
) ENGINE=InnoDB DEFAULT CHARSET=latin1;