Tải bản đầy đủ (.ppt) (27 trang)

MySQL tạo cơ sở dữ liệu và tạo bảng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (788.23 KB, 27 trang )


Làm việc với cơ sở dữ liệu MySQL
– Liệt kê các cơ sở dữ liệu trên server
– Tạo cơ sở dữ liệu
– Chọn cơ sở dữ liệu cần làm việc
– Xóa cơ sở dữ liệu.

Các kiểu bảng trong MySQL

Làm việc với bảng
– Liệt kê tất cả các bảng có trong cơ sở dữ liệu
– Tạo bảng

Chỉnh sửa cấu trúc bảng

Xóa bảng

Các ràng buộc toàn vẹn dữ liệu

Cú pháp:

Lệnh được dùng để kiểm tra csdl vừa tạo

Giúp tránh tạo csdl mới trùng tên với csdl đã có
hoặc
SHOW DATABASE;

Cú pháp

Trong đó:



database_name: tên của csdl mới

[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í du: Tạo cơ sở dữ liệu với tên QLBANHANG
CREATE DATABASE [IF NOT EXISTS] database_name;
CREATE DATABASE QLBANHANG;

Cú pháp

Trong đó:

database_name: tên của csdl cần làm việc

Ví du: Chọn cơ sở dữ liệu QLBANHANG
USE database_name;
USE QLBANHANG;

Cú pháp:

Trong đó:

database_name: tên của csdl cần làm việc

Chú ý:
– Câu lệnh sẽ xóa vĩnh viễn csdl của bạn ra khỏi server

Csdl bị xóa không thể phục hồi


Ví dụ: xóa csdl QLBANHANG
DROP DATABASE [IF NOT EXISTS] database_name;
USE QLBANHANG;

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.

Kiểu của bảng được chỉ ra khi tạo một bảng mới.

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.

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,

MySQL chia bảng thành hai loại

Các bảng có tính an toàn giao tác (transaction-safe tables): InnoDB và BDB

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 thuận lợi của tính an toàn giao tác (transaction-safe tables)
– 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).
– 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.


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

Các thuận lợi của không có tính an toàn giao tác (not transaction-safe tables)

Nhanh hơn nhiều vì không có chi phí giao dịch.

Sẽ sử dụng không gian đĩa ít hơn khi không có phí giao dịch.
– Sẽ sử dụng bộ nhớ ít hơn khi thực hiện cập nhật.

Bảng kiểu ISAM
– Có dung lượng tối đa là 4GB và không thể di chuyển.

Sử dụng B-Tree index.

Index được lưu trong tập tin .ISM, dữ liệu lưu trong file .ISD

ISAM đã bị loại khỏi các phiên bản từ 5.x trở đi. Nó được thay thế bởi
MyISAM.

Bảng kiểu MyISAM
– Dung lượng của một bảng dữ liệu kiểu MyISAM phụ thuộc và hệ điều hành.

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


Index được lưu trong tập tin .MYI, dữ liệu lưu trong file .MYD
– 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.
– 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

Bảng kiểu InnoDB

Có đặc tính an toàn giao tác và hỗ trợ khóa dòng (row level locking).
– Các khóa ngoại được hỗ trợ trong kiểu InnoDB.

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

Đ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ữ.

Bảng kiểu BDB
– 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).
– Tập tin dữ liệu của BDB lại không thể chuyển đổi giữa các hệ thống.

Bảng kiểu MERGE
– 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.

Bảng kiểu HEAP
– 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.

Để hiển thị các bảng có trong CSDL
SHOW TABLES;

Cú pháp:

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

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

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,
tenvtu VARCHAR(100) CHARACTER SET utf8 NOT NULL,
dvtinh VARCHAR(20) CHARACTER SET utf8 NOT NULL,
phantram int
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Tạo bảng có cột tự động tăng
CREATE TABLE khoa (
makh INT NOT NULL AUTO_INCREMENT,
tenkh VARCHAR(100) CHARACTER SET utf8 NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Thêm cột mới vào bảng

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

Xóa cột khỏi bảng

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

Sửa cột (đổi tên cột, đổi kiểu dữ liệu)

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
Tên mới

Cú pháp

Ví dụ: Xóa bảng VATTU
DROP TABLE Tên_bảng
DROP TABLE VATTU

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á).

Thông thường có các ràng buộc như sau:
– 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,…)
– Ràng buộc toàn vẹn giữa các cột trong một bảng.


Ví dụ

Ngày thuê (phòng, sách) phải nhỏ hơn hoặc bằng ngày trả (phòng, sách)
– Chuyến bay: ngày giờ đi<ngày giờ đến, nơi đi khác nơi đế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ệ.

Ví dụ : Số lượng nhập phải nhỏ hơn hoặc bằng số lượng đặt

Để đảm bảo tính toàn vẹn của dữ liệu trong csdl, MySQL cung cấp các
CONSTRAINT sau:

PRIMARY KEY và UNIQUE - Kiểm tra duy nhất
– 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…

FOREIGN KEY…REFERENCES Kiểm tra tồn tại
– 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.

CHECK và DEAFAULT - Kiểm tra miền giá trị

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 constraint được chỉ ra và gắn chúng vào
bảng bằng hai cách sau:


Chỉ ra constraint ngay khi tạo bảng (viết cùng với lệnh
CREATE

TABLE
)

Thường dùng với
PRIMARY

KEY
,
DEFAULT
– Chỉ ra constraint bằng lệnh
ALTER

TABLE

Thường dùng với
CHECK
,
FOREIGN
KEY,
UNIQUE

Cú pháp tạo các constraint khi tạo bảng.
CREATE TABLE <ten_bang>
( ten_cot_1 Kieu_dl [not null],
ten_cot_2 Kieu_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í dụ tạo các constraint khi tạo bảng.
CREATE TABLE DONDH
( sodh char(4) not null ,
ngaydh datetime not null DEFAULT CURDATE(),
mancc char(3),
PRIMARY KEY(sodh)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE CTDONDH
( sodh char(4) not null REFERENCES DONDH(sodh),
mavtu char(4) not null REFERENCES VATTU(mavtu),
sldat int CHECK(sldat>0),
PRIMARY KEY(sodh,mavtu)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Cú pháp sử dụng ALTER TABLE để chỉ ra các CONSTRAINT
ALTER TABLE <ten_bang>
ADD
[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}]
ALTER TABLE <ten_bang>

ALTER Tên_cột SET DEFAULT ‘Giá_trị’
Cú pháp thêm constraint
DEFAULT
cho cột:

×