PDA

View Full Version : Khái Quát Về Cơ Sở Dữ Liệu (Database) Và SQL , Phục vụ cho lỗi SQL Injection



vietanh143
19-10-2007, 08:36 PM
Database And Structure Query Language_Basic For Newbie
Khái Quát Về Cơ Sở Dữ Liệu (Database) Và Khái Quát về một số câu lệnh SQL
Khá thích hợp cho các bạn trước khi học về SQL injection

*Đối tượng : Only For Newbie! Viết thế nào cho mấy bạn newbie hiểu bây giờ ^_^ , Bài viết hy vọng sẽ tạo cho các bạn cái nhìn khái quát , nếu bạn đọc mà không hiểu gì thì đừng ngại rồi càng đọc bạn sẽ không hiểu gì đâu ^_^ nhưng khi đọc xong thì lại thấy hiểu ^_^ hí hí còn bạn nào muốn đi sâu thì có thể đọc thêm nhiều tài liệu khác rất bổ ích
*Bố Cục : Bài viết chia làm 2 phần chính
** Khái quát vê Database : Phần này sẽ giúp cho bạn một cái nhìn tổng quát về cơ sở dữ liệu
**Khái quát về SQL : Phần này sẽ nói về những câu lệnh căn bản SQL sẽ khá thích hợp cho newbie trước khi đọc các bài về SQL injection
*Note: Cả hai phần trên sẽ khá tốt cho các bạn trước khi các bạn tìm hiểu về kiểu tấn công SQL injection he he he hack mau lên sắp sang 2006 rồi
*Tài liệu tham khảo: Để có được bài viết này tôi có tham khảo từ cuốn tài liệu nhỏ của tác giả: Lâm Văn Huy và cũng chính tác giả đã hướng dẫn tôi đã cung cấp cho tôi một số quan điểm dễ hiểu giành cho những bạn mới học. Tôi xin một lần nữa được cảm ơn tác giả Lâm Văn Huy!
*Chú ý quan trọng nhất: Sẽ có rất nhiều những sai sót trong bài viết của tôi , tôi thiết tha mong các bạn đóng góp và cho ý kiến , bởi nếu được như vậy , chúng ta sẽ sửa sai được cho nhau và tạo cho nhau những kiến thức vững chắc và hoàn chỉnh hơn. Tôi xin cảm ơn các bạn !
*-*-*-*-*-*-*(^_^)*-*-*-*-*-*
---------------------------------------------------------------------------------------------------------------------------------

…..
Tôi nghĩ anh em nên tìm hiểu đôi chút về Cơ sở dữ liệu , tìm hiểu một chút về SQL,một số lệnh căn bản SQL trước khi sử dụng kiểu tấn công SQL injection mặc dù thực ra thì không cần bài này thì bất kỳ ai vẫn có thể tấn công bằng SQl injection được (bằng cách copy các dòng lệnh đã dc truyền lại ở đâu đó nhưng như thế sẽ hết sức thụ động ) nếu anh em nắm một số lệnh căn bản này , anh em sẽ càm thấy hứng thú tìm hiểu về SQL điều này sẽ khiến cho anh em sẽ có nhiều sáng tạo hơn trong việc sử dụng cách tấn công bằng SQL injection .
Và dĩ nhiên thì tôi muốn chúng ta trao đổi : anh em thì post bài còn tôi thì sẽ share OK ! Đơn giản tôi đã bỏ công sức viết ra thì anh em cũng phải bỏ công sức ra post .
Và cũng hy vọng bài này cũng góp một chút kiến thức để các bạn có thể hình dung ra bộ môn ”Phân tích và thiết kế hệ thống”
*-*-*-*-*-*-*-*-* Phần 1: Khái quát về Database *-*-*-*-*-*-*-*-*-*

* Và dĩ nhiên bao giờ câu hỏi sẽ là Cơ sở Dữ liệu là gì ?
Theo quan điểm của tôi
Cơ sở dữ liệu (Database): Là một tập hợp có cấu trúc các thông tin dữ liệu được tổ chức lưu trữ và xử lý trên máy vi tính. Thông qua đó cho phép người sử dụng có thể tổ chức lưu trữ và truy xuất bất kỳ thông tin nào theo yêu cầu .
**Cách tổ chức Database (Tôi viết tắt là DB : Vậy khi nào nhìn thấy chử DB thì hiểu ngay đó là : Cơ sở dữ liệu ) : DB được tổ chức tuân thủ theo các quy tắc về mô hình dữ liệu , quy tắc chuẩn hoá dữ liệu, và được tổ chức một cách logic , ko thiếu , ko thừa nhằm mục đích đáp ứng dc hầu hết các thông tin dữ liệu theo yêu cầu thực tế!
Nhưng nói cho dể hiểu thì ngay cả một file text, *txt cũng là DB . Tôi lấy 1 một ví dụ như là: Tôi viết một chương trình Chat qua mạng LAN và giả sử tôi có một thư mục public là nơi mọi máy đều có thể truy cập, đọc ghi, đươc chẳng hạn : Thì tất cả những nội dung Chat sẽ được lưu trữ ở đâu ?
Tôi sẽ lưu trữ toàn bộ nội dung Chat vào trong 1 file Chat.txt chẳng hạn và file này sẽ được để trong thư mục public ! Nhự vậy khi tôi Chat : Hello !
Thì nội dung này sẽ được cất trữ trong file Chat.txt , và sẽ xuất ra , hiển thị ra cho máy khác thấy và khi các máy khác chat : Chao ca nha` ! thì nội dung này sẽ dc ghi đè lên và đựợc lưu trữ tại tập tin Chat.txt. Hy vọng bạn đã hiểu một tý! Và như vậy tôi có thể nói:
“Chúng ta có thể viết một chương trình chat qua mạng LAN , qua một thư mục mà mọi máy có thể truy cập đọc ghi được ,và có Database đặt tại thư mục mà mọi máy đều có thể thực thi, đọc ghi đó )
Vâng tôi nghĩ bạn đã có thể mường tượng một chút về Database

Còn nếu để lấy ví dụ về cách tổ chức , logic một tý thì tôi có thể lấy ví dụ này
Ở Trong hồ sơ về khách hàng :
Khách Hàng có thể gồm có các trường như : Mã Khách Hàng, Tên Khách Hàng, Tuổi Khách Hàng, Địa Chỉ Khách Hàng v.v…..
Như vậy ta có thể viết:
Khách Hàng( Mã Khách Hàng, Tên Khách Hàng, Tuổi Khách Hàng, Địa Chỉ Khách Hàng v.v.)
Và ở Trong hồ sơ về:
Hợp Đồng Khách Hàng (Mã Hợp Đồng, Mã Khách Hàng , Ngày Hợp Đồng , Nội Dung , .v.v.)
Như vậy qua cái vị dụ trên bạn có thể thấy tôi làm cái Khách hàng và cũng đã tổ chức nó và đối với Hợp đồng Khách Hàng cũng vậy . nhưng cũng do tôi chưa nói kỹ về một số nguyên tắc tổ chức cho nên viết đại khaái cái ví dụ kia thôi ). Nhưng bạn cũng có thể thấy được một sự liên kiên giữa 2 Bảng khá logic đó là liên kết với nhau bởi Mã Khách Hàng. Mã khách hàng là luôn là duy nhất mỗi người có một mã riêng , ko giống nhau và vì thế tôi có thể truy xuất như là : Tìm tất cả các hợp đồng có Mã Khách Hàng là : 0001 chẳng hạn v.v.
Như vậy có nghĩa là tôi có thể nhập nhiều hợp đồng cho một khách hàng . Vâng bạn đã thấy dc 1 sự liên kết logic Giữa Khách Hàng Với Hợp Đồng, Quan hệ này chính là quan hệ ký hợp đồng
Tạm thời bạn hãy hiểu một chút như thế đã , ở những phần sau tôi sẽ quay lại vấn đề này , và khi đó bạn sẽ có cái nhìn tốt hơn !

* Vậy tôi xin phép được đặt câu hỏi thế thì cái gì sẽ giúp chúng ta quản lý DB? Vâng ! lúc này chúng ta sẽ làm quen với một khái niệm khác đó là “Hê Quản Trị Cơ sở Dữ liệu” (DBMS : Database Manager System)
tôi viết tắt là DBMS: vậy cứ khi nào bạn nhìn thấy chử DBMS thì có nghĩa là “Hê Quản Trị Cơ sở Dữ liệu”
Vậy DBMS Có nghĩa là gì :?

**BDMS: Là một hệ thống các phần mềm cho phép tổ chức lưu trữ và xử lý thông tin dữ liệu 1 cách logic , hợp lý trên máy tính và đồng thời đáp ứng 1 số các chức năng xử lý thông tin theo yêu cầu thực tế của người sử dụng bao gồm các chức năng thông dụng ví dụ như là : thêm , xoá , sửa, tìm kiếm, thực hiện các tính toán thống kê , đáp ứng được một số kỹ năng thuận lợi cho người sử dụng.
Các Hệ Quản Trị DB xây dựng tổ chức dữ liệu dựa trên các mô hình dữ liệu chuẩn để có thể lưu trữ hợp lý đáp ứng được hầu hết các chức năng thao tác , xử lý nhanh!
Một số DBMS như :
Dbase (cái này đã dùng từ lâu bây giờ thì ko dùng nữa - chỉ có "Em Xin Chị" ngu mới dùng)
FoxPro (một sô ngân hàng vẫn còn dùng xong xu hướng sẽ chuyển sang một hệ quản trị khác )
Access ( Đã quá phổ biến thực hiện nhanh các tinh toán thông kê , và giúp người dùng có thể thiết kế một số biểu mẫu nhanh và dễ dàng và giống với các biểu mẫu có trong thực tế)
SQL(Cái này thì chúng ta sẽ gặp ở phần 2 , nó rất phổ biến thông dụng )
MySQL (đang dc dùng rộng rãi , lại free nữa )
Oracle ( Cái này maạh mẽ , xong vẫn chỉ có một số doang nghiệp thực sự lớn mạnh mơới dùng )


** Một số chức năng của DBMS:
*** Hỗ trợ 1 mô hình dữ liệu nó là 1 sự trừu tượng hoá toán học của thế giới thực mà thông qua đó người dùng có thể nhìn dc loại dữ liệu này
***Cung cấp cho người dùng một sự giao tiếp với cơ sở dữ liệu ( VD: dưới dạng hộp thoại, để tìm kiếm, lựa chọn và thay đổi các dữ liệu)
*** Đáp ứng được yêu cầu, nhập liệu , truy xuất 1 cách hiệu quả thông qua 1 số chức năng chuẩn của DBMS

1 số chức năng nữa định nói nốt như ng thôi
thế là khá đủ . Tôi chỉ lướt thôi chứ ko đi sâu

*Bây giờ tôi xin phép sang phần Mô hình dữ liệu ( Data Model)
**Mô hình dữ liệu (Data Model) : Là tập hợp các khái niệm để biểu diễn cho việc tổ chức thông tin dữ liệu và các hành động để thao tác dữ liệu của hệ thống. Các mô hình dữ liệu sẽ chỉ ra đầy đủ các thông tin, các đặc tính của các đối tượng trong hệ thống . Dựa vào việc mô tả thông tin dữ liệu và các liên kết thông tin dữ liệu người ta đưa ra 2 loại mô hình dữ liệu : Mô hình quan niệm ( Mô hình thực thể liên kết ) và Mô hình luân lý.
***Mô hình quan niệm ( Mô hình thực thể liên kết): Ở mô hình này các thông tin dữ liệu được mô tả thông qua các thực thể trong thế giới thực đó là các đối tượng hoặc các sự kiện xảy ra và tồn tại trong thế giới thực mà ta phải quan tâm đến, thông qua các thực thể này người dùng sẽ khai quát được các thông tin phải quản lý. Tuy nhiên ở đây chúng ta chưa quan tâm đến việc tổ chức dữ liệu trên máy tính như thế nào !
***Mô hình luận lý : Là mô hình dữ liệu mà trong đó dữ liệu sẽ được mô tả cụ thể theo các qui tắc để có thể tổ chức lưu trữ và có thể xử lý được trên máy vi tính. Được phân làm 3 loại mô hình:
****Mô hình dữ liệu quan hệ
****Mô hình dữ liệu Mạng
****Mô hình dữ liệu phân cấp
Trong đó “Mô hình dữ liệu quan hệ” là mô hình có nhiều ưu điểm hơn đáp ứng cho các hệ thống thông tin không quá lớn và được sử dụng rộng rãi nhất. hầu hết các hệ quản trị cơ sở dữ liệu được xây dựng trên mô hình này như DBase, Foxbase, FoxPro, Access , …

* Bây giờ tôi sẽ làm rõ về các mô hình dữ liệu dùng cho các hệ cơ sở dữ liệu
Như tôi dã trình bày ở phần trên về các mô hình dữ liệu:
**Mô hình quan niệm ( Mô hình thực thể liên kết)
**Mô hình luận lý , Bao gồm:
***Mô hình dữ liệu quan hệ
***Mô hình dữ liệu Mạng
***Mô hình dữ liệu phân cấp
Và bây giờ tôi muốn nhắc lại một chút và đi sâu thêm một chút , nếu bạn đọc mà không hiểu gì thì đừng ngai rồi càng đọc bạn sẽ không hiểu gì đâu ^_^ nhưng khi đọc xong thì lại thấy hiểu ^_^ hí hí
***Đối với “Mô hình quan niệm ( Mô hình thực thể liên kết)” : Đây là mô hình dữ liệu đầu tiên cho việc khái quát mô hình dữ liệu với mô hình này người ta chưa quan tâm đến việc tỗ chức dữ liệu và xử lý dữ liệu trên máy vi tính, mà chỉ quan tâm đến những thông tin dữ liệu cần phải có để quản lý, quan tâm đến những mối quan hệ thông tin giữa chúng nghĩa là quan tâm đến các đối tượng trong thế giới thực mà ta sẽ xét đến.
***Mô hình này cho phép mô tả sơ đồ ý niệm của thế giới thực và không quan tâm đến tính hiệu quả và ý nghĩa luận lý. Trong mô hình này người ta quan tâm đến các khái niệm như:

|--------------------------------|
|---Thực Thể
|---Kiểu Thực Thể
|---Thuộc Tính
|---Các Quan Hệ Liên Kết
|--------------------------------|

****Thực Thể (Entity)
Thực thể là 1 sự vật hoặc 1 sự việc (đối tượng hoặc sự kiện) mà nó xảy ra và tồn tại trong thế giới thực mà ta quan tâm và ta có thể phân biệt giữa chúng với nhau thông qua các đặc tính thông tin của nó. thực thể đặc trưng cho 1 thông tin cụ thể.
Ví dụ: Thông tin của 1 khách hàng ( tên , tuổi , v.v. )
Thông tin của hợp đồng , giữa 2 hợp đồng có thể phân biệt với nhau qua thông tin bên trong
****Kiểu thực thể (Entity Set)
Kiểu thực thể là 1 tập hợp các thực thể có cùnh quan hệ, thuộc tính, kiểu thực thể đặc trưng cho một loại thông tin, chứ không phải là 1 thông tin cụ thể ( tránh nhầm lẫn à nha) . Tôi lấy ví dụ :
Thông tin về 1 người Khách là một thực thể ok ! để biểu diễn cho thông tin Khách người ta mô tả 1 kiểu thực thể gọi là kiểu thực thể khách
Ví dụ: KHACK ( Mã Khách, Tên Khách, Địa chỉ , Điện Thoại , v.v.)
Rồi dĩ nhiên là khi bạn đọc đấy đên sẽ có chục dấu ? trong đầu , để tớ giải thích nhé
KHÁCH :
Mã Khách ----------|-Tên Kách ---------|-Địa Chỉ --------|-Điện Thoại -- |
0001 ---------- ----- |-Romeowillkiss - -|-HFL ----------- |-08.8123456- -|
0002 ---------- ----- |-Fantasy Hâm----- |-TDVN--------- |-04.8654321 --|
0003 ---------- ----- |-Zieo_AnhVu----- |-TDVN--------- |-04.8456123 --|
-------------------------------------------------------------------------------------
như vậy bạn nghĩ thông tin về một người khách là 1 thực thể , nhìn xem ở trên
Còn cả cái==> KHÁCH ( Mã Khách, Tên Khách, Địa chỉ , Điện Thoại , v.v.) là 1 Kiểu thực thể OK DONE! Và ở đây gọi là 1 kiểu thực thể KHÁCH

Để Xác định kiểu thực thể trong một hệ thống người ta dựa vào 3 yếu tố sau:
-----Những thông tin mang tính chất giao dịch trong hệ thống
(Ví dụ: Phiếu nhập, phiều xuất, hóa đơn chứng từ,…)
-----Những thông tin mang tính chất mô tả các đặc tính của đối tượng trong hệ thống mà ta phải quan tâm
(Ví dụ: Thông tin về khách hàng ,…)
-----Những Thông tin mang tính chất thống kê, hoạch định kế hoạch
(Ví dụ: Thông tin công nợ, Thông tin tồn kho, Bảng chấm công, Bảng lương,…)

****Thuộc Tính :
Trước hết tôi xin lấy ví dụ trước : Các bạn hãy xem Kiểu Thực thể KHÁCH

--KHÁCH ( Mã Khách, Tên Khách, Địa chỉ , Điện Thoại , v.v.)
…………..{|------------------Thuộc tính----------------------------|}

Vậy qua minh hoạ trên bạn sẽ biết đâu là thuộc tính
-----Như vậy mỗi kiểu thực thể có nhiều đặc tính thể hiện chi tiết thông tin các đặc tính này gọi là thuộc tính của thực thể.
-----Các Thuộc tính của kiểu thực thể được xây dựng dựa trên thông tin thực tế của hệ thống để quản lý.
-----Các thuộc tính được phân chia làm 3 loại:
---------------------|
----- Tên Gọi
----- Mô Tả
----- Kết Nối
---------------------|

-----+ Thuộc tính Tên Gọi ( Thuộc tính Khoá)
------+Là 1 hoặc 1 tập thuộc tính xác định tính chất chung nhất của 1 thực thể hay 1 kiểu thực thể hay nói cách khác thông qua thuộc tính này để phân biệt giữa thực thể này và thực thễ kia trong một kiểu thực thể.
------+ Thông thường thuộc tính tên gọi là các mã khoá.
(Ví dụ: MaKhach, MaNhanVien , …. ====> Thuộc tính khoá

SinhVien(MaSinhVien,TenSinhVien, Ngày Sinh, ….)
……….. {|-----Khóa---|}

ThoiKhoaBieu(SoThoiKhoaBieu, HocKy, NamHoc, NgayLap, …)
…….……….. {|----Khóa--------|}

ChiTietThoiKhoaBieu(SoThoiKhoaBieu,MaGiangVien,MaM on,ThuMay,TietMay, GhiChu….)
…….………………..{|------------------------------Khóa----------------------------------|}
Ở trên là một số ví dụ: và bạn có thể thấy rằng không chỉ có 1 thuộc tính mới làm khoá
ở ví dụ về ChiTietThoiKhoaBieu bạn có thể thấy 5 thuộc tính mới thành khóa

-----+ Thuộc tính Mô Tả:
Bao gồm các thuộc tính mô tả các chi tiết thông tin của kiểu thực thể.
Hầu hết các thuộc tính của kiểu thực thể đều là thuộc tính mô tả và thuộc tính mô tả chỉ xuất hiện ở trong Kiểu thực thể của nó, không có ở những kiểu thực thể khác.
Lấy Ví Dụ cho dễ hiểu :
SinhVien(MaSinhVien, TenSinhVien, NgaySinh, DiaChi….)
……….. {|-----Khóa--|}{---------------Mô Tả-------------------}

-----+ Thuộc tính Kết Nối:
Là thuộc tính để chỉ đến mối quan hệ liên kết thông tin giữa Kiểu thực thể này với Kiểu thực thể khác .
Thông thường thuộc tính kết nối của Kiểu thực thể là thuộc tính khóa của Kiểu thực thể kia.
Ví Dụ:
HopDong(SoHopDong,MaKhach, NgayHopDong, ….)
..………. {|---Khóa---|}

Khach(MaKhach, TenKhach, DiaChi, DienThoai, …)
...….. {|--Khóa--|}

Vậy bạn có thể thấy được sự liên kết bạn thấy MaKhach trong HopDong không ??? ^_^ , và nó là “Khoá” của Kiểu thực thể Khach

****Các Quan Hệ Liên Kết :
Tuỳ theo quan hệ thuộc tính giữa 2 kiểu thực thể các mối liên kết được phân làm 3 loại như sau
-------Liên Kết 1 -- 1: ( đọc là: “ liên kết một một”)
Ứng với 1 thực thể trong Kiểu thực thể này sẽ tồn tại 1 thực thể trong Kiểu thực thể kia và nguợc lại
Ký hiệu : < --------->
VD:
NhanVien <---------> BangLuong
…………..(Thuộc)

-------Liên Kết 1 -- N: ( đọc là: “ liên kết một nhiều”)
Ứng với 1 thực thể trong 1 kiểu thực thể A sẽ xuất hiện nhiều thực thể trong Kiểu thực thể B.
Ký hiệu: --------->
………..(N……..1)

N: nghĩa là Nhiều

VD: SinhVien ---------> Lop

-------Liên Kết N -- N: ( đọc là: “ liên kết nhiều nhiều”)
Ứng với 1 thực thể trong 1 Kiểu thực thể A sẽ xuất hiện nhiều thực thể trong kiểu thực thể B và ngược lại .
Ký hiệu : N -- N
Ví dụ:
GiaoVien ----------- MonHoc
(Đừng có cãi à nha 1 giáo viên có thể dạy nhiều môn học và 1 môn học có thể nhiều giáo viên khác nhau dạy)

Trước khi sang phần sơ đồ ERD , thì tối thấy qua những gì về mô hình dữ liệu mà tôi trình bày các bạn hãy thử suy nghĩ và mổ tả Các Kiểu thực thể của hệ thống quản lý Thư Viện xem nào ? ^_^

* Sơ đồ quan hệ thực thể ERD(Entity Relationship Diagram )
----Ý Nghĩa:
Sơ đồ quan hệ thực thể là mô hình biểu diễn các thành phần được xây dựng trong mô hình thực thể liên kết chỉ ra được các Kiểu thực thể phải có, các thuộc tính tương ứng của các kiểu thực thể này, các kiểu quan hệ liên kết giữa các kiểu thực thể trong thế giới thực.
Thông qua các mối quan hệ liên kết trên sơ đồ cho phép người sử dụng có thể được xây dựng các hướng truy xuất thông tin theo yêu cầu.
----Các ký hiệu và quy ước vẽ
Các kiểu thực thể được biểu diễn bằng các hình chữ nhật bên trong là tên của nó.
Các thuộc tính được biểu diễn bằng các đường , bên trong là tên của thuộc tính.
Các thuộc tính này liên kết với các kiểu thực thể bằng các đường không có hướng (mũi tên đó) và nối giữa thuộc tính và kiểu thực thể để chỉ ra thuộc tính của kiểu thực thể đó.
Trên sơ đồ chỉ biểu diễn 1 số thuộc tính tiêu biểu
Các mối quan hệ liên kết giữa các được biểu diễn bằng các đường nối giữa các kiểu thực thể này. Các đường nối nà có thể có hướng hoặc không có hướng tuỳ theo mối quan hệ. nếu hướng mũi tên chỉ về bên nào bên đó là 1 không có mũi tên là quan hệ nhiều ( như trên đã giải thích) Tên các đường có kèm theo tên quan hệ . Ví dụ:

…(SoHD)……………………(TenKH)…….( <----Tên thuộc tính)
------|-------- ..QH:KýHĐ…--------|--------
| HopDong | ---------------> | KhachHang |
--------------- ..…………….----------------
….|……………………………….|
(MaKH)…( Tên thuộc tính)…(MaKH)
Do khuôn khổ trình bày và do tôi cũng qua bận nên ko có thời gian vẽ vài cái sơ đồ cho các bạn được rất mong thông cảm , và một lý do khác đó là 1 số diển đàn ko cho phép dùng thẻ “img” <--chống Hack đây mà.
Và một số diễn đàn còn ko cho phép dấu 3 chấm nữa cơ
Khi vẻ bằng cách minh hoạ trên rất có thể một số nơi không thể thấy đúng được thực sự những tiêu chuẩn về hình vẽ . Xong vơi những lời gỉai thích ở phía trên thì bạn sẽ vẻ được . nói tóm lại sơ đồ ERD là một sơ đồ rất cần thiết . Và tôi xin nói rõ thêm
Ví dụ ở trên là một nhánh về hệ thống quản lý 1 hệ thống xuất nhập hàng hóa chẳng hạn và còn rất nhiều các Kiểu thực thể khác nữa xong tôi chỉ nêu lên một nhánh về HopDong Và KhachHang chẳng hạn
kiều thực thể HopDong tôi cho vào hình chữ nhật nhớ là ko có những dấu gạch gạch kia đâu đấy nhé hình chữa nhật viết liền . Và liên kết là (-------->) Nhiều ----->Một . Tên quan hệ được ghi trên đường liên kết : Quan hệ ký hợp đồng (KýHĐ) . Một số thuộc tính cơ bản Như SoHD cho vào trong hình tròn à nha và có đường vô hướng (ko có mũi tên gì hết) nối với các Kiểu thực thể để cho biết một số thuộc tính cơ bản của kiểu thực thể. Tương tự với MaKH cũng vậy . Dĩ nhiên đối với một hệ thống thì trình bày bằng sơ đồ ERD ko đơn giản như ở trên đôi khi còn tỏ ra hơi rối mắt vì sẽ có nhiều đường liên kết giữa các Kiểu thực thể nữa. Lý do thời gian có hạn , thông cảm! Bạn cứ tưởng tượng có nhiều Kiểu thực thể nữa cùng được biểu diển ! chứ ko phải chỉ có hai cái như trên!

Tôi xin được phép dừng phần – “Mô hình quan niệm ( Mô hình thực thể liên kết)” tại đây tôi nghĩ bạn có thể đọc sách tìm hiểu được rồi

Tôi xin phép được chuyển sang mô hình
**Mô hình luận lý : Như tôi đã trình bày mô hình bao gồm
****Mô hình dữ liệu quan hệ
****Mô hình dữ liệu Mạng
****Mô hình dữ liệu phân cấp

Xong tôi xin phép trình bày 1 mô hình thôi :
*-*-*-*-*-Mô hình dữ liệu quan hệ*-*-*-*-*-*
Đây là mô hình dữ liều đáp ứng cho các hệ thống thông tin không quá lớn và nhiều hệ quản trị cơ sở dữ liệu đã được xây dựng trên nền tảng của mô hình này cho nên tôi giới thiệu.
Việc tổ chức thông tin bên trong mô hình dữ liệu quan hệ tuân thủ theo nhiều quy tắc để có thể lưu trữ và xữ lý trên máy vi tính.
-----Tổ chức thông tin trong mô hình dữ liệu quan hệ
Tổ chức thông tin trong mô hình dữ liệu quan hệ được tổ chức trên nhiều bảng (table) . Cấu trúc của bảng bao gồm nhiều cột , nhiều dòng trong đó : cột gọi là field (trường) : Mô tả các đặc tính thông tin của đối tượng. Dòng , hàng gọi là record (mẩu tin) : Lưu trữ thông tin chi tiết của một đối tượng.
Trong một hệ thống thông tin dữ liệu của hệ thống được tổ chức lưu trữ trên nhiều bảng các bảng này
Có quan hệ với nhau, thông qua quan hệ này cho phép người dùng có thể truy xuất được hầu hết thông tin theo yêu cầu.

VD:
Table SinhVien (Bảng Sinh Viên)
SinhVien(MaSV, TenSV, Tuoi,..)

|-MaSV-|-TenSV-|-Tuoi|
|-SV01 -|-Romeo-|-23---|
|-SV02- |-Juliet---|-21---|

vậy ở trên các cột MaSV, TenSV, Tuoi ----> chính là các fields , bạn có thể gọi nó là các thuộc tính của bảng SinhVien
Dòng :
CODE|-SV01 -|-Romeo-|-23---|
là record

-----Cơ sở xây dựng mô hình dữ liệu quan hệ
Việc xây dựng mô hình dữ liệu quan hệ được xây dựng trên nền tảng của mô hình thực thể liên kết trong đó:
Mỗi kiểu thực thể trong mô hình thực thể liên kết sẽ tương ứng với một bảng trong mô hình dữ liệu quan hệ.
Mỗi thuộc tính trong mô hình thực thể liên kết sẽ tương ứng với một field trong mô hình dữ liệu quan hệ.
Mỗi thực thể tương ứng với 1 record. Các loại quan hệ cũng được xét thứ tự.
Bây giờ tôi xin phép so sánh 1 tý với cái mô hình đã trình bày ở phần trước . Chúng ta đã biết trong mô hình thực thể liên kết người ta chưa quan tâm việc tổ chức và xử lý trên máy tính. Do đó việc tổ chức thông tin có thể thiếu, có thể thừa. Còn trong mô hình dữ liệu quan hệ thông tin phải được tổ chức logic tuân theo các quy tắc về chuẩn hóa dữ liệu về ràng buộc dữ liệu nghĩa là trong mô hình này thông tin dữ liệu sẽ được tổ chức 1 cách chi tiết không thiếu cũng ko thừa: và thông qua tổ chức dữ liệu này người dùng có thể truy cập được các thông tin theo yêu cầu

-----Các quan hệ liên kết:
Quan hệ 1 -- 1 : ( Đọc là quan hệ 1 nhiều
Ứng với 1 record của bảng A sẽ xuất hiện 1 record tương ứng trong bảng B và ngược lại.
Ví Dụ:

http://m.domaindlx.com/K30S/DBSQL_Romeowillkiss/1.JPG

Quan hệ 1 - N (một nhiều):
Ứng với một record trong bảng A sẽ xuất hiện nhiều record tương ứng trong bảng B và ứng với 1 record trong bảng B chỉ xuất hiện duy nhất 1 record tương ứng trong bảng A.
VD:


http://m.domaindlx.com/K30S/DBSQL_Romeowillkiss/2.JPG
Quan hệ N – N : (Quan hệ Nhiều - Nhiều):
Ứng với một record trong bảng A sẽ xuất hiện nhiều record tương ứng trong bảng B và ngược lại


http://m.domaindlx.com/K30S/DBSQL_Romeowillkiss/3.JPG

Quan hệ 3 ngôi :
Trong một số trường hợp có thể xuất hiện quan hệ giữa 3 kiểu thực thể. Quan hệ này gọi là quan hệ 3 ngôi . quan hệ này có thể là:
1 -- 1 --1
1 -- 1 --N
1 -- N --N
N -- N --N
VD:


http://m.domaindlx.com/K30S/DBSQL_Romeowillkiss/4.JPG
-----Chuẩn hoá dữ liệu 1 số khai niệm căn bản:

+ Chuẩn hoá dữ liệu là những quy tắc mà dữ liệu trong hệ thống phải tuân thủ để đáp ứng yêu cầu tổ chức thông tin trong mô hình dữ liệu tránh trường hợp thông tin bị lặp đi lặp lại dư thừa, tốn kém bộ nhớ ( thực ra thì ko phải là tốn kém bộ nhớ trong thời buổi hiện đại như bây giờ xong việc này coi như là kỹ năng nên có, cái này đánh giá trình độ cứng cáp của một người design) . nhưng đối với ngày xưa khi tôi còn sử dụng cái máy cũ rích , rồi là ổ đĩa mềm thì to như là cái bánh trưng , … thì việc tốn kém bộ nhớ là có đấy.
+ Thông tin dữ liệu thông qua việc chuẩn hóa các kiểu thực thể sẽ được phân rã thành nhiều bảng nhỏ hơn chi tiết hơn và có quan hệ với nhau, giảm thiểu việc dư thừa thông tin. Thông tin chỉ được ghi ở 1 nơi (Bảng) thông qua các khóa liên kết có thể sử truy xuất được thông tin theo yêu cầu.

+ Phụ thuộc hàm:
giả sử 1 thuộc tính a luôn có thể xác định được khi biết thuộc tính b, ta nói a phụ thuộc hàm vào thuộc tính b.
a được gọi là thuộc tính phụ thuộc
b được gọi là thuộc tính độc lập

Tôi lấy ví du như là:

HOADON(SoHD,TenKH,NgayHD,…)
vậy ta có thể thấy ngày HĐ phụ thuộc Số HĐ

+ Các dạng chuẩn:
++ Dạng chuẩn 1: ( 1NF: 1 Normal Format )
Loại bỏ các thuộc tính lặp xuất hiện nhiều lần trong bảng
Tôi lấy ví dụ:
HOADON(SoHD, TenKH, DiaChi, Dienthoai, NgayHD,TenHang1, NuocSX, SoLuong,DonGia,ThanhTien, …)

===>
HOADON(SoHD, TenKH, DiaChi, Dienthoai, NgayHD)
VD: -------|00001|-Romeo-|HaNoi | 1234567--|30/04/05|
CHITIETHOADON(SoHD, TenHang , NuocSX, SoLuong,DonGia,ThanhTien, …)
VD: ------------------ |00001|HangNgon -|HaNoi -|1 em thoi |-200K--| 200K------|

đấy ví dụ vậy thôi cho dễ hiểu hè hè hè ví dụ buồn cười nhỉ dễ hiểu he he he
++ Dạng chuẩn 2: ( 2NF)
Loại bỏ các thuộc tính phụ thuộc bộ phận vào khoá
VD:
CTHD(SoHD,MaH,SL,DG,TT,..)
HANG(MaH,TenH,MaNuoc,MaLoai,…)
NUOCSX(MaNuoc,TenNuoc,…)
LOAIHANG(MaL,Loai,GhiChu…)
++ Dạng chuẩn 3: ( 3NF)
Loại bỏ các phụ thuộc không khoá, phụ thuộc bắc cầu
VD:
==> HOADON(SoHD, MaKH, NgayHD)
KHACH(MaKH,TenKH,DiaChi,DienThoai,…)
==> CTHD(SoHD,MaH,SL,DG,TT,..)

-----Sơ dồ quan hệ thực thể liên kết mở rộng
(EER: Extended Entity Relationship Model)

Nói chung thì sơ đồ này thì cũng miêu tả nhiều kiểu thực thể bạn hãy tưởng tượng nó có nhiều liên kết sau đây là 1 nhánh thôi làm ví dụ bạn hãy tưởng tượng tiếp là bây giờ cần phải có mục HOADON và nó sẽ liên kết với KHACH chẳng hạn thì phải vẽ thêm , ….v.v. Bân lắm ko ngồi vẽ được khi nào sẽ update sau vậy!


KHACH HOPDONG

+ Ý nghĩa: Sơ đồ này chỉ ra tất cả những kiểu thực thể phải có của hệ thống và đã được chuẩn hoá để có thể tổ chức lưu trử và xử lý trên máy tính.
Sơ đồ chỉ ra được cụ thể các mối liên kết giữa các kiều thực thể trong toàn bộ hệ thống thông qua các mối liên kết này cho phép có thể truy xuất được các mối thông tin theo yêu cầu. Sơ đồ này chính là nên tảng cho việc thiết kế Cơ sở dữ liệu đáp ứng cho việc xây dựng chương trình quản lý trên máy tính.
+ Cơ sở xây dựng EER:
Xác định các thực thể liên kết, kiểu thực thể phải có của hệ thống.
Xác định các mối quan hệ cụ thể giữa các kiểu thực thể này.
Áp dụng quy tắc chuẩn hoá để chuẩn hoá lại các kiểu thực thể phải có trong hệ thống
Dựa trên sơ đồ ERD phát triển thành EER
+ Các quy ước vẽ: Mỗi kiểu thực thể được biểu diễn bằng 1 hình chữ nhật, bên trong là tên của nó, tên là 1 danh từ.
Các mối quan hệ liên kết giữa các kiểu thực thể được qui ước theo qui ước đã qui định. Bao gồm các mối quan hệ 1-1; 1 – N; N – N . Trên các mối quan hệ đề chỉ ra tên của quan hệ.

Bây giờ tôi xin phép sang phần thiết kế cơ sở dữ liệu

* Thiết Kế Cơ sở Dữ Liệu:
+ Nói một tý về khái niệm và ý nghĩa : việc thiết kế CSDL chính là 1 hệ thống các bảng được tổ chức 1 cách logic để lưu trữ toàn bộ thông tin của hệ thống. Các bảng đựơc xây dựng trên 1 số nguyên tắc về việc tổ chức mô hình dữ liệu. Qui tắc về chuẩn hoá các mối quan hệ giữa các kiểu thực thể để tránh trường hợp thừa, thiếu thông tin khi tổ chức lưu trữ và xử lý trên máy tính.
Việc thiết kế CSDL chuẩn là yêu cầu khá quan trọng đáp ứng được các kết quả tối ưu trong việc xây dựng chương trình quản trị CSDL.

+ Cơ sở để thiết kế cơ sở dữ liệu
--- Dựa vào sơ đồ EER
Mổi kiểu thực thể trên sơ đồ EER tương ứng với 1 bảng và các kiểu quan hệ N – N, quan hệ 3 ngôi cho phép làm xuất hiện 1 bảng quan hệ trung gian. Thông qua sơ đồ này cho phép user có thể xác định được các bảng phải có trong hệ thống.
--- Dựa vào thuộc tính của các kiểu thực thể mà đã phân tích từ trước đó cho phép xây dựng các fields phải có trên bảng. Các fields này cũng tuân thủ theo các loại: fidle khoá , field mô tả, field kết nối .
--- Các field này được xây dựng trên thực tế thông tin cần phải quản lý. Nghĩa là trong thực tế mỗi đối tượng như thế các thông tin mô tả cho những đối tượng này như thế nào thì khi thiết kế CSDL mỗi thông tin mô tả sẽ ứng với 1 field trong bảng.
--- Dựa vào kiểu quan hệ liên kết.
Với quan hệ 1--1 : Có thể gom 2 bảng thành 1 bảng tuy nhiên nếu có thông tin thay đổi hoặc đáp ứng yêu cầu phân cấp dữ liệu thì ta vẫn giữ 2 bảng va 2mã khóa sẽ xuất hiện ở cả hai bên.
Với quan hệ 1--N : Khi thiết kế Cơ Sở Dữ Liệu thì ta sẽ đưa khoá của bên 1 và khoá bên nhiều làm liên kết
Với quan hệ N--N hoặc quan hệ 3 ngôi: Làm phát sinh 1 bảng quan hệ trung gian và bảng này có khoá là khóa của 2 quan hệ kia hoặc là 3 nếu là quan hệ 3 ngôi.

Có lẽ tôi xin được phép dừng phần 1 ở đây và bước sang phần 2 khái quát một số câu lệnh căn bản SQL
Phần 2:
*-*-*-*-*-*Khái quát về SQL : Phần này sẽ nói về những câu lệnh căn bản SQL *-*-*-*-*-*

Việc truy vấn thông tin dữ liệu có thể dùng các công cụ riêng của nó song các hệ quản trị còn cho phép truy vấn bằng các câu lệnh gọi là ngôn ngữ truy vấn, ngôn ngữ SQL (Strycture Query Language)
Vì là viết cho đối tượng newbie tôi chưa đề cập đến MS SQL server tôi muôn các bạn nắm một số lệnh căn bản trước vì thế tôi khuyên các bạn newbie tốt nhất là hãy thực tập ngay với Microsoft Access cái này đã khá quen thuộc với các bạn rồi , nó nằm ở trong bộ Microsoft Office bạn có thể cài bộ Office 97 , 2000, 2003, XP , ….. Tuỳ sau đó các bạn hãy cài SQL server rồi thích thì thiết kế mấy site dính SQL injection
để thực hiện những câu lệnh he he he cũng chưa muộn . Vậy để thực hiện những câu lệnh truy vấn bạn làm như sau . khởi động MS Access (tôi thì ko dùng office nhiều lắm nên cũng chẳng biết mấy bộ office phiên bản mới nó như thế nàp tôi dùng office chủ để thỉnh thoảng xài MS Word thôi nên tôi dùng Office 97 ) vào File ---> New Database ( Ctrl + N) , sau đó bạn chọn Blank Database rồi nhấn OK
sau đó bạn gõ tên file vào ô file name để chuẩn bị Create sau khi dõ xong bạn nhấn Create để tạo Database và nó sẽ lưu dưới dạng file tên_bạn_gõ.mdb (*.mdb)
sau khi nhấn create xong nó sẽ hiện ra 1 cái hộp hiện thị thông tin database và trên đó có các thẻ như
Table, Query , Form, Report , …..
Bạn hãy chọn thẻ Query
Sau đó bạn nhấn vào nút new để tạo truy vấn
Trong hộp New Query bạn chọn Design View rồi nhấn OK
Sau đó nó sẽ hiện một cái hộp Show Table và bạn nhấn Close
Tiếp theo bạn chọn View ---> SQL View khi tạo bạn sẽ thấy có chữ select; ấy cứ xoá hết đi mới bắt dầu mà
Vâng và mọi câu lệnh sẽ được gõ tại đây , câu lệnh kết thúc bảng dấu ;
Nào bây giờ ta bắt đầu

*Tao Bảng , Tạo khoá chính:

Để tạo một bảng mới bạn dùng cú pháp sau:
CODE
create table Tên _bảng (Tên_Filed1 Kiểu_Dữ_Liệu(KíchThước), Tên_Filed2 Kiểu_Dữ_Liệu(KíchThước), ….Thích thì tạo nhiều cái );


Tuy nhiên lưu ý : mấy cái dấu gạch dưới là không phải phím cách đâu đấy
ở trên tôi có nói kiểu dữ liệu và (kích thước) tuỳ thuộc vào kiểu dữ liệu thì mới có kích thước thôi à nha ví dụ như kiểu dữ liệu là text chẳng hạn thì mới có kích thước xem ví dụ sau:
Ví dụ:
CODE
create table fantasy (chieucao text(10),canang text(10),toc text(10))


he he sau đó Bạn vào Query ---- > chọn Run hoặc nhấn nút có hình dấu ! ( chấm than) trên thanh công cụ
nếu ko có lỗi gì thì bạn đã gõ đúng vào bạn thử chọn Run phát nữa nếu nó hiện ra thông báo
The table’fantasy’ is already exits ! thì là table đã được tạo rồi đấy
hoặc bạn có thể vào hộp Database lúc đầu và chọn thẻ table xem bạn sẽ thấy table Fantasy được tạo
khi thực hiện query khi bạn thoát ra sẽ hỏi bạn có muốn lưu query ko thì tùy bạn thích thì lưu mà ko thích thì thôi tôi nghĩ bạn nên lưu lại

Tôi có thể đưa cho bạn vài kiểu dữ liệu :
Byte , short, long, integer, single, double, yesno, datetime, text(size), currency, memo, oleobject, counter

-tạo khoá chính
CODE
constraint Tên_Khoá_Chính primary key (Ten_field_LàmKhoá);

ví dụ:
CODE
create table romeowillkiss (chieucao text(10),canang text(10),toc text(10), constraint khoa primary key (toc));

sau khi bạn thực hiện lệnh trên bạn sẽ thấy 1 bảng romeowillkiss được tạo và khoá là toc
bạn có thể trở về database của mình chọn thẻ table và chuột phải vào table romeowillkiss chọn Design bạn sẽ thấy ở field toc có hình cái khoá . OK done!
Note: Dĩ nhiên việc tạo khoá ở trên chỉ mang tính chất cho các bạn thực hành , chứ về mặt khoa học thì chưa có một chút gì ,….ngay cả việc tạo bảng , dĩ nhiên ở phần database tôi có nói rồi
* Xoá bảng
hè hè tạo xong thấy cái bảng fantasy dễ ghét quá muốn xóa nó đi chỉ để lại cái bảng romeowillkiss thôi thì bạn dùng lệnh
CODE
drop table Tên_Bảng_Muốn_Xoá;



Ví dụ:
CODE
drop table fantasy;


vậy khi một cao thủ nào bảo các bạn “…đừng có Drop Database của người ta đấy nhé” thì có nghĩa là như thế đấy và hy vọng khi bạn phát hiện ra một site bị dính SQL injection đừng có dùng lệnh Drop nhé xoá của người ta tội lắm ^_^ , sắp sang 2006 đến nơi rồi

* Thay đổi câu trúc của 1 bảng:
giả dụ sau khi ta đã thiết kế xong 1 bảng ta muốn thay đổi lại thêm hoặc bớt các fields ( các cột) ta dùng:

CODE
alter table Tên_Bảng_Cần_ThayĐổi add column Tên_Field(Cột)_CầnThêm Kiểu_DữLiệu(KíchThước);


Ví dụ: tôi muốn thêm cột hoi vào table fantasy
CODE
alter table fantasy add column hoi text(10);


xoá cột trong 1 bảng

CODE
alter table Tên_Bảng_Cần_ThayĐổi drop column Tên_Field(Cột)_MuốnXoá;


Ví dụ:
CODE
alter table fantasy drop column toc;


như vậy bạn thử check xem sao bạn thữ mở table fantasy xem có còn cột toc nữa không mà lại có cột hoi nhỉ khà khà khà

thôi có bây giờ bạn create 1 table có tên admin và có câu trúc như sau:
CODE
create table admin (adminuser text(50), password text(50), email text(50));


đơn giản tôi bảo các bạn tạo bảng admin vì hy vọng sẽ gần gũi hơn hì hì hì

* Insert 1 record (dòng) vào 1 bảng :
bây giờ các bạn muốn tạo 1 thông tin bạn có thể dùng
CODE
insert into Ten_Bang_Ban_Muon values(giá_tri1,Giátrị2,giátrị3,...tuỳ theo số cột trong 1 bảng);

tuy nhiên tùy từng kiểu dữ liệu mà bạn phải đặt giá trị trong dấu nháy đơn
ví dụ như kiểu dữ liệu mà ta tạo ở bảng admin đều là kiểu text thì như vậy ta phải đặt các giá trị trong dấu nháy đơn, còn ví dụ như kiểu dữ liệu là kiểu byte thì không cần đặt trong dấu nháy đơn

tôi lấy ví dụ: sau khi tôi tạo cái bảng admin ở trên tôi bắt đầu tạo một dòng đầu tiên trong bảng admin :

CODE
insert into admin values('fanham', '123456', 'sinhvien2002@yahoo.com');


như vậy câu lệnh trên sẽ tạo 1 record trong bảng admin với thông tin như sau :
adminuser: fanham
password: 123456
email: sinhvien2002@yahoo.com

bạn hãy tạo thật nhiều records nữa nhé vì phần dưới tôi sẽ lấy bảng này làm ví dụ:
ví dụ tôi sẽ tạo thêm một số record với thông tin như sau:
adminuser: zieo_anhvu
password: 654321
email: zieo_anhvu@yahoo.com

----------
adminuser: sonic
password: 123654
email: sonic@yahoo.com
----------
adminuser: ccode
password: 456123
email: ccode@yahoo.com

----------
adminuser: romeowillkiss
password: meocon
email: romeowillkiss@yahoo.com
vậy khi xác định một site dính SQL injection mà họ ko lọc các ký tự đặc biệt như dấu nháy đơn ‘ và xác định được trong dữ liệu của họ có bảng admin thì bạn có thể chèn một account cho mình trong bảng admin và bạn có thể đăng nhập đây là 1 kiểu tấn công insert cơ bản. hiện vẫn còn nhiều site lắm , thậm chí khi một site có lọc dấu nháy đơn như là replace dấu nháy đơn = dấu “ thì nếu may mắn (nói chung là ko lọc kỹ) vẫn có thể dùng cách insert xong ở câu lệnh trên lại sử dụng dấu nháy đơn ở các giá trị (‘fantasy’,..) , như vậy bạn phải biến hoá một chút đó là việc mã hoá chuỗi dưới dạng hex
và những ví dụ trên hay dưới đây chỉ mang tính chất học hỏi để giúp các bạn làm quen với những câu lệnh SQL cơ bản và tôi sẽ không chịu trách nhiệm với việc ai sử dụng bài viết này vào bất cứ mục đích gì .

* Kiểu truy vấn chọn lựa : select …. from …. where …..
kiểu truy vấn này chính là 1 trong những kiểu căn bản nhất đây
chúng ta có thể truy xuất thông tin từ 1 hay nhiều bảng theo điều kiện

CODE
select Tham_Số field1, field2,… Biểu_Thức1, Biểu_Thức2,… from Tên_Bảng_CầnLấy where Điều_Kiện;


có thể sử dụng thêm cách sắp xếp giảm dần, sẽ có ví dụ cụ thể cho dễ hiểu
CODE
order by Tên_field_Muốn_Sắp_Xếp DESC;

CODE
select Tham_Số field1, field2,… Biểu_Thức1, Biểu_Thức2,… from Tên_Bảng_CầnLấy where Điều_Kiện order by Tên_field_Muốn_Sắp_Xếp DESC;


Lưu ý quan trọng :
Tham Số ở đây chính là:
all : Lấy tất cả các record (dòng)
top n : chỉ lấy n record đầu tiên
distinct : bỏ qua các dữ liệu trùng trong các field được chọn
distinctrow : bỏ qua tất cả các dữ liệu trên các record trùng nhau (điều này chỉ có hiệu lức khi chọn dữ liệu từ nhiều bảng).
nếu bạn không dùng tham số mặc định sẽ là all
nếu dùng tham số là dấu * thì mặc định sẽ chọn tất cả các fields (cột) của bảng.
nếu không dùng kiểu sắp xếp là giảm dần DESC thì mặc nhiên sắp xếp theo thứ tự tăng dần

Các Ví dụ cho phần này :
Tôi sẽ ví dụ đơn giản thôi

để lấy thông tin đầu tiên tin trong bảng admin tôi dùng:
CODE
select top 1 * from admin;

sau khi run bạn sẽ được thông tin về record đầu tiên trong bảng admin đó là

adminuser: fanham
password: 123456
email: sinhvien2002@yahoo.com

----

nếu muốn lấy thêm cái record thứ 2 quá đơn giản đó là thây vì top 1 bạn thay bằng top 2
bạn sẽ lấy được 2 record đầu tiên

vấy thế bây giờ ta chỉ muốn lấy record thứ 2 thôi thi ta dùng như thế nảo ? hè hè hè quá dơn giản

CODE
select top 1 * from admin where admin.adminuser not in ('fanham');


như vậy ở đây tôi lọc là sẽ lấy record đầu tiên và lấy tất cả các cột mà adminuser không phải là fanham
vì thế để chọn một cột làm điều kiện ta gõ TênBang.Tênfield(Cột)CầnChọn . ví dụ như ở trên tôi dùng
admin.adminuser ( nhớ là có dấu chấm ở giữa tênbảng với tên field cần chọn nha)

như vậy sau khi tôi dùng lệnh trên thì tôi sẽ lấy được thông tin user thứ 2 trong bảng admin và đó là về user là zieo_anhvu
vậy để lấy user tiếp theo thì sao đây
thì có gì đâu hãy xem code sau:

CODE
select top 1 * from admin where admin.adminuser not in ('fanham','zieo_anhvu');


và ta được user tiếp theo là sonic hí hí hí cứ thế ta sẽ được user cuối cùng
CODE
select top 1 * from admin where admin.adminuser not in ('fanham','zieo_anhvu','sonic','ccode');

và kết quả là thông tin về romeowillkiss hí hí là tôi đó

chắc các bạn sẽ thấy những dòng lệnh kia ô hô hình như là các bạn thấy khá quen phải không ? quen chứ còn gì vì chác là có lần bạn đã xem một bài về SQL injection của cao thủ nào đó tuy nhiên vì hệ quản trị là MS SQL server cho nên nó khác về các đối tượng như table_name , coloumn_name rồi thì
information_schema.columns ; information_schema.tables ; và sử dụng khai thác bằng convert , union ,….
chắc các bạn đã thấy quen đúng ko

hè hè nhưng mà còn ở đây là tôi bảo các bạn tự create bảng admin ở nhà và là MS Access chỉ để giúp các bạn nắm lấy một số câu lệnh cơ bản học hỏi thôi và ko hề phạm luật nhé .

ơ tôi nói đến đâu rồi ý nhỉ à nhớ rồi tiếp tục nào

vậy thế bây giờ bạn làm một dữ liệu về tin tức chẳng hạn và dĩ nhiên là có ngày tháng năm đàng hoàng
và bây giờ bạn muốn lấy record mới nhất ầy tiếc là tôi lại làm bảng admin

ví dụ: hãy lấy bản tin mới nhất
giả sử có bảng tintuc và có field ngaytintuc chẳng hạn

thì bạn dùng order by á để sắp xếp giảm dần
CODE
select top 1 * from tintuc order by ngaytintuc DESC;

thế là bạn đã truy xuất được cái tin tức mới nhất

Rồi thế bây giờ bạn đã có một bảng nào đấy và dự định sẽ tạo một bảng với một số dữ liệu từ bảng đã có kia và có kèm theo điều kiện thì bạn dùng:
CODE
select Tên_Field_Muốn_Dùng into Ten_Bang_Muon_Tạo from tên_bảng_nguồn where Điều_Kiện_Lọc;

CODE
select admin.adminuser, admin.password, admin.email into admin1 from admin where admin.adminuser like "ro*";


câu lệnh trên sẽ cho phép tôi tạo một bảng có tên là admin1 từ bảng admin và bảng của tôi cũng bao gồm các cột như adminuser, password,email nhưng tôi chỉ lấy những adminuser nào có hai chữ ro ở đầu
vì thế câu lệnh trên sẽ cho kết quả là thông tin của user : romeowillkiss
bạn thử nhập thêm một user có hai chữ ro ở đầu thế nào nó cũng chọn luôn
ở trên tôi dùng like có nghĩa là “tương tự” , “giống “
he he he like chắc các bạn cũng thấy quen hỉ

bây giờ bạn đang có một adminuser trong bảng admin là ccode chẳng hạn và bạn thấy là email của user này chưa đúng bạn muốn cập nhật lại thì bạn dùng :

CODE
update Tên_Bảng_Muốn_Cập_Nhật set TênFiedl(Cột)_sẽCậpNhật = BiểuThức_CậpNhật where ĐiềuKiện;


tôi sẽ làm Ví dụ trên với ccode:
CODE
update admin set admin.email = 'thvgt@yahoo.com' where admin.email='ccode@yahoo.com';


như vậy bạn có thể vào lại table admin để kiểm tra he he he

bây giờ là sang phần xoá dữ liệu của một bảng
giả sử bạn thấy user fanham trong admin he he he muốn xoá user này đi thì bạn dùng
CODE
delete * from Tên_Bảng where ĐiềuKiện;


và tôi sẽ làm ví dụ với fanham
CODE
delete * from admin where admin.adminuser='fanham';


bâu giờ sẽ là câu lệnh để nối dữ liệu vào 1 bảng từ một bảng

lúc nãy tôi đã tạo bảng admin1 đúng không nào
và trong đó chỉ có 1 record về romeowillkiss thôi bây giờ tôi muốn thêm fanham chẳng hạn và có kèm điều kiện
tôi dùng
Bài Viết Của : Romeowillkiss