Như đã nói ở bài trước: tạo và quản lý cơ sở dữ liệu bằng phpMyadmin thay vì thực hiện chúng trên giao diên thì bây giờ ta sẽ tìm hiểu một cách nữa là làm trên command line vì có một số chuyện không thể giải quyết ở giao diện.
1. Giới thiệu:
Là ngôn ngữ để “thế giới bên ngoài” (PHP, PHPMyAdmin, MySql Command line, Navicat) tương tác với Mysql server nhằm :
- Tạo/xoá database, import/export dữ liệu
- Tạo/xoá/chỉnh table
- Thêm/chỉnh/xoá/chỉnh dữ liệu trong các table
- …
Các câu lệnh quản lý csdl từ command line tổng quát:
- show databases; //Hiện list các database trong mysql server
- use TênDatabase; // chọn database hiện hành
- show tables; // Hiện list các table trong database hiện hành
- create database bcdonline; //Tạo database tên bcdonline
Ngôn ngữ SQL:
Tạo bảng dữ liệu:
<!--
CREATE TABLE <TenTable> (
<TenField1> <kiểu dữ liệu> (<FieldSize>) | NULL | NOT NULL | AUTO_INCREMENT,
<TenField2> <kiểu dữ liệu> (<FieldSize>) | NULL | NOT NULL ,
...
PRIMARY KEY (<TenField>) ,
UNIQUE (<TenField>),
FOREIGN KEY (<TenField>) REFERENCE <TenTable>
);
-->
Kiểu dữ liệu:
- Kiểu số nguyên: INT, INTEGER
- Số thực: FLOAT, DOUBLE
- Chuỗi: CHAR, VARCHAR
- Logic: BOOLEAN
- Ngày tháng: DATE, TIME, DATETIME
Sau Primary Key, UNIQUE có dấu phẩy.
UNIQUE là field không là khóa chính nhưng có các giá trị không trùng nhau.
Foreign key nhiều record thì có dấu phẩy phía sau.
AUTO_INCREMENT: tự động tăng
Ví dụ: Tạo table trong database QuanLyTinTuc
<!-- CREATE TABLE LOAISP ( idLoai INT NOT NULL AUTO_INCREMENT, Ten VARCHAR(255) NOT NULL, ThuTu INT NULL, PRIMARY KEY (idLoai) ); -->
2. Xem cấu trúc 1 table
<!--
DESCRIBE <TenBang> hoặc
DESC <TenBang>
-->
Ví dụ:
DESC LoaiSP;
3.Thêm dữ liệu vào bảng:
Cách 1:
<!--
INSERT INTO <TenBang> VALUES (giaTri1, giatri2,...)
-->
Các giá trị sẽ điền các giá trị vào các field theo đúng thứ tự xuất hiện trong bảng. Fied làm khoá chính để chuỗi trống.
Ví dụ:
INSERT INTO LoaiSP VALUES ('', 'NoKia',2);
Cách 2:
<!--
INSERT INTO <TenBang> (TenField1, TenField2,…) VALUES (giaTri1, giatri2,…)
-->
Thứ tự các field có thể không nhất thiết giống như thứ tự các field trong bảng.
Có thể không cần ghi mọi field.
Thứ tự dữ liệu phải tương ứng với các field liệt kê phía trước.
Ví dụ:
Thêm 1 Loại SP mới:
INSERT INTO LoaiSP (thutu, ten) VALUES ( 3, "Sony");
4. Xem hết dữ liệu trong 1 table:
<!--
SELECT * <TenBang> ;
-->
Ví dụ:
SELECT * FROM LoaiSP;
5. Chỉnh sửa dữ liệu:
<!--
UPDATE <tentable> SET
Tenfield1=giatri1, TenField2=giatri2
WHERE <ĐiểuKiện>
-->
Phần where có thể bỏ nhưng nguy hiểm vì nó có thể chỉnh tất cả dữ liệu trong bảng của bạn theo 1 dòng duy nhất khi không gàng buộc bởi where.
Ví dụ:
UPDATE LoaiSP SET ten='Motorola' where idLoai=1
6. Xóa dữ liệu:
<!--
DELETE FROM <TenBang> WHERE <ĐiềuKiện>
-->
Phần where có thể bỏ nhưng nguy hiểm nó có thể xóa cả dữ liệu trong bảng của bạn.
Ví dụ:
DELETE FROM LoaiSP where idLoai=1
Tiếp đến chúng ta sẽ thực hành nha các bạn: Mời bạn downlads webtintuc data này về import vào MySQL để thực hành.
Truy vấn dữ liệu:
Cú pháp chung:
<!--
SELECT * | < TenField1,TenField2,... >
From < TenBang1, TenBang2, ... >
WHERE < Điều kiện kết bảng> | <Điều kiện lọc >
ORDER BY < TênField1 ASC|DESC, TenField2 ASC/DESC , ... > // Điều kiện sắp xếp
GROUP BY < TenField1, TenField2, ... > // Điều kiện phân nhóm
HAVING < Điều kiện lọc theo nhóm >
-->
Phần Select, From là bắt buộc. Phần where order by, group by, having là không bắt buộc
WHERE điều kiện lọc dữ liệu và điều kiện kết bảng
ORDER BY : sắp xếp dữ liệu theo field1, field 2.
Order by phải nằm sau where
Câu lênh select đơn giản:
Chỉ có phần select from. Có thể có thêm where
Ví dụ:
<!--
SELECT idLT, Ten, AnHien FROM Loaitin ; // Lấy idLT, Ten, AnHien trong bảng loại tin
SELECT idLT, Ten FROM LoaiTin WHERE AnHien=1; // Lấy idLT, Ten trong bảng loại tin có AnHien = 1
SELECT idTin, Ngay, TieuDe FROM Tin WHERE month(Ngay)=3; //Lấy idTin, Ngay, TieuDe trong bảng tin có tháng upload = 3
SELECT idTin, Ngay, TieuDe FROM Tin WHERE Ngay=date('2008-4-3'); // Lấy idTin, Ngay, TieuDe trong bảng tin có ngày update là 2008-4-3
SELECT idTin, Ngay, TieuDe FROM Tin WHERE Ngay=curdate(); // Lấy idTin, Ngay, TieuDe trong bảng tin có ngày update là hôm nay
-->
Lấy các tin trong ngày hôm nay (Bạn phải chỉnh đồng hồ của máy lại thành 1 ngày có tin trong database thì mới thấy tin)
SELECT idTin, Ngay, TieuDe FROM Tin WHERE month(Ngay)=month(curdate());
Lấy các tin trong tháng hiện tại (Bạn phải chỉnh đồng hồ của máy lại thành tháng có tin trong database thì mới thấy tin)
Câu lệnh sắp xếp dữ liệu:
Có phần select, from, order.
Ví dụ:
<!--
SELECT idLT, Ten, ThuTu FROM Loaitin ORDER BY Ten ASC; // Sắp xếp theo tên
SELECT * FROM TheLoai WHERE AnHien=1 ORDER BY ThuTu ASC; // Lấy tất cả từ bảng TheLoai, hiện và sắp xếp theo cột thứ tự tăng dần
SELECT idTin, Ngay,TieuDe FROM Tin ORDER BY Ngay DESC; // Lấy mọi tin , tin mới hiện trước
SELECT idTin, Ngay, TieuDe, idLT FROM Tin WHERE idLT=1 ORDER BY Ngay DESC; // Lấy mọi tin trong loại thể thao , tin mới hiện trước
SELECT idTin, Ngay,TieuDe FROM Tin ORDER BY Ngay DESC limit 0,10; // Lấy 10 tin mới nhất
SELECT idTin, SoLanXem,TieuDe FROM Tin ORDER BY SoLanXem DESC limit 0,10; // Lấy 10 tin xem nhiều nhất
SELECT idTin, SoLanXem,TieuDe FROM Tin WHERE idLT=9 ORDER BY SoLanXem DESC limit 0,10; // Lấy 10 tin xem nhiều nhất trong loại tin xă hội
-->
Ghi chú:
Update tin set SoLanXem=SoLanXem+1 where idTin=2; // Cập nhật số lần xem tin số 2
Câu lệnh phân nhóm:
Có dùng thêm phần group by, thường kết hợp với các hàm tính toán cho từng nhóm: SUM, MAX, MIN, AVG, COUNT
Ví dụ:
<!--
SELECT idUser, count(idTin) as SoTin FROM tin GROUP BY idUser; SELECT idSK, count(idTin) as SoTin FROM tin GROUP BY idSK;
-->
Nếu có lọc dữ liệu dựa theo các hàm tính toán thì điều kiện lọc sẽ đặt trong HAVING
Ví dụ:
<!--
SELECT idUser, count(idTin) as SoTin FROM tin GROUP BY idUser HAVING count(idTin) >=10
-->
Câu lệnh select tìm kiếm:
% : đại diện cho nhiều ký tự
_ : đại diện cho đúng 1 ký tự
Ví dụ:
<!--
SELECT idTin, Ngay, TieuDe FROM Tin where TieuDe like 'C%'
// Tìm bắt đầu bằng chữ C
SELECT Username, HoTen, Email FROM Users where Username like 't_'
// Tìm bắt đầu bằng t và một ký tự nào đó bất kỳ
-->
Câu lệnh select có kết bảng
Ví dụ :
<!--
SELECT idTin, Tin.idSK, Mota , TieuDe
FROM Tin, SuKien
WHERE Tin.idSK= SuKien.idSK
ORDER BY idSK ASC
//Lấy những tin có trong bảng tin và nhưng tin đó có trong bảng sự kiện đồng thời sắp xếp tăng dần theo idSK
SELECT idTin, Users.Username, Loaitin.Ten, TieuDe
FROM Tin, Users, LoaiTin
WHERE Tin.idUser= Users.idUser AND Tin.idLT=LoaiTin.idLT
Order By Ngay Desc Limit 0,10
// Lấy 10 tin trong bảng tin theo loại tin và sắp xếp theo ngày giảm dần (tin mới)
-->
Câu lệnh select lồng nhau:
Ví dụ:
<!--
SELECT idtin, Ngay, TieuDe FROM tin WHERE Ngay >= All (SELECT Ngay FROM Tin)
// Lấy tin mới nhất
SELECT idLT, Ten FROM loaitin WHERE idLT in (SELECT idLT FROM Tin group by idLT)
// Lấy danh sách các loại tin có tin
-->
Select ngẫu nhiên:
<!--
SELECT idTin, TieuDe from tin order by rand() limit 0,3; // Lấy 3 tin ngẫu nhiên
SELECT idBC, Mota from BinhChon order by rand() limit 0,1; // Lấy 1 câu hỏi ngẫu nhiên
-->
Kết luận: Trong bài này bạn sẽ hệ thống lại các kiến thức về truy vấn bằng câu lệnh, rõ ràng áp dụng rất nhiều trong lúc chúng ta lập trình web. Chúc các bạn thành công!
Bình luận (0)
Add Comment