Bài Giảng Hệ Quản Trị Csdl Mysql

76 3 0
Tài liệu đã được kiểm tra trùng lặp
Bài Giảng Hệ Quản Trị Csdl Mysql

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Trang 1

Hệ Quản Trị CSDL MySQL

Trang 2

Tổng Quan

• Giới thiệu về MySQL• Làm việc với MySQL

• Kết nối với cơ sở dữ liệu MySQL

• Sử dụng phát biểu Select để hiển thị dữ liệu

Trang 3

Giới thiệu về MySQL

• MySQL là một hệ quản trị cơ sở dữ liệu mã nguồn mở, hoàn toàn miễn phí.• Có thể chạy trên nhiều hệ điều hành: Window, Linux,

• Cung cấp một hệ thống lớn các hàm tiện ích Thích hợp cho các ứng dụng internet.

• Phù hợp khi dùng với PHP được cộng đồng hỗ trợ.

• Dữ liệu lưu trữ trong MySQL dưới dạng các đối tượng được gọi là các bảng.

Kết nối tới Server MySQL

Trang 4

Cấu trúc ngôn ngữ MySQL

Trang 5

Cấu trúc ngôn ngữ MySQL

\0 Kí tự NUL (có mã ASCII là 0)\n Kí tự xuống dòng

\t Kí tự tab

\r Kí tự về đầu dòng

\' Kí tự ' được dùng để bao quanh một chuỗi kí tự\" Kí tự " được dùng để bao quanh một chuỗi kí tự\\ Kí tự \ được dùng để làm kí tự thoát

\% % là kí tự được dùng để đại diện cho một chuỗi kí tự bất kỳ\_ _ là kí tự được dùng đại diện cho một kí tự bất kỳ

Trang 6

Cấu trúc ngôn ngữ MySQL

• Giá trị NULL

– NULL có nghĩa là một giá trị chưa xác định hay giá trị không tồn tại trong csdl MySQL hỗ trợ NULL để biểu đạt khái niệm thông tin còn thiếu

• Tên csdl, tên bảng, tên cột, bí danh (alias)

– Tên csdl tối đa 64 kí tự, tuân theo qui tắc đặt tên thư mục ngoại trừ kí tự ‘.’ và ‘/’

– Tên bảng tối đa 64 kí tự, tuân theo qui tắc đặt tên file ngoại trừ kí tự ‘.’ và ‘/’– Tên cột tối đa 64 kí tự, cho phép sử dụng tất cả các kí tự

– Alias cho phép tối đa 255 kí tự và dùng tất cả các kí tự• Chú thích

– Để chú thích một dòng: sử dụng kí tự # hoặc –– Để chú thích một khối dòng đặt trong cặp /* và */

Trang 7

Các kiểu dữ liệu trong MySQL

float(size,d) Một số lớn với dấu chấm động size chỉ ra số các con số tối đa d chỉ số các

con số sau dấu chấm thập phân

double(size,d) Một số lớn với dấu chấm động size chỉ ra số các con số tối đa d chỉ số các

con số sau dấu chấm thập phân

decimal(size,d) Lưu trữ double như một chuỗi, cho phép cố định dấu chấm thập phân size chỉ ra số các con số tối đa d chỉ số các con số sau dấu chấm thập phân

Trang 8

Các kiểu dữ liệu trong MySQL

Textual Data TypesDescription

char(size)Lưu trữ chuỗi có độ dài cố định Có thể lưu trữ tới 255 kí tựvarchar(size)Lưu trữ chuỗi có độ dài biến động Có thể lưu trữ tới 255 kí tựtinytextLưu trữ một chuỗi có độ dài tối đa 255 kí tự

textLưu trữ một chuỗi với độ dài tối đa 65.535 kí tự

blobCho BLOBs (Binary Large OBjects) Lưu trữ tới 65.535 byte dữ liệumediumtextLưu trữ một chuỗi với độ dài tối đa 16.777.215 kí tự

mediumblobCho BLOBs (Binary Large OBjects) Lưu trữ tới 16.777.215 byte dữ liệulongtextLưu trữ một chuỗi có độ dài tối đa 4.294.967.295 kí tự

longblobCho BLOBs (Binary Large OBjects) Lưu trữ tới 4.294.967.295 byte dữ liệu• Dữ liệu dạng chuỗi

Trang 9

Các kiểu dữ liệu trong MySQL

DateBiểu dưới dạng YYYY-MM-DD (Từ '1000-01-01' tới '9999-12-31')Datetime Biểu dưới dạng YYYY-MM-DD HH:MM:SS

(Từ '1000-01-01 00:00:00' đến '9999-12-31 23:59:59')Time Biểu dưới dạng YYYY-MM-DD HH:MM:SSTừ -838:59:59' đến '838:59:59'

TimeStamp Biểu dưới dạng YYYY-MM-DD HH:MM:SS('1970-01-01 00:00:00' UTC)Year(2|4)1970 đến 2069

• Dữ liệu ngày tháng:

Trang 10

Các kiểu dữ liệu trong MySQL

• Dữ liệu ngày tháng:

Trang 11

Các phép toán trong MySQL

• Toán tử số học: +, -, *, /

• Toán tử so sánh: >, <, >=, <=, =, !=• Toán tử logic: and, or, not

• Phép toán BETWEEN…AND…• Phép toán IN, NOT IN

• Phép toán IFNULL:

– Ví dụ: IFNULL(11,‘’) =>0; IFNULL(1/0) =>1

• Toán tử LIKE

– Kí tự mở rộng dùng trong mẫu của toán tử LIKE

• Kí tự % : đại diện cho một chuỗi kí tự bất kì, kể cả chuỗi rỗng• Kí tự _ : đại diện cho một kí tự bất kỳ

Biểu_thức LIKE mẫu [ESCAPE ‘escape_char’]

Trang 12

Các phép toán trong MySQL

• Phép toán LIKE

escape-char: gồm kí tự ‘%’ đại diện cho một chuỗi kí tự bất kỳ, kí tự ‘-’ đại diện chi một kí tự bất kỳ

Trang 13

SELECT CHAR(77,121,83,81,'76');=>trả về “MySQL”

SELECT CONCAT(‘My’,’S’,’QL’);=>trả về “MySQL”

Trang 14

Các hàm xử lý chuỗi

• Hàm CONCAT_WS(separator,str1, str2, …, strN): Hàm trả về một chuỗi được ghép từ các str1,str2,strN, các chuỗi

ghép lại được phân cách bởi kí tự separator Nếu separator

Trang 15

Các hàm xử lý chuỗi

• Hàm UPPER(str): Hàm trả về chuỗi str được viết in hoa.

• Hàm LOWER(str): Hàm trả về chuỗi str được viết in thường.

• Hàm LTRIM(str): Bỏ khoảng trắng bên trái chuỗi.• Hàm RTRIM(str): Bỏ khoảng trắng bên phải chuỗi.

• Hàm LEFT(str,n): Hàm trả về một chuỗi gồm len kí tự được cắt từ bên trái chuỗi str.

• Hàm RIGHT(str,n): Hàm trả về một chuỗi gồm len kí tự được cắt từ bên phải chuỗi str.

• Hàm SUBSTRING(str,pos,[len]), SUBSTRING(str FROM pos [FOR

len]), MID(str,pos,len) Là các hàm trả về một chuỗi gồm len kí tự được cắt từ bắt đầu từ vị trí pos của chuỗi str.

• Hàm InSTR(str1, str2): Trả về vị trí bắt đầu của chuỗi str1 trong chuỗi str2.

Trang 16

Các hàm về thời gian trong MySQL

CURDATE(): trả về ngày hiện tại, giá trị được biểu diễn ở dạng 'YYYY-MM-DD' hoặc YYYYMMDD.

CURTIME(): trả về thời gian hiện tại, giá trị được biểu diễn ở dạng 'HH:MM:SS' or HHMMSS

SELECT CURDATE();

-> '2011-07-15'SELECT CURDATE()+0;-> '20110715'

SELECT CURTIME();

-> '23:50:26'

SELECT CURTIME()+0;-> '235026'

Trang 17

Các hàm về thời gian trong MySQL

• Hàm DATE(expr) trả về ngày tháng năm từ biểu thức expr có kiểu date, hay datetime.

• Hàm DATEDIFF(expr1,expr2): trả về khoảng thời gian giữa

hai ngày expr1 và expr2

• Hàm DAYNAME(date)trả về thứ của ngày

Trang 18

Các hàm về thời gian trong MySQL

Specifier Description

%a,%W, %w(Sun Sat), (Sunday Saturday), (0=Sunday 6=Saturday)

%b,%M(Jan Dec),(January December) %c, %mMonth, numeric (0 12)

%d, %eDay of the month, numeric (00 31), (0 31) %h,%H Hour (01 12), (00 23)

Trang 19

Các hàm về thời gian trong MySQL

• HOUR(time)• DAY(date)

• MINUTE(time)• MONTH(date)• NOW()

• SECOND(time)• TIME()

• YEAR()

Trang 20

Một số hàm khác

• Hàm IF

Giá_trị_trả_về_2)

– Giải thích: nếu biểu thức điều_kiện đúng (tức là

điều_kiện khác 0 hoặc khác NULL) thì hàm IF trả về giá trị giá_trị_trả_về_1 Trong trường hợp ngược lại, hàm IF trả về giá trị giá_trị_trả_về_2

• Hàm IFNULL(biểu_thức, giá_trị_trả_về_1)

Trang 21

Tạo Cơ sở dữ liệu và Tạo bảng

Trang 22

Mục tiêu

• 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

Trang 23

Xem các csdl hiện có trên server

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

Trang 24

Lệnh tạo Cơ sở Dữ liệu mới

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

Trang 25

Chọn cơ sở dữ liệu làm việc

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

Trang 26

Xóa cơ sở dữ liệu

Trang 27

Các kiểu bảng trong MySQL

• 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

Trang 28

Các kiểu bảng trong MySQL

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

Trang 29

Các kiểu bảng trong MySQL

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

Trang 30

Các kiểu bảng trong MySQL

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

Trang 31

Các kiểu bảng trong MySQL

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

Trang 32

Liệt kê các bảng

• Để hiển thị các bảng có trong CSDL

SHOW TABLES;

Trang 34

Tạo bảng

• 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) CHARACTERSET utf8 NOT NULL, dvtinh VARCHAR(20) CHARACTERSET utf8 NOT NULL, phantram int

) ENGINE=InnoDBDEFAULTCHARSET=latin1;

Trang 35

Tạo bảng

• Tạo bảng có cột tự động tăng

CREATE TABLE khoa (

makh INTNOT NULL AUTO_INCREMENT,

tenkh VARCHAR(100) CHARACTERSET utf8 NOTNULL,) ENGINE=InnoDBDEFAULTCHARSET=latin1;

Trang 36

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

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

ALTERTABLE vattu

Trang 37

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

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

DROP COLUMN diachi

Trang 38

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

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

CHANGE COLUMN tenkh ten_khoa varchar(200) Not Null

Tên của cột

Trang 39

Xóa bảng khỏi CSDL

• Cú pháp

• Ví dụ: Xóa bảng VATTU

DROP TABLE Tên_bảng

Trang 40

Ràng buộc toàn vẹn là gì ?

• 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

Trang 41

Các ràng buộc toàn vẹn

• Để đả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.

Trang 43

Tạo Constraint

• Cú pháp tạo các constraint khi tạo bảng.

CREATETABLE <ten_bang>

( ten_cot_1 Kieu_dl[not null],

ten_cot_2 Kieu_dl Default Giá_trị_mặc_định,

[constraint <ten _constraint>] PrimaryKey (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) [ONDELETE {CASCADE|NOACTION}]

[ONUPDATE {CASCADE|NOACTION}]

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Trang 44

Tạo Constraint

• Ví dụ tạo các constraint khi tạo bảng.

CREATE TABLE DONDH

(sodhchar(4)not null ,

ngaydhdatetimenot nullDEFAULT CURDATE(),

PRIMARYKEY(sodh)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE CTDONDH

(sodhchar(4)not null REFERENCES DONDH(sodh),

mavtuchar(4)not nullREFERENCES VATTU(mavtu),sldatint CHECK(sldat>0),

PRIMARYKEY(sodh,mavtu)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Trang 45

Sử dụng Constraint

• Cú pháp sử dụng ALTER TABLE để chỉ ra các CONSTRAINT

ALTERTABLE <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) [ONDELETE {CASCADE|NOACTION}]

[ONUPDATE {CASCADE|NOACTION}]

ALTERTABLE <ten_bang>

ALTER Tên_cột SET DEFAULT ‘Giá_trị’

Cú pháp thêm constraint DEFAULT cho cột:

Trang 46

Xóa Constraint

• Xóa bỏ constraint

– Xóa Primary Key

– Xóa constraint Unique

– Xóa constraint Foreign Key

ALTERTABLE <ten_bang>

DROP PRIMARY KEY

ALTERTABLE <ten_bang>

ALTERTABLE <ten_bang>

Trang 47

Xóa Constraint

• Xóa bỏ constraint

– Xóa constraint Check

– Xóa constraint Default

ALTERTABLE <ten_bang>

ALTERTABLE <ten_bang>

Trang 48

Truy vấn dữ liệu

Trang 49

Câu lệnh truy vấn SELECT

• Dùng để thực hiện tổng hợp dữ liệu được lưu trữ trong một hay nhiều bảng thành một tập kết quả

• Dữ liệu trong tập kết có thể được lọc theo điều kiện và sắp xếp theo nhu cầu của người sử dụng.

• Truy vấn select còn được dùng để thực hiện việc tính toán thống kê trên tập dữ liệu kết quả trả về của nó.

Trang 51

Truy vấn Select từ nhiều bảng

• Để lấy dữ liệu từ nhiều bảng, chúng ta có thể dùng SELECT

FROM kết hợp với mệnh đề JOIN để kết nối hai bảng có quan hệ

với nhau.• Cú pháp:

SELECT * | Danh_sách_các_cột

FROM Tên_bảng_1 INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] JOIN Tên_bang_2 ON Điều_kiện_ghép_nối;

Trang 52

Truy vấn Select từ nhiều bảng

• Trong đó:

– INNER JOIN: Là phép ghép nối không phân biệt thứ tự giữa hai bảng, điều kiện ghép nối được chỉ ra sau từ khóa ON Thông thường điều kiện ghép nối sau từ khóa ON là điều kiện so sánh bằng

– LEFT JOIN: Ưu tiên lấy toàn bộ các dòng trong Ten_bang_1 và nối với các dòng trong Ten_bang_2 thỏa mãn Điều_kiện_kết_nối

– RIGHT JOIN: Ngược lại LEFT JOIN

– FULL JOIN: Lấy các dòng có Ten_bang_1 nhưng không có trong

Ten_bang_2, các dòng có Ten_bang_2 nhưng không có Ten_bang_1 và các dòng thỏa mãn điều kiện kết nối

– Điều kiện ghép nối : gần giống điều kiện của mệnh đề Where

Ngày đăng: 19/05/2024, 14:41

Tài liệu cùng người dùng

Tài liệu liên quan