Bài 13 MySQL

Một phần của tài liệu tài liệu tổng hợp về thiết kế web (Trang 110 - 124)

MySQL là csdl được sử dụng cho các ứng dụng Web sử dụng php (và các ngôn ngữ khác). Có nhiều công cụ hỗ trợ người sử dụng quản trị mysql để có thể thao tác các hành động liên quan đến csdl này một cách trực quan dễ dàng hơn như: mysql front, phpmyadmin, EMS FOR MYSQL, navicate, …

Cũng giống như các csdl khác, khi làm việc với csdl MySQL, ta phải đăng ký kết nối, tạo csdl, quản lý người dùng, phân quyền sử dụng, thiết kế đối tượng table của csdl và xử lý dữ liệu.

Để sử dụng các phát biểu hay các thao tác trên csdl, ta có thể sử dụng các công cụ hỗ trợ quản lý dạng đồ họa hay dùng dòng lệnh (còn gọi là command line).

13.2 Kết Nối Và Tạo CSDL Bằng Command Line

Nếu sử dụng command line, ta đến thư mục mysql\bin. Sau đó gõ dưới dấu nhắc mysql.exe. Nếu đang ở chế độ Windows, ta có thể bắt đầu từ Start  Run  c:\mysql\bin\mysql.exe kết quả giống như hình sau:

Bắt đầu từ dấu nhắc mysql> có thể bắt đầu thực hiện các phát biểu SQL của MySQL.

Lưu ý: Nếu chưa biết các lệnh cơ bản làm việc với MySQL, từ dấu nhắc mysql>, gõ ? để liệt kê các phát biểu như: connect, exit, quit, source….

Trước tiên, để tạo csdl, bắt đầu với phát biểu Mysql> create database databasename; Ví dụ tạo CSDL có tên là dbXXX như phát biểu sau:

13.3 Kết Nối Và Tạo CSDL Bằng Giao Diện Đồ Hoạ

Trong trường hợp sử dụng giao diện đồ hoạ, phần này minh họa cách sử dụng chương trình mysql front version 1.2 (bản cũ chạy khá nhẹ, không cần cài đặt). Để khởi động mysqlfront, có thể chạy tập tin mysqlfront.exe.

Nếu lần đầu tiên tạo kết nội đến csdl, cần phải tạo một kết nối Connection, cung cấp csdl tên Server hay IP csdl của máy chứa MySQL.

Trong trường hợp máy chức csdl MySQL là máy đang sử dụng, có thể sử dụng tên localhost. Username mặc định của csdl là root và Password là rỗng.

Nếu đã có csdl đang tồn tại, có thể gõ tên csdl trong phần Databases (nếu muốn mở nhiều có thể dùng dấu ; để phân cách).

Trong trường hợp lần đầu tiên, không cần cung cấp tên csdl, có thể tạo chúng sau khi kết nối. Sau khi kết nối csdl thành công, trình điều khiển csdl MySQL có giao diện như hình dưới. Công việc đầu tiên phải thực hiện là tạo csdl .

Tạo CSDL: Từ menu Tools Create Database hay R-Click vào root@localhost  Create Database.

Cung cấp tên csdl, trường hợp này chúng ta nhập tên CSDL, nhấp OK. 13.4 Quản Lý Người Dùng Trong Mysql

Để đăng nhập vào csdl MySQL, có thể sử dụng 2 cách như trình bày ở trên hoặc sau khi đã tạo ra các username khác, có thể sử dụng những username và password này để đăng nhập. Nếu sử dụng command line, chỉ cần gõ >mysql –h hostname –u username –p từ dấu nhắc. Nếu sử dụng giao diện đồ họa cần gõ thông tin đăng nhập vào các ô textbox.

Từ khoá –h chỉ tên(computer name), IP, hay localhost của máy có sử dụng csdl MySQL, -u là tên username, -p được chỉ định khi username này có password. Trong trường hợp password là rỗng, có thể không cung cấp tham số -p.

13.4.1Tạo Và Cấp Quyền Cho Người Sử Dụng

Có thể sử dụng 2 cách trên. Muốn tạo username bằng command line, co thể gõ từ dấu nhắc phát biểu sau:

GRANT

Select, Insert, Update, Delete, Index, Alter, Create, Drop, References On *.* To ‘myis’@’%’

INDENTIFIED BY ‘123456’;

Phát biểu trên vừa tạo ra username co tên là myis, với hostname là csdl hiện hành, password là

123456 và đựơc các quyền là: Select, Insert, Update, Delete,Index,Alter,Create,Drop,References trên csdl

hiện hành.

Trong trường hợp tạo ra một username không cung cấp các quyền trên csdl, co thể thực hiện như phát biểu tạo như sau:

GRANT usage

On *.* To ‘useris’@’%’ INDENTIFIED BY ‘123456’

Nếu sử dụng giao diện đồ hoạ, có thể tạo username và gán quyền như trên bằng cách sử dụng menu là: Tools User-Manager.

Các quyền trên csdl

Loại Áp dụng Diễn giải

Select Insert Update Delete Index Alter Create Drop Tables, columns Tables, columns Tables, columns Tables Tables Tables Database, Tables Database, Tables

Cho phép user truy vấn mẫu tin từ table. Cho phép user thêm mới mẫu tin từ table.

Cho phép user thay đổi giá trị của mẫu tin tồn tại trong table.

Cho phép user xóa mẫu tin tồn tại trong table. Cho phép user thêm mới hay xóa chỉ mục của table. Cho phép user thay đối cấu trúc của đối tượng table hay database tồn tại, như thêm cột, thay đổi kiểu dữ liệu cột….

Cho phép user tạo mới đối tượng table hoặc database.

Cho phép user xóa đối tượng table hoặc database.

Ngoài các quyền trên, trong MySQL còn có một số quyền không gán mặc định như bảng trên, cần có thể xem xét các quyền khi cung cấp cho người dùng.

Loại Quyền

Shutdown Process File

Cho phép người quản trị chấm dứt các hoạt động MySQL

Cho phép người quản trị xem các quá trình thực hiện của trình chủ và có thể chấm dứt một số quá trình đang thực thi.

Cho phép dữ liệu ghi vào table từ tập tin

Các username bình thường không nên cấp quyền như bảng trên cho họ. Trong trường hợp muốn cấp tất cả quyền cho username có thể dùng từ khóa all thay vì all Privileges trong phát biểu tạo user sau:

GRANT ALL

ON *.* TO ‘useris’@’%’ INDENTIFIED BY ‘123456’

Tương tự như vậy, trong trường hợp không muốn cấp bất kỳ quyền nào trên cơ sở hiện hành, có thể phát biểu cấp quyền như sau:

GRANT USAGE

ON *.* TO ‘useris’@’%’ INDENTIFIED BY ‘123456’

13.4.2Xoá Quyền Của User

Để xóa các quyền user từ csdl hiện hành, có thể sử dụng phát biểu SQL như sau: Revoke prinvileges [(column)]

On item

Trong trường hợp xóa tất cả quyền của user, ta có thể sử dụng phát biểu sau: Revoke all

On item

From username

Ví dụ: Chi tiết quá trình cấp và xoá quyền một user: Gán quyền Administrator cho user có tên

là svXXX trên mọi csdl MySQL, password là 123:

Grant all On *

To svXXX indentified by ‘123’ Xoá user có tên là svXXX trong hệ thống:

Revoke all On *

From svXXX;

Tạo một user có tên là svXXX với password là 12345, được làm việc trên csdl dbXXX, không cấp quyền cho user này:

Grant usage On dbXXX.*

To svXXX indentified by ‘12345’ Tương tự như trên nhưng cấp một số quyền cho user: Grant select, insert,delete,update,index,drop

On dbXXX.* To svXXX;

Nếu muốn xóa bớt một số quyền của user trên: Revoke update,delete,drop On dbXXX.*

From svXXX;

13.5 Các Kiểu Dữ Liệu Trong Mysql

Trước khi thiết kế csdl trên MySQL, chúng ta cần tìm hiểu một số kiểu dữ liệu thường dùng như: numeric, date and time và string.

Kiểu dữ liệu numeric

Column type Storage required

TINYINT 1 byte

SMALLINT 2 bytes MEDIUMINT 3 bytes

INT 4 bytes INTEGER 4 bytes BIGINT 8 bytes FLOAT(X) 4 if X <= 24 or 8 if 25 <= X <= 53 FLOAT 4 bytes DOUBLE 8 bytes

DOUBLE PRECISION 8 bytes

REAL 8 bytes

DECIMAL(M,D) M+2 bytes if D > 0, M+1 bytes if D = 0 (D+2, if M < D) NUMERIC(M,D) M+2 bytes if D > 0, M+1 bytes if D = 0 (D+2, if M < D)

Kiểu dữ liệu date and time

Column type Storage required

DATE 3 bytes

DATETIME 8 bytes

TIMESTAMP 4 bytes

TIME 3 bytes

YEAR 1 byte

Column type ``Zero'' value

DATETIME '0000-00-00 00:00:00' DATE '0000-00-00'

TIMESTAMP 00000000000000 (length depends on display size) TIME '00:00:00'

YEAR 0000

Kiểu dữ liệu string

Column type Storage required

CHAR(M) M bytes, 1 <= M <= 255

VARCHAR(M) L+1 bytes, where L <= M and 1 <= M <= 255 TINYBLOB, TINYTEXT L+1 bytes, where L < 2^8

BLOB, TEXT L+2 bytes, where L < 2^16 MEDIUMBLOB,

MEDIUMTEXT L+3 bytes, where L < 2^24 LONGBLOB, LONGTEXT L+4 bytes, where L < 2^32

(65535 values maximum)

SET('value1','value2',...) 1, 2, 3, 4 or 8 bytes, depending on the number of set members (64 members maximum)

Kiểu dữ liệu nhị phân chia làm 3 loại, loại thứ nhất là char (chiều dài cố định) và varchar (chiều dài biến thiên). Char cho phép nhập liệu dưới dạng chuỗi với chiều dài lớn nhất bằng chiều dài định nghĩa, nhưng khi truy cập dữ liệu trên field có khai báo dạng này cần phải xử lý khoảng trắng. Điều này có nghĩa nếu ta khai báo chiều dài là 10, nhưng chỉ nhập chuỗi 4 kí tự MySQL lưu trữ chuỗi trong bộ nhớ với chiều dài 10.

Ngược lại với kiểu char là varchar, bộ nhớ chỉ lưu trữ chiều dài đúng bằng với chiều dài ta đã nhập.

Value CHAR(4) Storage required VARCHAR(4) Storage required

'' ' ' 4 bytes '' 1 byte

'ab' 'ab ' 4 bytes 'ab' 3 bytes

'abcd' 'abcd' 4 bytes 'abcd' 5 bytes 'abcdefgh' 'abcd' 4 bytes 'abcd' 5 bytes

Loại thứ hai là text và blob, text cho phép lưu trữ rất lớn, blob cho phép lưu đối tượng nhị phân.

Loại thứ 3 là enum và set.

13.6 Tạo Và Lưu Bảng Trong CSDL

Cách tạo bảng:

Cách 1: Sử dụng mysqlfront. Từ menu Tool chọn create table, nhập tên, kiểu dữ liệucho các field.

Cách 2: Nếu có file văn bản đặc tả sql tạo bảng, có thể nạp để thực thi ngay. Chọn tab query/load SQL để nạp file cấu trúc sql có sẵn. Bấm run (hay F9) để thực thi cấu trúc sql,

Lưu bảng ra file text (Tạo kịch bản SQL – SQL script): Đây là cách thông thường khi xây dựng csdl khi cần chuyển csdl từ máy này sang máy khác. Có nhiều cách làm điều này, ở đây sử dụng công cụ tái tạo lại csdl từ kịch bản của csdl gốc.

Từ cửa số công cụ này trong MySQL-Front, bằng cách chọn tên csdl, sau đó chọn Tools/ Im- Export/ Export. Có thể lưu cấu trúc hau dữ liệu của bảng bằng cách đánh dấu vào check box:

13.7 Các Phát Biểu Truy Vấn Trong Mysql

Phát biểu SQL bao gồm các loại sau:

- SELECT: Truy vấn mẫu tin.

- INSERT: Thêm mẫu tin.

- UPDATE: Cập nhật dữ liệu.

- DELETE: Xoá mẫu tin.

13.7.1Phát Biểu Select

Phát biểu select dùng để truy vấn dữ liệu từ một hay nhiều bảng khác nhau, kết quả trả về một tập mẫu tin thỏa các điều kiện cho trước, cú pháp của SQL thường có dạng như sau:

SELECT <danh sách các cột> [ FROM <danh sách các bảng>} [WHERE <các điều kiện ràng buột>]

[ GROUP BY <tên cột / biểu thức trong SELECT>] [HAVING <điều kiện bắt buột của GROUP BY>] [ORDER BY <danh sách cột>]

[LIMIT FromNumber|ToNumber]

a. Phát biểu SELECT với mệnh đề FROM

Mệnh đề FROM chỉ ra tên một bảng hay những bảng có quan hệ cần truy vấn thông tin.

Ví dụ: Liệt kê danh sách tất cả khách hàng Select *

From khachhang

Sử dụng mệnh đề WHERE để tạo điều kiện lọc mẫu tin theo tiêu chuẩn được định nghĩa. Thông thường WHERE dùng cột để so sánh với giá trị, cột khác hoặc biểu thức chứa cột bất kỳ có trong bảng. Cú pháp: Select * from tablename where conditions Hoặc Select field1,field2,…,fieldn From tablenmame Where conditions Ví dụ: Select msmh,tenmh,gia From mathang where gia<=7 m s mh tenmh gia 13 Konbu 6 24 Guaraná Fantástica 4 33 Geitost 2 52 Filo Mix 7 54 Tourtière 7 75 Rhönbräu Klosterbier 7

- Các phép toán so sánh trong conditions bao gồm: >, <, >=, <=, =, <> (hoặc !=)

- Các phép toán logic có thể sử dụng trong conditions: And, or, not, not in, between, like, not like, in

dụ1: Select msmh,tenmh,gia From mathang

where gia between 7 and 15 m

s mh T enmh g ia

3 Aniseed Syrup 10

19 Teatime Chocolate Biscuits 9 21 Sir Rodney's Scones 10

23 Tunnbröd 9

41 Jack's New England Clam Chowder 9

45 Rogede sild 9 47 Zaanse koeken 9 52 Filo Mix 7 54 Tourtière 7 74 Longlife Tofu 10 75 Rhönbräu Klosterbier 7

Ví dụ 2: SELECT * FROM khachhang Where tenkh like “A%”

mskh tenkh Diachi phone

1 ALFKI Obere Str. 57 030-0074321 2 ANATR Avda. de la Constitución 2222 (5) 555-4729 3 ANTON Mataderos 2312 (5) 555-3932 4 AROUT 120 Hanover Sq. (171) 555-7788

c. Phát biểu SELECT với mệnh đề ORDER BY

Thông thường, trong khi truy vấn mẫu tin từ bảng dữ liệu, kết quả hiển thị cần sắp xếp theo chiều tăng hay giảm dựa trên ký tự. Nhưng cũng có thể sắp xếp theo một tiêu chuẩn bất kỳ, chẳng hạn như biểu thức.

Cú pháp cho mệnh đề ORDER BY cùng với trạng thái tăng hoặc giảm, ứng với ASC: tăng dần và DESC: Giảm dần.

Thường có dạng sau:

Order by columnname DESC [ASC]

Order by columnname1 + columnname2 DESC [ASC] Order by columnname1 ASC, columnname2 DESC

Ví dụ 1: Select msmh,tenmh,gia From mathang

where gia in (7,10,12) Order by gia DESC

msmh tenmh gia 31 Gorgonzola Telino 12 46 Spegesild 12 48 Chocolade 12 68 Scottish Longbreads 12 3 Aniseed Syrup 10 21 Sir Rodney's Scones 10 74 Longlife Tofu 10

52 Filo Mix 7

54 Tourtière 7

75 Rhönbräu Klosterbier 7

d. Phát biểu SELECT với mệnh đề GROUP BY

Trong thực tế ví dụ như chúng ta cần biết gia trị trung bình của một loại mặt hàng là bao nhiêu, tổng số tiền của một khách hàng đã trả là bao nhiêu… Để làm được điều này ta dùng mệnh đề GROUP BY.

From mathang Group by msloai msloai avg(gia) 1 37.8333 2 22.8333 3 24.8462 4 28.5000 5 20.1429 6 53.6667 7 32.2000 8 20.4167 Các hàm trong phát biểu GROUP BY:

AVG: Hàm trả về giá trị bình quân trong câu truy vấn. MIN: Hàm trả về giá trị nhỏ nhất của cột trong câu truy vấn. MAX: Hàm trả về giá trị lớn nhất của cột trong câu truy vấn. COUNT: Hàm trả về số luợng mẫu tin trong câu truy vấn. UM: Hàm trả về tổng các giá trị cột trong câu truy vấn

Các hàm trong GROUP BY thỏa một điều kiện nào đó ta sử dụng mệnh đề HAVING.

Ví dụ:Select msloai, avg(gia) From mathang Group by msloai Having avg(gia)>=30 msloai avg(gia) 1 37.8333 6 53.6667 7 32.2000 Phát biểu SQL dạng SELECT với AS

Khi cần thiế phải đổi tên trường nào đó trong câu truy vấn như các cột tạo ra từ phát các hàm sum, count,… ta sử dụng phát biểu AS.

Ví dụ:

select msloai, avg(sqrt(gia)) as TBCanBac2Gia from mathang group by msloai having TBCanBac2Gia >=30 msloai TBCanBac2Gia 1 5.0275929872 4 5.0942837097 6 6.7309962255 7 5.4847297161

Phát biểu SQL dạng SELECT cho phép truy vấn chỉ một số mẫu tin tính từ vị trí n, lấy ra m mẫu tin trong table (theo một tiêu chuẩn hay sắp xếp nào đó).

Có thể sử dụng kết hợp LIMIT với các mệnh đề WHERE, ORDER BY nhằm tạo được kết quả như ý muốn.

Ví dụ: select *

From khachhang Limit 5,4

mskh tenkh diachi

6 BLAUS Forsterstr. 57 7 BLONP 24, place Kléber 8 BOLID C/ Araquil, 67 9 BONAP 12, rue des Bouchers

f. Phát biểu SQL dạng SELECT với DISTINCT

Nếu có một hay nhiều mẫu tin trùng lặp nhau trong câu select (thường xảy ra ở dạng select kết hợp với nhiều bảng), nhưng ta chỉ cần lấy ra một mẫu tin trong các mẫu tin trùng lặp, chúng ta sử dụng phát biểu SQL với chỉ định DISTINCT.

Ví dụ: Tìm các số loại hàng mà có loại mặt hàng không bán nữa. Select msloai,discontinued as hetban

From mathang where discontinued='Y' order by msloai msloai hetban 1 Y 2 Y 5 Y 6 Y 6 Y 6 Y 6 Y 7 Y

Cũng phát biểu trên nhưng với DISTINCT để loại bỏ các cột thừa. Select distinct msloai,discontinued as hetban

From mathang where discontinued='Y' order by msloai msloai hetban 1 Y 2 Y 5 Y 6 Y

7 Y

13.7.2Thêm Dữ Liệu Bằng Sql Insert

Khi cần thêm mẫu tin vào bảng trong csdl MySQL có nhiều cách để thực hiện công việc này. Tuy nhiên, để sử dụng các phát biểu SQL mang tính chuyên nghiệp trong MySQL cần sử dụng phát biểu INSERT.

Khi thêm dữ liệu, cần chú ý kiểu dữ liệu giống hoặc tương ứng kiểu dữ liệu đã khai báo của cột đó, nếu không phù hợp sẽ bị lỗi. Ngoài ra cần quan tâm đến quyền User đang truy cập csdl. User phải được cấp quyền Insert dữ liệu vào từng bảng cụ thể.

Ví dụ:

INSERT INTO hoadon(mskh,ngay) values(1,now());

INSERT INTO chitiethoadon (mshd, msmh, soluong, giaban) VALUES (1,1,4,8);

INSERT INTO chitiethoadon (mshd, msmh, soluong, giaban) VALUES (1,1,3,5);

13.7.3Cập Nhật Dữ Liệu Bằng Sql Update

Dùng để cập nhật lại dữ liệu có trong bảng

Ví dụ: Update chitiethoadon

Set giatrihh=(1-khuyenmai)*soluong*giaban;

13.7.4Xoá Dữ Liệu Bằng Sql Delete

Với SQL dạng DELETE thì đơn giản hơn. Khi thực hiện xóa mẫu tin trong bảng chúng ta chỉ quan tâm đến tên bảng và mệnh đề WHERE để xóa những mẫu tin chọn lọc nếu có.

Cú pháp: Delete from <tablename>

Where <conditions>

Ví dụ: Delete from chitiethoadon where mshd=1; Delete from hoadon where mshd=1;

Bài 14 TRUY CẬP CƠ SỞ DỮ LIỆU MYSQL TỪ PHP

Một phần của tài liệu tài liệu tổng hợp về thiết kế web (Trang 110 - 124)