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