Tự Học SQL

SQL

1, CSDL - database ?

Cơ sở dữ liệu (viết tắt CSDL; tiếng Anh là database) được hiểu theo cách định nghĩa kiểu kĩ thuật thì nó là một tập hợp thông tin có cấu trúc. Tuy nhiên, thuật ngữ này thường dùng trong công nghệ thông tin và nó thường được hiểu rõ hơn dưới dạng một tập hợp liên kết các dữ liệu, thường đủ lớn để lưu trên một thiết bị lưu trữ như đĩa hay băng. Dữ liệu này được duy trì dưới dạng một tập hợp các tập tin trong hệ điều hành hay được lưu trữ trong các hệ quản trị cơ sở dữ liệu.

Hệ quản trị cơ sở dữ liệu (tiếng Anh: Database Management System - DBMS), là phần mềm hay hệ thống được thiết kế để quản trị một cơ sở dữ liệu. Cụ thể, các chương trình thuộc loại này hỗ trợ khả năng lưu trữ, sửa chữa, xóa và tìm kiếm thông tin trong một cơ sở dữ liệu (CSDL). Có rất nhiều loại hệ quản trị CSDL khác nhau: từ phần mềm nhỏ chạy trên máy tính cá nhân cho đến những hệ quản trị phức tạp chạy trên một hoặc nhiều siêu máy tính.

Tuy nhiên, đa số hệ quản trị CSDL trên thị trường đều có một đặc điểm chung là sử dụng ngôn ngữ truy vấn theo cấu trúc mà tiếng Anh gọi là Structured Query Language (SQL). Các hệ quản trị CSDL phổ biến được nhiều người biết đến là MySQL, Oracle, PostgreSQL, SQL Server, DB2, Infomix, v.v. Phần lớn các hệ quản trị CSDL kể trên hoạt động tốt trên nhiều hệ điều hành khác nhau như Linux, Unix và MacOS ngoại trừ SQL Server của Microsoft chỉ chạy trên hệ điều hành Windows.wikipediaĐó là mớ thông tin mình thấy cũng đủ để sáo rỗng và bao hoa khi mọi người hỏi cái gì đó liên quan tới và ta cần bốc phet!

hãy tưởng tượng cơ sở dữ liệu như là một danh sách lớp

Tất nhiên đây không phải là hệ CSDSL mà ta đang nói tới rồi, nhưng mà ta có thể tưởng tượng và cấu trúc nó trong đầu như thế!

Ở đây, ta có danh sách lớp

Kinh tế đối ngoại - Informations gồm các cột TT,SBD,Mã Ngành,Tên, Ngày sinh

Một hôm, ông thầy bạn đưa cho bạn mộ danh sách dài lê thê (vì là ví dụ nên chỉ có 10 người, chứ thực tế...) và bảo với bạn làm một số yêu cầu sau đây:

1. Em tìm xem có ai tên Anh và sinh năm 85, ghi hết thông tin ra cho thầy.

2. Đếm giùm thầy có bao nhiêu người họ Nguyễn

3. Tìm Họ và Tên của người có số TT là 3 và 7

4. Thêm vào danh sách 2 em này...(ộng thầy ổng đưa thông tin cho bạn điền.

Thoạt nhìn qua thì bạn thấy đây là một công việc cực kì đơn giản, không phải chỉ vì danh sách chỉ có 10 người, mà là vì chỉ cần nhìn vào là điền, tìm, gạch, khá đơn giản. Nhưng mà bạn đã thử mô tả lại chi tiết từng bước cho một đứa bé ngốc làm việc chưa( tính trường hợp đứa bé biết đọc chữ!)

!!!

Đây là theo mình sẽ mô tả:

1: Nhìn vào cột tên,tìm từng hàng, nếu là người tên Anh, nhìn ngang sang cùng hàng đó, cột Ngày sinh mà vào năm 85 thì ghi thông tin ra, cứ thế tìm đến hàng cuối cùng.

2: Nhìn vào cột Họ, tìm từng hàng, Nếu Họ bắt đầu với từ Nguyễn thì số người họ Nguyễn tăng lên một.

3: Nhìn vào cộ TT tìm đến hàng có giá trị là 3 thì nhìn sang cột Họ và cột tên, ghi ra.

_ Tương tự cho người có số thứ tự là 7.

4: Tương ứng với từng cột, ghi thông tin mà ông thầy cho vào, thông tin của cùng một người thì cùng nằm trên một hàng.

Ông thầy sẻ chả đua cho bạn số TT và bạn sẽ phải tự tay điền vào

Ví dụ này gồm cả mấy cái taho tác nhìn qua, nhìn lại là để các bạn hiểu rõ tập hợp liên kết các dữ liệu. Đương nhiên cụ thể như thế nào thì ta chưa nói đến, nhưng mình chỉ muốn làm rỏ cho các bạn biết cái máy nó chạy khác thằng người ở chỗ"chạy"là hoạt động chứ không phải là một cách di chuyễn ở đó hai chân có nhiệm vụ cử động sao cho cơ thể dịch chuyễn tới chỗ mong muốn, và tại một thời điểm nào đó cả hai chân cùng thời không tiếp đất!

Đùa thôi, nhưng thật ra ý mình là máy móc và con người có cách'suy nghĩ"khác nhau, với những câu hỏi trên yêu cầu trên nếu có một ai đó hỏi bạn phải làm như thế nào, thì chắc câu trả lời đơn giản của ta chỉ là nhin vào và chép vô.

Cho tới khi cái máy vi tính có thể hiểu được tới mức như thế, ta vẫn phải dùng tới những ngôn ngữ lập trình với các cú pháp dựng sẵn và bộ óc của con người để nghĩ xem cần phải ghi cái gì ra.

2, SQL là gì ?

Ngôn ngữ truy vấn có cấu trúc (Stucted Query Language)

Ngôn ngữ truy vấn có cấu trúc (SQL) là ngôn ngữ chuẩn hóa để định nghĩa và xử lý dữ liệu trong một cơ sở dữ liệu quan hệ.

Tất cả các hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) đều hiểu được SQL.

Dưới đây là một số thông tin về SQL:

* SQL được đặc biệt tạo ra như một phần của lý thuyết quan hệ. Bạn cần một ngôn ngữ để trao đổi với cơ sở dữ liệu, để lấy ra dữ liệu, hoặc để sửa đổi dữ liệu.

* SQL là một ngôn ngữ không dẫn đường. Nói cách khác, với SQL, bạn không phải ra lệnh cho DB2 hãy tìm một bản ghi, hãy đọc con trỏ của nó và lần theo con trỏ đó tới hàng có liên quan trong bảng. Chỉ cần đơn giản nói DB2 phải làm gì và DB2 sẽ biết cách xử lý lệnh. Đơn giản thế thôi!

* Bạn có thể sử dụng SQL để sửa đổi diện mạo của một bảng mà không phải đưa nó ra ngoại tuyến (offline), có thể thêm các cột mới vào một bảng hiện có hay thêm các quy tắc nghiệp vụ vào định nghĩa của bảng.

Trích IBM

MySQL

MySQL là hệ quản trị cơ sở dữ liệu mã nguồn mở phổ biến nhất thế giới và được các nhà phát triển rất ưa chuộng trong quá trình phát triển ứng dụng.

Vì MySQL là cơ sở dữ liệu tốc độ cao, ổn định và dễ sử dụng, có tính khả chuyển, hoạt động trên nhiều hệ điều hành cung cấp một lớn các hàm tiện ích rất mạnh.

Với tốc độ và tính bảo mật cao, MySQL rất thích hợp cho các ứng dụng có truy cập CSDL trên internet. MySQL miễn phí hoàn toàn cho nên bạn có thể tải về MySQL từ trang chủ. Nó có nhiều phiên bản cho các hệ điều hành khác nhau: phiên bản Win32 cho các hệ điều hành dòng Windows, Linux, Mac OS X, Unix, FreeBSD, NetBSD, Novell NetWare, SGI Irix, Solaris, SunOS, ...

MySQL là một trong những ví dụ rất cơ bản về Hệ Quản trị Cơ sở dữ liệu quan hệ sử dụng Ngôn ngữ truy vấn có cấu trúc (SQL).MySQL được sử dụng cho việc bổ trợ PHP, Perl, và nhiều ngôn ngữ khác, nó làm nơi lưu trữ những thông tin trên các trang web viết bằng PHP hay Perl,...Wikipedia

Đọc bài này tốt nhất các bạn cũng nên đọc qua các tài liệu về cách làm việc của php hay asp với các cơ sở dữ liệu, tham khảo song song cả hai để tránh nhàm chán!

3, SQL cú pháp                                                

Cơ sở dữ liệu bảng

Một cơ sở dữ liệu thường bao gồm một hoặc nhiều bảng. Mỗi bảng được xác định bởi một tên (ví dụ: "Khách hàng" hoặc "Đặt hàng"). Bảng chứa các hồ sơ (hàng) với các dữ liệu.

Dưới đây là một ví dụ về một bảng gọi là "Thongke":

P_Id

LastName

FirstName

Address

City

1

Dinh

Linh

30 Hoang hoa tham

Ha long

2

Nguyen

Tung

25 Hung vuong

Da nang

3

Hoang

Phuong

142 Pho moi

Bac ninh

Bảng ở trên có ba hồ sơ (một cho mỗi người) và năm cột (P_Id, LastName, FirstName, Address và City).

-Lệnh SQL

Hầu hết các hành động mà bạn cần phải thực hiện trên cơ sở dữ liệu được thực hiện với các câu lệnh SQL.

Câu lệnh SQL sau sẽ chọn tất cả các bản ghi trong bảng "Thongke":

Mã nguồn [chọn]:

SELECT * FROM Thongke

Trong hướng dẫn này chúng tôi sẽ dạy cho bạn tất cả các câu lệnh SQL khác nhau.

Hãy nhớ rằng ...

*. SQL không phải là trường hợp nhạy cảm

-Dấu chấm phẩy sau câu lệnh SQL?

Một số hệ thống cơ sở dữ liệu yêu cầu asemicolon ở cuối của mỗi statement.

Semicolon SQL là cách tiêu chuẩn để phân biệt mỗi câu lệnh SQL trong các hệ thống cơ sở dữ liệu cho phép nhiều hơn một câu lệnh SQL được thực hiện trong cùng một yêu cầu tới server .

Chúng ta đang sử dụng MS Access và SQL Server 2000 và chúng ta không cần phải đặt một dấu chấm phẩy sau mỗi câu lệnh SQL, nhưng một số chương trình cơ sở dữ liệu buộc bạn phải sử dụng. 

-SQL DML và DDL

SQL có thể được chia thành hai phần:

Ngôn ngữ thao tác dữ liệu (DML) và Ngôn ngữ Định nghĩa dữ liệu (DDL) truy vấn và cập nhật commandsform phần DML của SQL.

*. SEFECT-chiết xuất dữ liệu từ một cơ sở dữ liệu 

*. UPDATE-cập nhật dữ liệu trong cơ sở dữ liệu 

*. DELETE-xóa dữ liệu từ một cơ sở dữ liệu 

*. INSERT INTO-chèn dữ liệu mới vào một phần database

DDL của các bảng cơ sở dữ liệu SQL giấy phép được tạo ra hoặc bị xóa . Nó cũng xác định chỉ số (phím), quy định cụ thể liên kết giữa các bảng, và áp đặt các ràng buộc giữa các bảng. Các lệnh DDL quan trọng nhất của SQL là: 

*. CREATE DATABASE-tạo ra một cơ sở dữ liệu mới 

*. ALTER DATABASE-thay đổi một cơ sở dữ liệu 

*. CREATE TABLE-tạo ra một bảng mới 

*. ALTER TABLE-sửa đổi một bảng 

*. DROP TABLE-xóa một bảng

*. CREATE INDEX-tạo một chỉ mục (khoá đểtìm kiếm - search key) 

*. DROP INDEX-xóa một chỉ số

4, SQL chọn báo cáo

Các câu lệnh SQL SELECT

Các câu lệnh SELECT được sử dụng để chọn dữ liệu từ một cơ sở dữ liệu.

Kết quả được lưu trữ trong một bảng kết quả, được gọi là kết quả thiết lập.

SQL chọn Cú pháp

Mã nguồn[chọn]:

SELECT column_name(s)

FROM table_name

Và

SELECT * FROM table_name

Lưu ý: SQL không phải là trường hợp nhạy cảm. SELECT là chọn.

-An SQL SELECT Example

Ta lại xem bảng "Thongke":

P_Id

LastName

FirstName

Address

City

1

Dinh

Linh

30 Hoang hoa tham

Ha long

2

Nguyen

Tung

25 Hung vuong

Da nang

3

Hoang

Phuong

142 Pho moi

Bac ninh

Bây giờ chúng ta muốn chọn nội dung của các cột có tên là"LastName" và"FirstName" trong bảng trên.

Chúng ta sử dụng báo cáo SELECT sau đây: 

Mã nguồn[chọn]

SELECT LastName,FirstName FROM Thongke

Và kết quả thiết lập sẽ như thế này:

LastName

FirstName

Dinh

Linh

Nguyen

Tung

Hoang

Phuong

-SELECT * Example

Bây giờ chúng ta muốn chọn tất cả các cột từ bảng.

Chúng ta sử dụng báo cáo SELECT sau đây : Mã nguồn[chọn]:

SELECT * FROM Thongke

Lưu ý : Các dấu hoa thị (*) là một cách nhanh chóng lựa chọn tất cả các cột tập hợp kết quả sẽ như thế này:

P_Id

LastName

FirstName

Address

City

1

Dinh

Linh

30 Hoang hoa tham

Ha long

2

Nguyen

Tung

25 Hung vuong

Da nang

3

Hoang

Phuong

142 Pho moi

Bac ninh

-Chuyển hướng trong một kết quả-thiết lập

Hầu hết các hệ thống phần mềm cơ sở dữ liệu cho phép chuyển hướng trong các thiết lập kết quả với chức năng lập trình, như: Move-To-First-Record,Get-Record-Content, Move-To-Next-ghi, etc.Programming các chức năng như theseare không phải là một phần của hướng dẫn này.

Để tìm hiểu về cách truy cập dữ liệu với các cuộc gọi chức năng, xin vui lòng truy cập hướng dẫn về PHP hoặc hướng dẫn ADO.

5, SQL SELECT DISTINCT Báo cáo - Loại bỏ kết quả thừa

SQL SELECT DISTINCT Báo cáo

Trong một bảng, một số các cột có thể chứa các giá trị trùng lặp. Đây không phải là một vấn đề, tuy nhiên, đôi khi bạn sẽ muốn vào danh sách chỉ có giá trị khác nhau (khác biệt) trong một bảng.

Các từ khóa riêng biệt có thể được sử dụng để trở về giá trị chỉ riêng biệt (khác nhau).

-SQL SELECT DISTINCT Cú pháp

Mã nguồn[chọn]:

SELECT DISTINCT column_name(s)

FROM table_name

-SELECT DISTINCT Example

Chúng ta lại xem bảng "Thongke":

P_Id

LastName

FirstName

Address

City

1

Dinh

Linh

30 Hoang hoa tham

Ha long

2

Nguyen

Tung

25 Hung vuong

D nang

3

Hoang

Phuong

142 Pho moi

Bac ninh

Bây giờ chúng ta muốn chọn chỉ có giá trị khác biệt với các cột có tên "City" từ bảng trên.

Chúng ta sử dụng báo cáo sau đây SELECT:

Mã nguồn[chọn]: 

SELECT DISTINCT City FROM Thongke

Tập hợp kết quả sẽ như thế này:

City

Ha long

Da nang

Bac ninh

6, SQL Mệnh đề WHERE

Mệnh đề WHERE 

Mệnh đề WHERE được sử dụng để trích xuất các hồ sơ hoàn thành một tiêu chuẩn quy định.

SQL Cú pháp

Mã nguồn[chọn]:

SELECT 

column_name(s) 

FROM table_name 

WHERE column_name 

operator value

-Mệnh đề WHERE ví dụ 

Lại xem bảng "Thongke":

P_Id

LastName

FirstName

Address

City

1

Dinh

Linh

30 Hoang hoa tham

Ha long

2

Nguyen

Tung

25 Hung vuong

Da nang

3

Hoang

Phuong

142 Pho moi

Bac ninh

Bây giờ chúng ta muốn chọn chỉ có những người sống trong thành phố"Hạ long" từ bảng.

Chúng ta sử dụng câu lệnh sau đây SELECT: Mã nguồn[chọn]:

SELECT * FROM 

Thongke

WHERE 

City='ha long'

Tập hợp kết quả sẽ như thế này:

P_Id

LastName

FirstName

Address

City

1

Dinh

Linh

30 Hoang hoa tham

Ha long

-Báo giá khoảng Fields

SQL văn bản sử dụng dấu ngoặc đơn bao quanh các giá trị văn bản (hầu hết các hệ thống cơ sở dữ liệu cũng sẽ chấp nhận các dấu ngoặc kép) Mặc dù, giá trị số không nên kèm theo các giá trị văn bản quotes.

+Đối với giá trị văn bản:

Mã nguồn[chọn]: 

This is correct: 

SELECT * FROM 

Thongke WHERE 

FirstName='Linh'

This is wrong:

SELECT * FROM 

Thongke WHERE 

FirstName=Linh

+Đối với giá trị số:

Mã nguồn[chọn]:

This is correct:

SELECT * FROM 

Thongke WHERE 

Year=1965

This is wrong: 

SELECT * FROM 

Thongke WHERE 

Year='1965'

-Các khai thác cho phép trong khoản đề WHERE

Với mệnh đề WHERE, các khai thác sau đây có thể được sử dụng:

Điều hành

Mô tả

=

Bình Đẳng

<> 

Không bằng

Lớn hơn

Nhỏhơn

> =

Lớn hơn hoặc bằng

<=

Nhỏ hơn hoặc bằng

BETWEEN

Giữa một range

LIKE

bao gồm Tìm kiếm một pattern

IN

bạn biết giá trị chính xác mà bạn muốn quay trở lại ít nhất một trong columns

Lưu ý: Trong một số phiên bản của SQL <operator> có thể được viết như !=

7, SQL AND - OR Các khai thác

SQL AND - OR Các khai thác

AND - OR khai thác được sử dụng để lọc các bản ghi dựa trên nhiều hơn một điều kiện.

-AND - OR Các khai thác Và nhà điều hành sẽ hiển thị một bản ghi nếu cả hai điều kiện đầu tiên và điều kiện thứ hai là đúng.

Toán tử OR hiển thị một bản ghi nếu một trong hai điều kiện đầu tiên hoặc điều kiện thứ hai là đúng.

Ví dụ về AND Bảng "Thongke":

P_Id

LastName

FirstName

Address

City

1

Dinh

Linh

30 Hoang hoa tham

Ha long

2

Nguyen

Tung

25 Hung vuong

Da nang

3

Hoang

Phuong

142 Pho moi

Bac ninh

Bây giờ chúng ta muốn chọn người có họ là "Hoang" và tên cuối cùng bằng"Phuong":

Chúng ta sử dụng các báo cáo sau đây SELECT:

Mã nguồn[chọn]:

SELECT * FROM 

Thongke WHERE 

FirstName='Hoang' 

AND

LastName='Phuong'

Tập hợp kết quả sẽ như thế này:

P_Id

LastName

FirstName

Address

City

3

Hoang

Phuong

142 Pho moi

Bac ninh

-Ví dụ về OR điều hành 

Ví dụ Bây giờ chúng ta muốn chọn chỉ có người có tên "Linh" hoặc tên là "Phuong": Chúng tôi sử dụng các báo cáo sau đây SELECT:

Mã nguồn[chọn]:

SELECT * FROM

Thongke WHERE 

FirstName = 'Linh' 

OR

FirstName = 'Phuong'

Và tập hợp kết quả sẽ như thế này:

P_Id

LastName

FirstName

Address

City

1

Dinh

Linh

30 Hoang hoa tham

Ha long

3

Hoang

Phuong

142 Pho moi

Bac ninh

-Kết hợp VÀ & OR 

Bạn cũng có thể kết hợp AND và OR (sử dụng dấu ngoặc đơn để tạo thành các biểu thức phức tạp) Bây giờ chúng tôi muốn chọn chỉ có người có tên Là"Linh", họ là "Dinh" hoặc "Hoàng": Chúng tôi sử dụng câu lệnh SELECT như sau: 

Mã nguồn[chọn]:

SELECT * FROM 

Thongke WHERE

FirstName = 'Linh'

AND 

(LastName =' Dinh '

OR

LastName =' Hoang ')

tập hợp kết quả sẽ như thế này:

P_Id

LastName

FirstName

Address

City

1

Dinh

Linh

30 Hoang hoa tham

Ha long

8, SQL ORDER BY Keyword sắp xếp theo từ khóa

SQL ORDER BY Từ khoá

ORDER BY từ khoá được sử dụng để sắp xếp các kết quả thiết lập.

-Từ khoá đề ORDER BY

ORDER BY từ khoá được sử dụng để sắp xếp các kết quả được thiết lập bởi một cột quy định.

ORDER BY loại từ khóa hồ sơ thứ tự tăng dần theo mặc định.

Nếu bạn muốn sắp xếp các bản ghi trong một thứ tự giảm dần, bạn có thể sử dụng từ khoá DESC.

SQL ORDER BY Cú pháp

Mã nguồn[chọn]:

SELECT 

column_name(s)

FROM table_name

ORDER BY 

column_name(s) 

ASC|DESC

-ORDER BY Ví dụ

Bảng "Thongke" :

P_Id

LastName

FirstName

Address

City

1

Dinh

Linh

30 Hoang hoa tham

Ha long

2

Nguyen

Tung

25 Hung vuong

Da nang

3

Hoang

Phuong

142 Pho moi

Bac ninh

4

Tran

Tu

14 hong bang

Hai phong

Bây giờ chúng ta muốn chọn tất cả những người từ bảng trên, tuy nhiên, chúng ta muốn sắp xếp những người theo họ của những người đó.

Chúng ta sử dụng các báo cáo sau đây SELECT:

SELECT * FROM

Thongke

ORDER BY LastName

The tập hợp kết quả sẽ như thế này:

P_Id

LastName

FirstName

Address

City

1

Dinh

Linh

30 Hoang hoa tham

Ha long

3

Hoang

Phuong

142 Pho moi

Bac ninh

2

Nguyen

Tung

25 Hung vuong

Da nang

4

Tran

Tu

14 hong bang

Hai phong

-ORDER BY DESC Ví dụ

Bây giờ chúng ta muốn chọn tất cả những người từ bảng trên, tuy nhiên, chúng ta muốn sắp xếp những người giảm dần theo họ của những người đó.

Chúng ta sử dụng báo cáo sau đây SELECT: 

Mã nguồn[chọn]:

SELECT * FROM 

Thongke 

ORDER BY LastName 

DESC 

Tập hợp kết quả sẽ như thế này:

P_Id

LastName

FirstName

Address

City

4

Tran

Tu

14 hong bang

Hai phong

2

Nguyen

Tung

25 Hung vuong

Da nang

3

Hoang

Phuong

142 Pho moi

Bac ninh

1

Dinh

Linh

30 Hoang hoa tham

Ha long

9, SQL Insert

SQL INSERT INTO Statement

» INSERT INTO tuyên bố được sử dụng để chèn hồ sơ mới trong một bảng.

-INSERT INTO Statement

INSERT INTO tuyên bố được sử dụng để chèn một hàng mới trong một bảng.

SQL INSERT INTO Cú pháp

Nó có thể để viết INSERT INTO tuyên bố trong hai hình thức.Hình thức đầu tiên không xác định tên cột dữ liệu sẽ được chèn vào, giá trị duy nhất:

Mã nguồn[chọn]:

INSERT INTO table_name

VALUES (value1, value2,value3,...)

Hình thức thứ hai quy định cụ thể cả tên cột và các giá trị (value) sẽ được chèn vào: 

Mã nguồn[chọn]:

INSERT INTO table_name 

(column1, column2, column3 ,...)

VALUES (value1, value2, value 3 ,...) 

- SQL INSERT INTO Ví dụ

Chúng ta có sau " Thongke ":

P_Id

LastName

FirstName

Address

City

1

Dinh

Linh

30 Hoang hoa tham

Ha long

2

Nguyen

Tung

25 Hung vuong

D nang

3

Hoang

Phuong

142 Pho moi

Bac ninh

-Bây giờ chúng ta muốn chèn một hàng mới trong bảng "Thongke" sử dụng câu lệnh SQL sau đây:

Mã nguồn[chọn]:

INSERT INTO Thongke

VALUES (4, 'Nguyen', 'Tuan', '11 Minh ha', 'Ha long') 

-Bảng"Thongke" sẽ như thế này:

P_Id

LastName

FirstName

Address

City

1

Dinh

Linh

30 Hoang hoa tham

Ha long

2

Nguyen

Tung

25 Hung vuong

D nang

3

Hoang

Phuong

142 Pho moi

Bac ninh

4

Nguyen

Tuan

11 Minh ha

Ha long

-Chèn dữ liệu Chỉ trong riêng từng Cột

Nó cũng có thể chỉ thêm dữ liệu cụ thể columns.

câu lệnh SQL sau sẽ thêm một hàng mới, nhưng chỉ thêm dữ liệu gồm:

P_Id "," LastName "và" FirstName ":

Mã nguồn[chọn]:

INSERT INTO Thongke

(P_Id, LastName, FirstName)

VALUES (5, 'Hoang', 'Minh') 

Bảng"Thongke" sẽ như thế này:

P_Id

LastName

FirstName

Address

City

1

Dinh

Linh

30 Hoang hoa tham

Ha long

2

Nguyen

Tung

25 Hung vuong

D nang

3

Hoang

Phuong

142 Pho moi

Bac ninh

4

Nguyen

Tuan

11 Minh ha

Ha long

5

Minh

Hoang

10, SQL Update (cập nhật báo cáo)

SQL Cập nhật Báo cáo

» Các câu lệnh UPDATE được sử dụng để cập nhật các bản ghi trong một bảng.

-Tuyên bố UPDATE

Các câu lệnh UPDATE được sử dụng để cập nhật hồ sơ hiện có trong một bảng.

UPDATE Cú pháp SQL:

Mã nguồn[chọn]:

UPDATE table_name

SET column1=value, column2=value2,...

WHERE some_column=some_value

Lưu ý: Thông báo mệnh đề WHERE trong cú pháp UPDATE. Mệnh đề WHERE quy định cụ thể hồ sơ hoặc hồ sơ được cập nhật. Nếu bạn bỏ qua mệnh đề WHERE, tất cả hồ sơ sẽ được cập nhật! 

-SQL UPDATE Ví dụ:

Ví dụ Bảng"Thongke":

P_Id

LastName

FirstName

Address

City

1

Dinh

Linh

30 Hoang hoa tham

Ha long

2

Nguyen

Tung

25 Hung vuong

Da nang

3

Hoang

Phuong

142 Pho moi

Bac ninh

4

Nguyen

Tuan

11 Minh ha

Ha long

5

Minh

Hoang

Bây giờ chúng ta muốn cập nhật thông tin thêm cho bạn "Minh Hoang" vào bảng.

Chúng ta sử dụng câu lệnh SQL sau đây:

Mã nguồn[chọn]:

UPDATE Thongke

SET Address='67 Hong ha', City='Ha long'

WHERE LastName='Minh' AND FirstName='Hoang'

+Và bảng "Thongke" sẽ như thế này:

P_Id

LastName

FirstName

Address

City

1

Dinh

Linh

30 Hoang hoa tham

Ha long

2

Nguyen

Tung

25 Hung vuong

Da nang

3

Hoang

Phuong

142 Pho moi

Bac ninh

4

Nguyen

Tuan

11 Minh ha

Ha long

5

Minh

Hoang

67 Hong ha

Ha long

-SQL Cập nhật: 

Cảnh báo: Hãy cẩn thận khi cập nhật hồ sơ. Nếu chúng ta đã bỏ qua mệnh đề WHERE trong ví dụ trên, như thế này: 

Mã nguồn[chọn]:

UPDATE Thongke

SET Address='67 Hong ha', City='Ha long'

+Thì Bảng"Thongke" sẽ trông như thế này đây :

P_Id

LastName

FirstName

Address

City

1

Dinh

Linh

67 Hong ha

Ha long

2

Nguyen

Tung

67 Hong ha

Ha long

3

Hoang

Phuong

67 Hong ha

Ha long

4

Nguyen

Tuan

67 Hong ha

Ha long

5

Minh

Hoang

67 Hong ha

Ha long

11, SQL Delete (xóa)

SQL DELETE Tuyên Bố

» Câu lệnh DELETE được sử dụng để xóa các bản ghi trong một bảng.

-Tuyên bố DELETE

Các câu lệnh DELETE được sử dụng để xóa các hàng trong một bảng.

SQL DELETE Cú pháp

Mã nguồn[chọn]:

DELETE FROM table_name

WHERE some_column=some_value

+Lưu ý: Thông báo mệnh đề WHERE trong các cú pháp DELETE. Các mệnh đề WHERE quy định cụ thể hồ sơ hoặc hồ sơ cần xóa. Nếu bạn bỏ qua mệnh đề WHERE, tất cả hồ sơ sẽ bị xóa!

-SQL DELETE Ví dụ

Bảng "Thongke":

P_Id

LastName

FirstName

Address

City

1

Dinh

Linh

30 Hoang hoa tham

Ha long

2

Nguyen

Tung

25 Hung vuong

Da nang

3

Hoang

Phuong

142 Pho moi

Bac ninh

4

Nguyen

Tuan

11 Minh ha

Ha long

5

Minh

Hoang

67 Hong ha

Ha long

Bây giờ chúng ta muốn xóa người có tên "Minh Hoang" .

Chúng ta sử dụng câu lệnh SQL sau đây: 

Mã nguồn[chọn]:

DELETE FROM Thongke

WHERE LastName='Minh' AND

FirstName='Hoang'

+Bảng"Thongke" sẽ như thế này:

P_Id

LastName

FirstName

Address

City

1

Dinh

Linh

30 Hoang hoa tham

Ha long

2

Nguyen

Tung

25 Hung vuong

Da nang

3

Hoang

Phuong

142 Pho moi

Bac ninh

4

Nguyen

Tuan

11 Minh ha

Ha long

-Xóa tất cả các hàng 

Nó có thể xóa tất cả các hàng trong một bảng .Có nghĩa là cấu trúc bảng, thuộc tính, và chỉ số sẽ còn nguyên vẹn:

Mã nguồn[chọn]:

DELETE FROM table_name

DELETE* FROM table_name

Lưu ý: Hãy rất cẩn thận khi xóa các bản ghi. Bạn không thể khôi phục lại nó!

12, Tăng tốc độ xử lý CSDL MySQL

Khi thiết kế các hệ thống lớn với nhiều người truy cập, một trong những điều người ta nghĩ đến ngay lập tức là thiết kế CSDL sao cho ta có thể truy vấn nhanh nhất có thể.

Loạt bài dưới đây sẽ trình bày các kỹ thuật tối ưu hoá hệ thống với CSDL MySQL.

Quy tắc 1: Giảm thiểu sự kết nối tới MySQL Server.Khi kết nối tới CSDL MySQL, chúng ta có 2 hàm kết nối là 

mysql_connect() và mysql_pconnect().

Về cơ bản thì hai hàm này có các tham số y hệt nhau, nhưng nội hàm của chúng có những khác biệt đáng kể.

Theo lý thuyết, mỗi lần gọi hàm mysql_connect(), hệ thống sẽ khởi tạo một kết nối mới tới CSDL, còn khi sử dụng hàm mysql_pconnect(), hệ thống sẽ tận dụng kết nối đã được thiết lập trước đó.Nếu trang Web của chúng ta được triệu gọi nhiều lần trong một khoảng thời gian ngắn, hàm mysql_connect() sẽ tiêu tốn một lượng đáng kể tài nguyên của hệ thống để thiết lập kết nối.

Vì vậy, hãy cố gắng sử dụng hàm kết nối mysql_pconnect().

Quy tắc 2: Thiết lập các trường index và cố gắng truy vấn dữ liệu thông qua các điều kiện xác lập trên chỉ số.Nếu các bạn học qua cấu trúc dữ liệu và giải thuật, hẳn chúng ta cũng phải nhớ đến các giải thuật tìm kiếm nhanh. 

Chúng ta đã đúc kết được rằng giải thuật tìm kiếm là nhanh nhất với cách tìm dựa trên bảng băm hoặc trên mảng đã sắp xếp (với thuật toán tìm kiếm nhị phân nổi tiếng).

Các trường được thiết lập ở dạng index sẽ được sắp xếp trên một file riêng, khi chúng ta truy vấn dữ liệu thông qua các trường index, các giải thuật tìm kiếm sẽ phát huy tính hiệu quả tối đa của nó, đặc biệt là các trường index dạng số.

Vì vậy, hãy cố gắng thiết kế các truy vấn cũng như CSDL sao cho tối ưu nhất dựa trên nguyên tắc chỉ số này.

Quy tắc 3: Chấp nhận dư thừa dữ liệu

Một thiết kế dữ liệu theo dạng chuẩn 4 có thể rất đẹp mắt, nhưng khi truy vấn dữ liệu, chúng ta sẽ phải"xới tung"nhiều bảng quan hệ có khi chỉ để lấy ra một record.

Ngày xưa, khi giá thành ổ cứng cao ngất ngểu, dung lượng ổ cứng bé tẹo nên các cụ phải thiết kế dữ liệu ở dạng"tiêu chuẩn cao"nhằm giảm dung lượng lưu trữ, nhưng ngày nay, dung lượng lưu trữ không còn là vấn đề đáng lo lắng, vì vậy trong một số trường hợp, hãy chịu khó hi sinh tính đẹp đẽ của chuẩn 4 để tăng tốc độ truy vấn.

Nên nhớ rằng truy vấn trên một bảng sẽ nhanh hơn rất nhiều lần khi truy vấn trên nhiều bảng quan hệ.

Quy tắc 4: Chỉ lấy đúng và đủ dữ liệu cần thiết

Nhiều người thường thích truy vấn dạng"Select *...".

Dấu * ở đây sẽ bắt hệ thống làm việc mệt nhọc hơn vì phải xử lý nhiều dữ liệu hơn.

Dữ liệu trả về cũng tiêu tốn nhiều bộ nhớ hơn.

Vì vậy, thay vì select *, hãy chỉ select những trường cần thiết.Một vấn đề nữa là khi sử dụng hàm mysql_fetch_array, nhiều người thường bỏ qua các tham số tuỳ chọn. Nếu có thể, hãy sử dụng tham số MYSQL_ASSOC, khi đó hệ thống sẽ trả về một mảng với chỉ số là tên trường, như vậy các bạn sẽ dễ hình dung và đỡ tốn bộ nhớ vì phải phát sinh thêm một mảng với chỉ số dạng số.

Quy tắc 5: Giải phóng bộ nhớ ngay sau khi sử dụng xong

Theo mặc định thì PHP sẽ giải phóng bộ nhớ sau khi chạy xong toàn bộ chương trình, nhưng với một cỗ máy chủ già nua cũ kỹ với hàng trăm lượt truy cập một lúc thì 1 KB bộ nhớ cũng là một tài nguyên cực kỳ quý giá.

Vậy tại sao chúng ta không giải phóng bộ nhớ cho những thứ không dùng đến?

Sau khi thực hiện các truy vấn và thực hiện xong các phép tính toán với các bản ghi lấy được, hãy chịu khó nhét cái function mysql_free_result() vào ngay nhé.

13, Tìm kiếm gần đúng trong SQL (MySQL)

(MySQL&PHP)

Rắc rối sẽ diễn ra khi có quá nhiều thông tin và chính ta cũng không biết chính xác phải tìm cái gì.

Sau đây mình sẽ giới thiệu tới cách bạn 2 cách để có thể tìm kiếm gần đúng trong SQL.

Cách 1: MATCH, AGAINST

Đây là một kiểu tìm kiếm Full text mà nếu các bạn vào google search một phát với từ khóa:"tìm kiếm toàn văn"sẽ ra một đống bài giống nhau hoàn toàn, không hiểu ăn cắp từ web nào ra mà cuối cùng bài nào cũng giống như bài nào.

Mấy bài nó nó rất nhiều và rất kỹ lưỡng, đến mức đọc không hiểu nỗi.

Mình chỉ hiểu sơ sơ đến mức đủ xài.

Ví dụ ta có một bảng rất đơn giản tên là topic gồm 2 cột : id_topic và subject, ý tưởng để tìm kiếm tựa bài đơn giản chỉ với một câu lệnh:

Mã nguồn[chọn]:

SELECT * FROM topic WHERE $subject=subject

Với biến $subject là những gì người dùng nhập vào(tất nhiên là đả qua xử lý như loại bỏ các ký tự đặc biệt...)

Vấn đề nảy sinh ra với cậu lệnh SQL trên là nếu người dùng nhập vào chuỗi :"con gà con"thì những chỉ những hàng chứa chuỗi chính xác như thế mới được trả về.

Điều này sẽ không thích hợp cho việc tiềm kiếm.

Giải quyết vấn đề trên với MATCH, AGAINST

Vấn đề sẽ được giải quyết khá là đơn giản với MATCH, AGAINST, câu lệnh lúc này ta dùng đơn giản chỉ là:

Mã nguồn[chọn]:

SELECT *FROM topic

WHERE MATCH(subject) AGAINST('$subject')

Viết rời ra cho các bạn dễ nhìn cấu trúc thôi, chứ chả có gì đặc biệt cả. giá trị bên trong MATCH() là tên cột chứa nội dung cần tìm, còn giá trị chứa bên trong AGAINST() chính là những gì cần tìm.

Mọi việc lúc sau ta cứ để cho hệ CSDL tự mầng.

Chú ý:Để có thể dùng MATCH, AGAINST, cột nào chứa thông tin cần tìm phải được khai báo chỉ mục FULL TEXT.

Ví dụ bảng topic trên phải được tạo ra như thế này:

Mã nguồn[chọn]:

CREATE TABLE IF NOT EXISTS topic (

id_topic int(10) unsigned NOT NULL,

subject tinytext NOT NULL,

PRIMARY KEY (id_topic),

FULLTEXT KEY subject (subject)

)ENGINE=MyISAM DEFAULT 

CHARSET=utf8 AUTO_INCREMENT=0";

Sử dụng LIKE

Nhiều bạn có kinh nghiệm sẽ ngay lập tức dừng lại ở bước này vì thực chất chỉ khi LIKE đã không thể dùng được người ta mới dùng tới MATCH, AGAINS.

Nhưng sau đây mình có một thuật giải của vấn đề này dành cho các bạn:

B 1: Xử lý chuỗi nhập vào, cho nó thành chữ thường hết, bỏ mấy cái gì không phải chữ cái ra, tốt nhất là bỏ luôn dấu.

B 2: biến chuỗi đó thành mảng, mọi phần tử của mảng là một từ trong chuỗi.

B 3: Chọn ngẩu nhiên vài trăm dòng có chứa một phần tử (chọn đại hay mặt định là phần tử đầu tiên).

Đây là bước duy nhất có dùng LIKE

Mã nguồn[chọn]:

SELECT * FROM topic WHERE subject LIKE'%array[1]%'

B 4: từ vài trăm dòng đã chọn ra, lấy cái tiêu đề (nội dung chứ cần so sánh), xử lý tương tự như chuỗi nhập vào( đừng chuyễn nó thành mảng nhé).

B 5: với các pần tử còn lại của mảng, tìm xem nó có xuất hiện bên trong mấy trăm chuỗi trả lời đả pick ra không(chạy 2 vòng lặp kép), nếu có thì gán một biến mảng kết hợp với key là id của dòng đã pick ra, mỗi lần như thế thì giá trị tăng lên 1

B 6: tuỳ theo muốn trả ra kết lấy ra 3 phần tử của mảng có giá trị cao nhất, thay đổi kháo thành giá trị, giá trị thành khoá, sau đó chạy câu lệnh truy vấn lấy ra thông tin còn lại của topic có Id tương ứng, còn nếu link bài viết dạng index?id=$id thì quá khoẻ.

Với thuật toán trên đây có lẽ vẫn chưa phải là thuật toán tối ưu nhất bởi lẽ nó vẫn chưa xác định được từ khoá cần có, cũng như có thể là rất lâu nếu tìm kiếm các từ trong tất cả các hàng, cũng như khi chọn ngẩu nhiên có thể ta đả bỏ qua các hàng chứa thông tin chính xác hơn.

14, SQL - CREATE TABLE tạo bảng

Cú pháp để tạo một table trong MySQL như sau:

Mã nguồn:[chọn]

create table<tên bảng>

<tên cột 1><loại cột><thuộc tính>,

<tên cột 2><loại cột><thuộc tính>,

.................. .............. ...................

<tên cột 1><loại cột><thuộc tính>,

primary key(<tên cột được chọn làm khoá)

)ENGINE=MyISAM DEFAULT CHARSET=utf8;

Giải thích :Mở đầu cả đoạn là từ khoá lệnh create table tiếp theo là tên table muốn tạo. tiếp đến cần quan tâm là các câu lệnh bên trong cặp dấu ngoặc ()<tên cột 1><loại cột><thuộc tính>

Cụ thể về loại và thuộc tính ta sẽ nói đến rất kỹ lưỡng ở các bài sau.

Và củng phải hiểu về hai vấn đề trên mình mới có thể giải thích nốt dòng primary key(<tên cột được chọn làm khoá)

ENGINE=MyISAM

Dòng này có nghĩa là...nói thiệt mình cũng hok hiểu rõ cho lắm, nhưng đây có nghĩa là một chọn lựa cho loại ENGINE, cái MyISAM thích hợp cho nhiều trường hợp nên thôi cứ dùng (thầy giảng lâu quá nên quên)

DEFAULT CHARSET=utf8

Khúc này thông báo rằng mả hoá ký tự mặc định được chọn là utf8.tạm thời chúng ta hãy làm wen với một ví dụ cụ thể vậy:

Mã nguồn:[chọn]

CREATE TABLE IF NOT EXISTS 'attachment' (

'a_id' smallint(5) unsigned NOT NULL auto_increment,

'a_link' text character set utf8 collate utf8_unicode_ci NOT NULL,

'a_type' smallint(5) default NULL,

PRIMARY KEY ('a_id')

) ENGINE=MyISAM DEFAULT

CHARSET=utf8 AUTO_INCREMENT=1 ;

15, Báo cáo chi tiết trạng thái của MySQL

Nếu bạn sử dụng hoặc quản lý một máy chủ MySQL, có thể bạn sẽ biết được sự cực nhọc khi muốn lấy về một bản báo cáo trạng thái riêng mà bạn có thể dễ dàng giải mã và hiểu được.

mysqlreport là một đoạn mã viết bằng Perl sẽ giúp bạn làm công việc đó dễ dàng hơn.

Đoạn script này sẽ lấy dữ liệu ra của câu lệnh SHOW STATUS'trong MySQL và hiển thị nó dưới một định dạng dễ hiểu và gọn gàng hơn.

Bây giờ chúng ta cần phải cài đặt nó.

Chúng ta sẽ sử dụng một hệ thống Linux cho bài thực hành này. Ở đây bạn cần phải có MySQl đang chạy và có cài đặt Perl trên hệ thống đó.

Sao chép nó vào hệ thống của bạn chẳng hạn như /usr/bin. Làm cho đoạn script này chuyển sang chế độ thực thi với câu lệnh sau:

# chmod 755 /usr/bin/mysqlreport

Công việc cài đặt đã kết thúc. Bây giờ chúng ta xem cách sử dụng nó. Chúng ta chỉ xem xét một số cách dùng cơ bản ở đây. Để xem danh sách chi tiết bạn có thể tìm hiểu thêm bằng cách dùng câu lệnh sau:

# mysqlreport --help Để lấy về bản báo cáo của máy chủ MySQL, bạn chạy câu lệnh sau, thay thế hostname, username, và password với các tên và password thích hợp cho máy chủ của bạn: # mysqlreport --host dbserver --user dbuser --password

Password for database user dbuser:

MySQL 5.0.37-standard-l uptime 50 17:19:6 Thu Apr 23 12:45:58 2009

__ Key

_______________________________________________ ________________

Buffer used 71.21M of 512.00M %Used: 13.91

Current 102.20M %Usage: 19.96

Write hit 99.45%

Read hit 99.78%

__ Questions

_________________________________________________ __________

Total 2.66G 607.8/s

Com_ 6.88G 1.6k/s %Total: 258.37

-Unknown 5.67G 1.3k/s 212.99

DMS 1.42G 323.4/s 53.20 QC Hits 28.37M 6.5/s 1.06

COM_QUIT 9.56M 2.2/s 0.36

Slow 4 s 12.43k 0.0/s 0.00 %DMS: 0.00

Log: ON

DMS 1.42G 323.4/s 53.20 SELECT 1.39G 317.9/s 52.30 98.31

UPDATE 14.81M 3.4/s 0.56 1.04

INSERT 7.65M 1.7/s 0.29 0.54

DELETE 1.41M 0.3/s 0.05 0.10

REPLACE 29.24k 0.0/s 0.00 0.00 Com_ 6.88G 1.6k/s 258.37

set_option 2.18G 497.6/s 81.87

stmt_execut 1.37G 313.6/s 51.60

stmt_prepar 1.09G 248.7/s 40.92

__ SELECT and Sort

_________________________________________________ ____

Scan 29.92M 6.8/s %SELECT: 2.15

Range 3.34M 0.8/s 0.24

Full join 22.95k 0.0/s 0.00

Range check 0 0/s 0.00

Full rng join 105.53k 0.0/s 0.01

Sort scan 20.06M 4.6/s

Sort range 25.60M 5.8/s

Sort mrg pass 23 0.0/s

__ Query Cache

_________________________________________________ ________

Memory usage 60.15M of 128.00M %

Used: 46.99

Block Fragmnt 19.67%

Hits 28.37M 6.5/s

Inserts 14.41M 3.3/s

Insrt:Prune 20.34:1 3.1/s

Hit:Insert 1.97:1

__ Table Locks

_________________________________________________ ________

Waited 38.89k 0.0/s %Total: 0.00

Immediate 2.82G 643.8/s

__ Tables

_________________________________________________ _____________

Open 1317 of 1536 %

Cache: 85.74

Opened 36.20k 0.0/s

__ Connections

_________________________________________________ ________

Max used 235 of 250 %Max: 94.00

Total 9.60M 2.2/s

__ Created Temp

_________________________________________________ _______

Disk table 1.19M 0.3/s

Table 41.34M 9.4/s

Size: 32.0M

File 51 0.0/s

__ Threads

_________________________________________________ ____________

Running 2 of 152

Cached 26 of 64 %

Hit: 99.93

Created 6.52k 0.0/s

Slow 0 0/s

__ Aborted

_________________________________________________ ____________

Clients 75.29k 0.0/s

Connects 475 0.0/s

__ Bytes

_________________________________________________ ______________

Sent 3.67G 837.6/s

Received 1.13G 258.4/s__InnoDB Buffer Pool

_________________________________________________ _

Usage 1.46G of 1.46G %

Used: 100.00

Read hit 97.49%

Pages Free 0 %

Total: 0.00

Data 95.00k 98.96 %

Drty: 0.07

Misc 999 1.04

Latched 1 0.00

Reads 2.02G 462.0/s

From file 50.74M 11.6/s 2.51

Ahead Rnd 2211210 0.5/s

Ahead Sql 1773580 0.4/s

Writes 130.18M 29.7/s

Flushes 13.17M 3.0/s

Wait Free 0 0/s

__ InnoDB Lock

_________________________________________________ ________

Waits 503 0.0/s

Current 0

Time acquiring

Total 845761 ms

Average 1681 ms

Max 5182 ms

__ InnoDB Data, Pages, Rows

____________________________________________

Data Reads 76.58M 17.5/s

Writes 16.05M 3.7/s fsync 5.67M 1.3/s

Pending Reads 0

Writes 0 fsync 0

Pages Created 302.89k 0.1/s

Read 189.02M 43.1/s

Written 13.17M 3.0/s

Rows Deleted 861.14k 0.2/s

Inserted 6.58M 1.5/s

Read 2.20G 502.4/s

Updated 19.54M 4.5/s

*Trong trường hợp bạn cần giúp để hiểu làm cách nào để đọc bản báo cáo được tổng hợp bởi mysqlreport bạn có thể xem các tuỳ chọn trong câu lệnh mysqlreport --help.

16, Chuẫn hoá dữ liệu

Để dữ liệu thoả mản hình thức chuẫn hoá , chúng cần đảm bảo:

* Một cột phải chứa một giá trị cơ bản, nghĩa là không có chuyện dùng mảng hay bất cứ gì bên trong ô

* Mỗi cột phải có một tên duy nhất

* Bảng phải có một tập giá trị để nhận ra duy nhất một dòng(đây gọi là khoá chính)(*)

* Không có hai dòng giống nhau.(*)

* Không được lặp lại nhóm dữ liệu(**)*: Giải pháp chính là cột TT bên trong ví dụ, cột đó bắt buộc phải tăng giá trị lên 1 một cách tự động khi thêm bất cứ một hàng nào một hàng nào.

Điều này tất nhiên sẽ khến không có một hàng nào giống nhau.

**: đả giải thích ở ha bài trước

Trục trặc khi cập nhật - xoá - thêm thông tin, cách giải quyết mà ta đưa ra là tạo thêm một bảng ở bài trước đã đưa dữ liệu về hình thức chuẫn hoá.

Khoá chính: là cột hay nhóm cột, nhận ra duy nhất một hàng, ta có thể dùng STT, số CMND làm khoá chính, điều đó tuỳ vào dữ liệu của bạn.Thường thì ta dùng STT và đặt cho chúng thuộc tính tự động tăng giá trị để không bao giờ bị trùng lặp. Ví dụ như bạn thêm thông tin của một học sinh trong lớp, thông tin đưa vào không cần cội TT và cột thứ tự sẽ tăng lên, tránh trường ngáy ngủ, viết liền hay lộn khiến trùng lặp hay bỏ sót.

Nói chung là bạn phải làm như thế nào cho khi ta thêm, xoá, cập nhật thông tin đảm bảo: tiện lợi, không trùng lặp, không làm mất dữ liệu là OK.

Để tránh các lỗi này, không gì khác là thực hành nhiều. bạn hãy tưỡng tượng ra là mình là một người làm việc sổ sách cho lớp, cho công ty, đặt ra các yêu cầu, tình huống liên quan và thử giải quyết.

Để quan hệ giữa các bảng thông tin làm việc tốt nhất, ta phải tính toán xem chúng sẽ có quan hệ với nhau như thế nào.

Đó là các hình thức quan hệ.

17, Chạy dòng lệnh SQL

Bài này sẽ hướng dẫn các bạn cách chạy các lệnh SQL mà mình học trước khi có thể phối hợp SQL và PHP hay một ngôn ngữ nào khác.

Đầu tiên các bạn nên kiếm cái host.

Nhiều bài viết, tài liệu hướng dẫn sẽ chỉ cho các bạn cách làm việc với một cửa sổ giao diện con-so-le (cái màn hình đen ngòm, chỉ có thể gỏ chữ lọc cọc), nhưng từ hồi đó tới giờ mình chưa bao giờ biết làm việc với cái đó như thế nào nên:

Sau khi cài đặt, ta hãy chạy link này:

http://127.0.0.1/phpmyadmin/php

MyAdmin là một phần mềm được thiết kế để ta có thể làm việc dễ dàng hơn với CSDL, với phần mềm này ta có thể không viết lệnh gì hết và dĩ nhiên nếu muốn viết lệnh và chạy thì vẫn chiều!

18, Trục trặc khi xoá - thêm thông tin

1-Trục trặc khi xoá thông tin lại với cái bảng quen tuộc này, nhưng là với một chút sửa đổi ở dòng thứ 10.

Ờ phần trước ta đả có một lý do tại sao không nền lưu thông tin kiểu này, nay, ta có lí do thứ hai

Giả sử ông thầy bảo bạng:Em liệt kê giùm thầy các mã ngành của trường ta( giả sử trường có duy nhất 1 lớp và 10 mem).

Sau một hồi tư duy nát óc, ta thấy có hai mã ngành đó chính là:KTĐN-2M và KTĐN-9Z.

Mọi việc khá bình thường tới một ngày, bạn xoá em thứ 10 đi, ồ, tất nhiên bạn cũng đả delete luôn mã ngành thứ hai, và nếu ông thầy lặp lại câu hỏi trên, lúc này ta chỉ còn lại một mã ngành KTĐN-2M. vấn đề là ở chỗ trường vẫn có hai mã ngành, chỉ có điều là mã ngành thứ hai không có ai thôi.

2-Trục trặc khi thêm thông tin

Vấn đề thêm thông tin là ở chỗ bạn lưu trử luôn thông tin mã ngành trong cùng một bảng với thông tin học sinh.

Bạn thấy là nếu có vần đề gì cần làm riêng với Mã ngành thì moi nó ra.

Trong thực tế chả có ai làm như thế, tuy với quy mô 1 lớp và 10 người của chúng ta thì việc này cũng chả to tát gì.

Bất cập hiện ra khi trường mở thêm một ngành với mã ngành khác. và phải trưng bày danh sách ngành ra cho các học sinh mới lựa chọn.

Sử dụng duy nhất một bản chung với thông tin học sinh đã lòi ra một cục to tướng.

Ban đầu bạn tìm tất cả mả ngành trong danh sách học sinh, đôi khi một số bị xoá như trường hợp 1, rồi khi mà cần thêm ngàng mới thì sao. hành động mà ta nghĩ tới ngay là lấy cây viết và viết ra đâu đó cũng cũng chính là tạo một bảng thong tin mới.

Dĩ nhiên việc tạo thêm các bảng và liên kết thông tin giữa chúng lại có những quy tắc sao cho sự liên kết giữa chúng mạnh mẽ nhất!

19, Trục trặc với cấu trúc khi cập nhật

Khó khăn khi cập nhật dữ liệu

Giả sử ta có một cấu trúc bảng(bàng thì được chia sẳn hàng và cột), và xin giới thiệu với các ban bảng danh sách lớp Kinh tế đối ngoại - Informations quen thuộc :

D.Mọi chuyện quá là dể dải để quản lí một lớp với 10 người!

Và trục trặc sẽ dẫn tới lật xe xuất hiện ở cột Mã Ngành!

Tất cả Mả ngành đều giống nhau, dĩ nhiên, chắc tại cùng lớp, vấn đề là....rủi tới một ngày đẹp trời, không biết tại sao ngành đó lại đổi mả lại!!

Giải quyết cái danh sách đó cũng rất là đơn giản, bội và sữ lại thôi , có gì khó đâu! Vấn đề là nếu danh sách không phải là 10, mà là 10 tỷ, và không chỉ có một cái danh sách đó!

Phòng tài vụ một cái, phòng giao1 vụ một cái, phòng ngủ một cái.......

Đổi lại mệt à.

Bạn làm ơn đừng nghĩ tới chuyện dùng chức năng tìm và thay thế từ của Word, sau đó photo ra giùm! Bởi vì thao tác tìm và thay chữ trong word thôi cũng là một con số đáng kể các thao tác lập trình đó!

Gải pháp là:

Tạo thêm một bảng danh sách mả ngành, và điển số thứ tữ của mả ngành vào cột m_tt(đổi lại từ mả ngành) ở bảng danh sách lớp Kinh tế đoối ngoại - Informations thay vì cả cái tên dài dòng.

Khi người ta xem, người ta sẽ xem cả hai bảng, dò tìm tương ứng với giá trị của cột m_tt khi cần hiệu chỉnh tên mã ngành, chỉ cần sửa một dòng ở bảng danh sách mã ngành.

Bạn đang đọc truyện trên: TruyenTop.Vip