Quản Lý Cơ Sở Dữ Liệu với MySQL

MỤC LỤC

Hàm LOCATE(substr,str,[pos]) , POSITION(substr IN str) Trả về vị trí xuất hiện đầu tiên của chuỗi con substr trong

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

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.

Các kiểu bảng trong MySQL

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

– 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). – Có đặc tính an toàn giao tác và hỗ trợ khóa dòng (row level locking).

– Tập tin dữ liệu của bảng dữ liệu kiểu InnoDB có thể lưu trữ ở nhiều file. – 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 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. 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.

DROP [COLUMN] Tên_cột_N ;

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

Truy vấn dữ liệu

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

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

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

Mệnh đề lọc dữ liệu WHERE

– Khi dùng giá trị kiểu ngay so sánh với cột kiểu datetime, giá trị đó được đặt trong cặp dấu nháy đơn ‘’ và nên nhập theo dạng năm- tháng-ngày. – Sử dụng phép toán Like khi field được chọn để lọc dữ liệu là kiểu chuỗi. Like là phép toán so sánh gần đúng và luôn được sử dụng với kí tự đại diện như % (thay thế cho một chuỗi), _ (thay thế cho một kí tự),.

Mệnh đề ORDER BY

• Ví dụ: Đưa ra danh sách sinh viên sắp xếp tên từ A->Z, và học bổng theo chiều giảm dần.

Mệnh đề GROUP BY

– Cho biết khoa nào có đông sinh viên nhất, gồm Mã khoa, Tên khoa, Tổng số sinh viên. SELECT Top 1 With ties Khoa.Makh,Tenkhoa, Count(*) As TongSoSV FROM Khoa Inner Join SinhVien On Khoa.makh=SinhVien.makh. SELECT Top 3 Hosv+‘ ’+ Tensv as Hoten, Tenkh, tenmh, diem,monhoc.mamh FROM (Khoa Inner Join SinhVien On Khoa.makh=SinhVien.makh).

Inner join (Monhoc inner join Ketqua On ketqua.mamh=Monhoc.mamh) On Ketqua.masv=sinhvien.masv.

Mệnh đề HAVING

– Liệt kê các sinh viên thi nhiều hơn 4 môn, gồm mã sinh viên, tên sinh viên, số môn thi. SELECT Sinhvien.Masv, hosv+ ' ' + Tensv as Hoten, count(*) as SoMonthi FROM SinhVien Inner Join Ketqua On ketqua.masv=SinhVien.masv. – Cho biết trung bình điểm thi của từng môn, chỉ lấy môn nào có trung bình điểm thi lớn hơn 6.

FROM monhoc INNER JOIN Ketqua ON Monhoc.mamh=Ketqua.mamh GROUP BY monhoc.Mamh, Tenmh.

Mệnh đề UNION

• Lệnh thường được ứng dụng khi muốn tạo bảng sao lưu dữ liệu để kiểm thử (test).

WHERE Điều_kiện_lọc

– Với cột khóa ngoại: Giá trị cho cột khóa ngoại phải tồn tại ở cột khóa chính trong bảng liên quan.