Tải bản đầy đủ (.pdf) (107 trang)

Tạo website hướng database bằng php và mysql (tập 2) phần 2

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (11.36 MB, 107 trang )

PHU LUC A

CG PH@P MYSQL
Phụ lục này mô tả cú pháp của phần lớn câu lệnh SQL
được thi hành

trong MySQL.

Áp dụng những quy ước dưới đây khi tham khảo tài liệu này:
Oo

Vấn tin được

liệt kê theo thứ tự trong bảng chữ cái rất

tiện tham chiếu.

©

Thành

phần

([), trong

tùy

chọn

khi thành


trong cặp ngoặc

nằm

trong

phần

loại trừ lẫn nhau

móc

cặp

({}) và phân

ngoặc

cách

vng

bằng

nằm
dấu

sé (I).
Danh


sách

chỉ

cho



thơi.

khoản

phép

Dấu ba chấm

mục

bạn

chọn

nằm

trong cặp

mỗi

lằn


một

ngoặc

móc

khoản

mục

(..) hàm nghĩa thành phần đứng trước

có khả năng lặp lại.


hóa

pháp

vấn

ở nhiều

và từ khóa

tin trong

chỗ
được


bằng
lỏng

phụ

cách

lục

này

lược

vào với mục

đã

được

đơn

giản

bỏ cú pháp

thay thế

đích tương

thích với



Phu luc A: Cu phap MySQL

hệ thống database cao cấp hơn. Những

151

tính năng vấn

tin liên quan đến tính năng cao cấp như giao dịch cũng

được lược bỏ.

ALTER TABLE
ALTER

Trong

Vấn

[IGNORE] TABLE tbl_name action{, action ...]

ma

tin

không

nay, action 4m chi tac vu đã định ở dưới.


ALTER
làm

TABLE

mất

thay

thơng

đổi

định

tin trong

nghĩa

bảng

đó

trường hợp đặc biệt như xóa cột chẳng

bảng




(ngoại

trừ

hạn). Đây



những vấn tin chính:
ADD [COLUMN] create_definition [FIRST] | AFTER column_name]
Van

tin

danh

nay

chén

thém

cét

mdi

cho create definition dudc

TABLE”.


Theo

mac

dinh,

vao

m6

bang.

ta 6 muc

cột sẽ được

Cu

phap

“CREATE

chèn

vào

cuối

bảng, nhưng nếu định rõ FIRST hoặc AFTER column_name,


bạn có thể đặt cột ở vị trí bất kỳ. Từ COLUMN thật sự
khơng

có tác dụng

gì - lược bỏ nó trừ khi bạn thích

ngắm nó.
ADD

INDEX

[index

name] (ndex

Vấn tin này tạo chỉ mục

mới

col

name, ...)

nhằm

đẩy nhanh

tốc độ


tìm kiếm dựa trên cột đã định. Tốt hơn hết là gán tên
cho
không

chỉ

mục
tên

mặc

bằng
định

cách
dựa

định
vào


cột

index
đầu

name,

tiên trong


bằng
chỉ


152

Tao Web site hudng database bang

mục

sẽ

được

dùng.

Khi

tạo

PHP va MySQL

chỉ

mục

dựa

trên


cột

CHAR và/hoặc VARCHAR,

bạn định số lượng ký tự cho

chỉ

name

mục

trong

lập chỉ mục
này

phải

TEXT.

index col

(ví

5 ký tự đầu tiên của

được

Tham


định

khảo

rõ khi

thông

lập

dụ,

myColumn(5)

sẽ

myColumn). Số lượng
chỉ

tin chi

mục

cột

tiết về

BLOB




chỉ mục

tại

/>ADD

FULLTEXT

[index_name] (index_col_name,

Van

tin nay

tao chi muc

Đây

là chỉ mục

trong cột CHAR,

MATCH.

Tham

cho


phép

VARCHAR,

khảo

day

du

bạn

tìm

hoặc

thơng

trén

...)

cét

cụm

đủ

dinh.


từ phức

TEXT bằng

tin đầy

da

hàm

tạp

MySQL

tại http://dev.

mysql.com/doc/mysql/en/Fulltext_Search.html.
ADD

PRIMARY

KEY (index_col_name, ...)

Vấn tin nay tạo chỉ mục cho hàng đã định với PRIMARY

là khóa chính của bảng. Mọi giá trị (hoặc tổ hợp giá
trị không

được


phát

lỗi nếu

sinh

name được
ADD

UNIQUE

Vấn

điều

tin này

phép trùng
bảng

đã

lặp. Vấn tin này sẽ gây


khóa

định nghĩa hệt như ADD

chính.


INDEX

[index_name] (index_col_name,
tạo chỉ mục

kiện: tất cả

trên

giá trị trong

hợp giá trị, nếu chỉ mục gồm
được

trùng

lặp. Tham

được

định nghĩa hệt như ADD

cột đã

ở trên.
...)

định,


cột đã

index col_

định,

nhưng

hoặc

với

tổ

nhiều cột, đều không

số index name



index col name

INDEX ở trên.


Phu luc A: Cu phap MySQL

ALTER

[COLUMN]


col_name

{SET

153.

DEFAULT

value

|

DROP

dinh

cho

cét

DEFAULT}

Van

tin nay

DEFAULT),

gan

hoặc

gia tri mac
lược

bổ

giá

trị

mdi
mặc

định

(SET

hiện



(DROP DEFAULT). Một lằn nữa, từ COLUMN hoàn toàn
là tùy chọn, và khơng có cơng

CHANGE

dụng

gì.


[COLUMN] col_name create_definition

Vấn tin nay thay thế cột hiện có (col name)
mới

như

được



đã

định

trong

tả ở mục

creat definiion

“CREATE

TABLE”).

(cú

bằng cột
pháp


này

Dữ liệu trong

cột hiện có được chuyển đổi nếu cần và đặt vào
mới. Lưu ý create_ definition lồng tên cột mới, vì thế
vụ này được dùng để đổi tên cột. Nếu bạn muốn
nguyên tên cột, đừng quên lỏng nó hai lằn (một
cho

col_name,



một

lằn

ứng dụng tác vụ MODIFY
DISABLE

KEYS

ENABLE

KEYS

Khi bạn chèn


cho create definition),

lượng lớn mẩu

tin vào bảng, MySQL

phản

ánh

những

khoản

mục

mới.

Thi

ALTER

...

DISABLE

KEYS

truéc


khi

chèn

MySQL

hoãn

cập

hoặc

bên dưới.

mất nhiều thời gian cập nhật chỉ mục

khién

cột
tác
giữ
lần

nhật

chỉ mục.

của bảng
hành


vấn

tin

tin

sẽ

mẩu

Một

hầu

khi

chèn

xong các mẩu tin, thi hành ALTER TABLE ... ENABLE
KEYS để cập nhật chỉ mục cho tất cả mẩu tin mới


154

Tao Web site hudng database bang PHP va MySQL

cùng

một


lượt.

Phương

pháp

này

thường

tiết kiệm

thời gian so với cách cập nhật mỗi lần một mẩu tin.
DROP [COLUMN]
Vấn

tin này

col_name
xóa

hẳn

cột trong

truy xuất dữ liệu trong
vấn

tin


này,



vậy

bảng.

cột đó một
nhớ

định



Bạn

khơng

khi thi hành
tên

cột.

thể
xong

"Thơng

thường, có thể lược bỏ từ COLUMN, vì nó khơng đóng

vai trị gì trong vấn tin nữa.
DROP

PRIMARY

DROP

INDEX

KEY

index name

Hai vấn tin này q

rõ ràng: chúng

xóa khóa

chính

và chỉ mục cụ thể trong bảng.
MODIFY

[COLUMN]

create_definition

Gần giống như van tin CHANGE nêu trên, vấn tin này
cho phép


bạn

bảng, nhưng

định nghĩa

khai

báo mới

cho cột trong

giả định bạn sẽ khơng đổi tên nó. Do

đó, bạn chỉ phải khai báo lại cột cùng tên trong tham
SỐ create definition
TABLE”).

chọn

Hệt

và khơng

(như

như

định


trước,

đóng

nghĩa

COLUMN

ở mục
hồn

vai trị gì cả. Van

“CREATE
tồn



tùy

tin nay tuy

tiện dụng, nhưng khơng phải là cú pháp SQL chuẩn,
và được bổ sung cho tương thích với phần mở rộng
trong Oracle database

server.



Phu luc A: Cu phap MySQL

ORDER

155

BY col_name

Vấn tin này cho phép bạn sắp xếp khoản mục trong

bảng theo cột cụ thể. Tuy nhiên, đây không phải là
trạng thái bất di bất dịch; ngay sau khi bảng có thêm
khoản
mục

mục
hiện

mới,
có,

hoặc



trật tự này

sự thay
khơng


đổi trong

cịn

được

khoản

bảo

đảm

nữa. Ứng dụng duy nhất của vấn tin này là tăng hiệu
suất
xếp

thi hành
theo

của

cách

xác

bảng



định


trong

bạn

thường

vấn

xuyên

tin SELECT.

sắp

Trong

một số tình huống, việc sắp xếp hàng theo đúng thứ

tự sẽ giúp sắp xếp nhanh hơn.
RENAME

[TO

| AS] new_tbl_name

Vấn tin này đổi tên bảng. Từ To và AS là tùy chọn, và
khơng đóng vai trị gì cả. Sử dụng chúng nếu thích.
table_options
Áp


dụng



pháp

giống

như trong

vấn

tin CREATE

TABLE, van tin nay cho phép bạn ấn định và thay đổi
tùy chọn bảng cao cấp.

ANALYZE TABLE
ANALYZE
Hàm

nhằm

này

cập

TABLE
nhật


tbl_namel, tbl_name,
thơng

tin dùng

...]
trong

vấn

tối ưu hóa vấn tin sử dụng chỉ mục

tin

bảng.

SELECT

Hiệu


156

Tao Web site huéng database bang PHP va MySQL

suất thi hành sẽ tang lên đáng kể nếu thi hành vấn tin
định kỳ trên bảng chứa nội dung thay đổi theo thời
gian. Bảng


bị khóa

ở chế độ “chỉ đọc” trong q

trình

phân tích.

CREATE DATABASE
CREATE

Vấn

tin

DATABASE

này

(db name).

chỉ

Vấn

[IF NOT

tạo

EXISTS] db_name


database

tin này

sẽ

mới

khơng

với

tên

thi hành

xác

nếu

định

đã



database rồi (trừ khi định rõ IF NOT EXISTS), hoặc giả bạn
khơng có đặc qun cần thiết.


CREATE INDEX
CREATE

[UNIQUE

|

FULLTEX]

INDEX

index_name

ON

tbl_name (col_namel[(length)], ...)

Vấn tin nay tạo chỉ mục

mdi trên bảng hiện có. Nó tác

dung

TABLE

giéng

FULLTEXT},

nhu

được

ALTER


tả ở mục

ADD
“ALTER

{INDEX

| UNIQUE |

TABLE”.

CREATE TABLE
CREATE

[TEMPORARY]

TABLE

[IF

NOT

EXISTS]

[db _name.]


tbl_name
{

[(create_definition, ...)]

[table_options] [[IGNORE

| REPLACE] select_statement]


Phy luc A: Cu phap MySQL

| [LIKE [db_name.Jold_tbl_name
Trong

đó

{

col_name type [NOT NULL]

| PRIMARY
| INDEX

[index_name]

| UNIQUE

ma


[DEFAULT default_value]

[PRIMARY

KEY (index_col_name,

| FULLTEXT



}

create_definition là:

[AUTO_INCREMENT]

Trong

157

nay,

...)

(index_col_name,

[index_name]
[INDEX]


KEY]

(index_col_name,

[index_name]



cơng

...)

(index_col_name,

type la kiéu cét MySQL

index col name

...)

dụng

hệt

(xem
như

...) }

Phu


vấn

luc C),

tin

ALTER

TABLE ADD INDEX ở mục “ALTER TABLE”.
CREAT TABLE
hành

tao bang

(hoặc

trong

db_name.tbl name).

mdi

tbl_name trong

database

Nếu

cu


TEMPORARY

database

hién

thé

nếu

định

được

định

rõ,


bảng

biến mất ở cuối phiên kết nối đã tạo nó. Tạo bảng tạm
cùng
phiên

tên với bảng
làm

việc


hiện có sẽ giấu bảng

hiện

hành

cho

đến

hiện có trong

khi xóa

bảng

hoặc kết thúc phiên làm việc; tuy nhiên, những
khác vẫn thấy bảng gốc.

tạm

client

Giả định TEMPORARY không được định rõ, vấn tin này sẽ
không
hữu,

thi hành
trừ


khi

nếu

IF NOT

bảng
EXISTS

mang
được

tên
ấn

xác

định.

định
Vấn

đã
tin

hiện
CREAT



158

Tao Web site hudng

database bang

PHP va MySQL

TABLE cũng không thi hành nếu bạn khơng

có đặc quyền

cần thiết.
Tên

bảng

đa

phản

đi

kèm

với

chuỗi

khai


báo

cột

(create_definition ở trên). Mỗi định nghĩa cột bao gồm tên

và kiểu dữ liệu cột, cùng với tùy chọn sau:
O

NOT NULL

Tùy chọn quy định cột không thể để trống (NULL).
Lưu ý NULL là giá trị đặc biệt khác

với chuỗi rỗng

(°). Ví dụ kiểu cột VARCHAR mang xác lập NOT NULL
có thể được ấn định là '' nhưng không thể nào là
NULL. Tương

tự, cột NOT NULL thuộc

kiểu INT có khả

năng chứa 0, vốn là giá trị, nhưng không thể chứa
NUILL, bởi đây không phải là giá trị.
DEFAULT default_value
DEFAULT


cho

khi không

phép

định

bạn

ấn

định

rõ giá trị trong

giá trị gán
câu lệnh

cho

cột

INSERT.

Khi

không định rõ tùy chọn này, cột NULL (cột không ấn
định
khi


tùy

chọn

NOT

NULL)

câu

lệnh

INSERT



dude

gan

gia tri NULL

khéng

gan

gia

tri


chúng.

Cột NOT NULL sẽ được

(chuỗi

rỗng

(°), hoặc

nao

gán “giá trị mặc

0, '0000-00-00',

hoặc

cho
định”

nhãn

thời gian hiện hành, tùy theo kiểu dữ liệu cột).
oO

AUTO_INCREMENT
Như đã mô


tả ở Chương

động

số lớn hơn

chèn

2, cột AUTO_INCREMENT

tự

1 đơn vị so với số lớn nhất


hién

hanh

trong

O

hoae



Cét

phai


khi

la

NULL

NOT

dude

NULL,

chén.

va

la

PRIMARY

xét

sẽ



UNIQUE.

PRIMARY

Tùy

159

cét

AUTO_INCREMENT
KEY

Phu luc A: Cu phap MySQL

KEY

chon

nay

quy

định

cột

đang

khóa

chính cho bảng; nghĩa là giá trị cột phải nhận diện
từng


hàng

không
kiếm

trong

được
khoản

bảng.

Điều

này

trùng lặp, và đẩy

giá

nhanh

cột

tốc độ tìm
lập

nay

địi


hỏi



lập

chỉ

Bên cạnh định nghĩa cột, bạn có thể liệt kê thêm

chỉ

O

dựa trên cột này

trị

cách

chỉ mục

mục

buộc

bằng

cho giá trị chứa trong nó.


UNIQUE
Tương
mọi

tự như PRIMARY

giá

trị cột

khơng

KEY,

tùy

chon

được

trùng

lặp,

mục giá trị để tăng tốc độ tìm kiếm.
mục

muốn


KEY,

INDEX,

Xem



ở mục

tạo trên

bảng

FULLTEXT,

va

nhờ

vào

UNIQUE

tả các dạng thức tương

“ALTER

TABLE”


dạng
cua

đương

để biết thêm

thức

PRIMARY

create_

definition.

của ALTER TABLE

chỉ tiết.

Thanh phan table_options trong van tin CREATE TABLE 4n
định thuộc tính cao cấp của bảng, và được mơ tả tường
tận

trong

tài

liệu tham

khảo


tại

/>
doc/mysql/en/CREATE_TABLE.html.

Thanh phan select_statement trong van tin CREAT TABLE
cho phép bạn tạo bảng từ kết quả thi hành vấn tin


160

Tạo Web site hướng database bang PHP va MySQL
SELECT

(xem

không

muc

“SELECT”).

Khi

tao

bang

nhất thiết khai báo riêng những


nay,

ban

cột ứng với kết

quả. Loại vấn tin như thế hữu dụng trong trường hợp
bạn muốn lấy kết quả thi hành vấn tin SELECT, lưu vào
bảng

tạm,

sau đó thi hành

vấn tin SELECT

trên nó. Đơi khi loại vấn tin này
trợ sub-select của MySQL,

thứ hai dựa

bù đấp việc thiếu hỗ

vốn cho phép bạn thực hiện

cùng kiểu tác vụ trong vấn tin đơn lẻ.
Thay vì định nghĩa bảng từ đầu, bạn có thể yêu cầu
MySQL
Thay


tạo

cho

bảng

danh

mới

sách

dựa

trên

cấu

trúc

create_definitions Và

can két thuc van tin CREAT TABLE

bang

DELETE
{


[LOW_PRIORITY]

[QUICK]

FROM tbl_name
[WHERE

where_clause]

[ORDER BY order_by_expr]
{LIMIT rows]
| tbl_name[, tbl_name
FROM

table_references

(WHERE
| FROM

...]

where_clause]

tbl_namel[, tble_name ...]
USING
[WHERE

table_references
where_clause]


}

khác.

table_options,

tén bang hién hanh la du.

DELETE

bảng

[IGNORE]

LIKE kém

chỉ

theo


Phu luc A: Cu phap MySQL

Dạng

thức đầu tiên của vấn tin này xóa tất ca hang

trong bảng
WHERE


161

đã định, trừ khi định rõ mệnh

hoặc

LIMIT.

Mệnh

đề

WHERE

để tùy chọn

hoạt

động

giống

hệt người em sinh đôi của nó trong vấn tin SELECT (xem
mục

“SELECT”).

Mệnh

để


LIMIT

giúp

ấn

định

số

lượng

hàng tối đa sẽ bị xóa. Mệnh để ORDER BY cho biết trình
tự xóa
phép

khoản
bạn

mục

thực

và, nếu kết hợp

với LIMIT, cịn

hiện tác vụ đại loại như xóa


cho

1Ơ mục



nhau,

cho

nhất trong bảng.
Dạng

thức

thứ

hai



thứ

ba

tương

đương

phép bạn xóa hàng trong nhiều bảng, hệt như cách bạn

truy xuất khoản

mục

trong van tin SELECT

dam

nhận

từ nhiều
(xem

vai trò giống

bảng

muc

thơng

“SELECT”).

qua

kết nối

table_references

như trong vấn tin SELECT


(bạn

có thể tạo kết nối đơn giản hoặc kết nối ngoài), dù
rằng mệnh đề WHERE cho phép giới hạn số dịng định
xóa. Tuy nhiên, danh sách bảng đầu tiên (tbl name[,
tble name,

..])

nhận

diện

những

bảng

thật

sự

bị

xóa

hàng từ table_reterences. Bang cách này, bạn có thể sử
dụng

kết


nối

phức

tách riêng tập hợp

tạp

liên

quan

đến

số

bảng

kết quả, rồi xóa hàng

nhằm

từ một trong

những bảng đó.
Tùy
khơng

chọn

cịn

LOW PRIORITY
client

vụ. Tủy chọn

thay

nào

khiến

đọc

bảng

QUICK đẩy nhanh

đổi phương

pháp

cập

vấn
thì

tin


chờ

đến

khi

mới

thi

hành

tác

tốc độ xóa bằng

nhật

chỉ mục

bảng.

cách

Tùy


162

Tao Web site hudng


database bang

chon IGNORE yéu cau MySQL

PHP va MySQL

khơng báo lỗi trong qua

trình xóa.

DESCRIBE
{DESCRIBE

Lệnh

| DESC}

này

cung

(col name),

hoặc

tbl_name

cấp
cột


thơng
bất

kỳ

[col_name

tin

| wild]

về

cột,

cột

cu

so khớp

mẫu

chứa

thể


tự


thay thé ‘%’ va ‘_’ (wild). Thong tin trả về bao gồm tên
cột, kiểu cột, cột có chấp nhận NUIL làm giá trị hay
khơng,

cột có chỉ mục

hay

khơng,

giá trị mặc

định

cho

cột, và tính năng bổ sung (ví dụ, AUTO_INCREMENT).

DROP DATABASE
DROP

Đây



DATABASE

lệnh


nguu

[IF EXISTS]

hiểm.



db_name

lập tức

xóa

sạch

database

cùng tồn bộ bảng chứa trong database đó. Van tin nay
sẽ khơng
định



thi hành
IF EXISTS),

nếu
hoặc


database
giả

bạn

khơng

tồn

khơng



tại

(trừ khi

đặc

quyền

cần thiết.

DROP INDEX
DROP

INDEX

index_name ON


tbl_name

DROP INDEX có tác dụng hệt nhu ALTER TABLE
INDEX, được mô tả ở mục “ALTER TABLE”.

DROP


Phu luc A: Cu phap MySQL

163

DROP TABLE
DROP TABLE

[IF EXISTS] tbl_name

[, tbl name,

...]

Vấn tin này xóa một hoặc nhiều bảng. Đây là lệnh nguu
hiểm, vì khơng

cịn truy xuất dữ liệu được

nữa sau khi

thi hành vấn tin này. Nên cẩn thận thì hơn!
Vấn tin sẽ báo lỗi nếu bảng không


tỏn tại (trừ khi định

rõ IF EXISTS), hoặc giả bạn khơng có đặc qun cần thiết.

EXPLAIN
Vấn tin giải thích có hai dạng khác nhau. Dạng thứ nhất,
EXPLAIN

tương

đương

COLUMNS
Dạng

tbl_name

với

DESCRIBE tbì name

hoặc

SHOW

FROM tbl_name.

thứ hai,


EXPLAIN

select_satement

trong đó select_ satement có thể là vấn tin SELLCT hợp

lệ,

sẽ cung cấp thơng tin giải thích vẻ cách xác định kết
quả thi hành

câu lệnh SELECT của MySQL.

Van tin nay

hữu ích đối với việc tìm chỉ mục, giúp đẩy nhanh tốc độ

thi hành vấn tin SELECT, đồng thời giúp xác định MySQL


thi hành

khơng. Xem

vấn

tin nhiều

bảng


theo

trình tự tối ưu hay

tùy chọn STRAIGHT _JOIN của vấn tin SELECT


164

Tạo Web site hudng database bang PHP va MySQL

ở muc “SELECT” dé nam bắt cách thức giành quyền
tối ưu hóa MySQL, và kiểm sốt trình tự này bằng tay.

GRANT
GRANT priv_type [(column_list)], ...
ON

{tbl_name

| * | *.* | db_name.*}

TO user_name
[WITH

GRANT

cap

[IDENTIFIED


GRANT

OPTION]

thêm

quyển

BY ‘password’], ...

truy

cập

mới

cho

tài

khoản

người dùng, và tạo tài khoản mới nếu user_name đã định
chưa

tén

tại, hoặc


thay

đổi

mật



nếu

IDENTIFIED

BY

‘password’ dung trong tài khoản đã có mật mã.
Tham khảo mục “Điều khiển truy cập MySQL”

ở Chương

8 để xem thông tin mô tả chỉ tiết về vấn tin này.

INSERT
INSERT

{

[LOVW_PRIORITY

[(col_name,


| DELAYED]

...)] VALUES

[IGNORE]

[INTO] tbl_name

(expression, ...), ..-

| SET col_name=expression, col_name=expression, ...
| [((col_name,

Vấn

tin INSERT

trợ ba tùy chọn

...)] SELECT

chèn

khoản

chung:

...

}


mục

mới

cho bảng.



hỗ


Phu luc A: Cu phap MySQL

165

LOW_PRIORITY

Vấn

tin sẽ chờ

đến

khi khơng

cịn

client đọc


bảng

nữa mới thi hành.
DELAYED

Vấn tin thi hành ngay, va tác vu INSERT dude thi hanh


hậu

trường.

chèn

lượng

xong

tác

chèn

lớn

vụ.

trên

DELAYED


Tùy

chọn

hàng

Nên
cột

hữu



nhớ

dụng

không

cần

client sẽ

bạn

chờ

không

AUTO INCREMENT


thi hanh

khi

không thi hành hợp lý).

thi

hành

biết ID

khi

(vi du, mysql_insert_id

muốn

lệnh
trong

mới
chèn

PHP



IGNORE


Thông

thường,

khỉ tác vụ chèn

PRIMARY KEY hoặc UNIQUE,

gây

xung

chèn sẽ bất thành

báo lỗi xuất hiện. Tùy chọn

này cho phép

hành

lặng

tác

vụ

chèn

trong


đột ở cột

im

- hàng

và thông

ngưng thi
mới

không

được chèn, nhưng thông báo lỗi khơng hiển thị.
Từ

INTO hồn

tồn

là tùy chọn,



khơng

ảnh

hưởng


đến hoạt động của vấn tin.
Như bạn thấy ở trên, vấn tin INSERT
Dạng

thức thứ nhất cho phép

bằng

cách

Nếu

danh

định

chèn

giá trị cột bảng



ba dạng

thức.

một hay nhiều

hàng


trong

sách tên cột bị lược bỏ, danh

cặp
sách

ngoặc

đơn.

giá trị cột


166

Tao Web site hudng

database bang

PHP va MySQL

phải lồng giá trị cho từng cột trong
trình tự hiển thị chúng trong bảng.
Dạng

thức

thứ


hàng,

nhưng

hai

cho

của

INSERT

phép

bạn

chỉ

gán

bảng

dùng
giá

theo đúng

để


chèn

trị cho

cột

một
trong

hàng đó bằng cách gán theo dạng thức col_name=value.
Trong

dạng

thức

cuối

cùng

của

INSERT,

hàng

được

chèn


tl’ van tin SELECT. Một lần nữa, nếu danh sách tên cột bị
lược bỏ, tập hợp
cho

từng

cột

kết quả

trong

SELECT tạo thành

không
dụng

bảng

một

chứa mệnh

của SELECT
theo

phần

đúng


của

câu

cột khơng

gán

sách

cột) sẽ được

mặc

việc

chèn

cũng

khiến

nhiên,

nếu

tự.

lệnh


Vấn

chèn

tin

có thể

trường

giá

đó

MySQL

đề FROM.

giá trị (ví dụ, nếu

khỏi danh
định,

thứ

giá trị

để ORDER BY, và bạn không thể sử

bảng đang chèn trong mệnh


Những

phải chứa

bạn

loại chúng

gán giá trị mặc

định. Theo

trị NUIL.

phải

được

DONT_USE_DEFAULT_FIELDS

nhận
lập
được

vào

trưởng

giá


trị mặc

cấu
kích

hình
hoạt,

với
tác

NOT

NULL

định;

tuy

tùy

chon

vụ

chèn

như thế sẽ làm phát sinh lỗi. Vì vậy, tốt nhất nên tránh
xa chúng thì hơn.


LOAD DATA INFILE
LOAD DATA

[LOW_PRIORITY

‘file_name.txt’

[FIELDS

[REPLACE

| CONCURRENT]
| IGNORE]

[LOCAL]

INTO TABLE

INFILE

tbl_name


Phu luc A: Cu phap MySQL

[TERMINATED

BY ‘string’]


[[OPTIONALLY]

ENCLOSED

[ESSCAPED
[LINES

BY

“’] [TERMINATED

BY

‘string’]]

number LINES]

[(col_name,

Van

‘char’]

BY ‘char’] ]

[STARTING

(IGNORE

BY


167

tin LOAD

...)]

DATA

INFILE

nhập

dữ

bản trên MySQL server, hoặc trên
LOCAL (ví dụ, tập tin văn bản được

liệu

từ tập

hệ thống
tạo bằng

tin

văn

(client)

vấn

tin

SELECT INTO OUTFILE). Cú pháp lệnh này đã trình bày ở

trên;

tuy

day

nhiên,

bạn

đủ về vấn

quan

đến



thể

tin này

việc


sử

xem

cùng

sụng



nội

với
tại

dung

những

giải

vấn

thích

đề

liên

/>

doc/mysql/en/LOAD_DATA.html.

LOCK/UNLOCK TABLES
LOCK TABLES
tbl_name [AS alias] {READ [LOCAL]

| [LOW_PRIORITY] WRITE},

tbl_name...
UNLOCK

TABLES

LOCK TABLES
hành

độc

khéa

quyển

bang
truy

da

cập

dinh

chúng,

nối khác phải chờ đến khi khóa
UNLOCK

TABLES,

van

tin

LOCK

qua đóng kết nối hiện hành.

sao

cho

trong

kết nối
khi

những

được giải phóng

TABLES


khac,

hiện

hoặc

kết

bằng
thơng


168

Tạo Web

site hướng

database bang

PHP va MySQL

Khóa READ ngăn kết nối này hoặc kết nối khác ghi
bảng đã định. Điều này cho phép bạn đoan chắc nội
dung bảng (hoặc tập hợp bảng) không thay đổi trong

khoảng thời gian nhất định. READ LOCAL cho phép tiếp
tục xử lý câu lệnh INSERT trên bảng bị khóa, nhưng
UPDATE và DELETE vẫn bị khóa như thường.
Khóa

đã

WRITE

ngăn

phải

khi

dụng

hữu



định.

các kết nối khác

đọc hoặc ghi bảng

thi hành

vấn

chuỗi

tin


INSERT hoặc UPDATE để duy trì tính ngun vẹn của mơ

hình dữ liệu trong database.

dich trong MySQL
“nhóm

vấn

Chương 9).

Hỗ trợ mới

dành

cho giao

cung cap nhiều hỗ trợ hơn cho kiểu

tin” này

(tham

khảo

mục

“Khóa

bảng”




Theo mặc định, khóa WRITE được ưu tiên hơn yêu cầu
khóa READ trong hàng chờ truy cập bảng. Muốn quy
định khóa WRITE phải nhường quyền ưu tiên cho khóa
READ,

ban

áp

nên thận trọng

dụng

nếu

tùy

u

chọn

cầu

LOW_PRIORITY.

khóa


READ

Tuy

ln

nhiên,

bị hỗn,

khóa LOW_PRIORITY WRITE sẽ khơng bao giờ được xử lý.
Khi

khóa

bảng,

bạn

phải

liệt kê

bí danh

đang

sử dụng

trong vấn tin sắp thi hành. Ví dụ, nếu định tham chiếu

bảng

có hai bí danh

khác

nhau trong vấn tin, bạn cần

sớm lấy khóa cho từng bí danh đó.

Tìm thêm thơng tin chỉ dẫn ở mục
Chương

9.

“Khóa bảng” trong


Phu luc A: Cu

phap

MySQL

169

OPTIMIZE TABLE
OPTIMIZE TABLE

Giống

mảnh

như

tinh

khi người

tbl_namel, tbl

trang

phan

hàng

xóa

bạn

chia

...]

6

xóa và chỉnh

dùng


dia

cứng

bị

phân

lại kích thước tap tin

cũng bị phân mảnh theo thời gian

hiện có, bảng MySQL
khi

name,

chỉnh



sửa

cột có

độ

dài

khả


biến

(như VARCHAR và BLOB). Vấn tin này “gom mảnh” bảng,
sắp xếp lại dữ liệu chứa trong bảng nhằm giải phóng
khơng

gian bị lãng phí.

Điều cân lưu ý là bảng bị khóa trong suốt q trình tối ưu
hóa; vì thế, nếu trình ứng dụng dựa vào bảng lớn ln khả
dụng,

trong

thi hành

nó sẽ ngưng

Gặp trường hợp như
tối ưu hóa bản sao,
vừa tối ưu hóa bằng
bảng gốc trong giai

thế,
rỏi
vấn
đoạn

q


trình tối ưu hóa.

tốt hơn hết là sao chép bảng,
thay bảng cũ bằng phiên bản
tin RENAME. Mọi thay đổi trong
chuyển tiếp sẽ bị mất; do đó,

kỹ thuật này khơng phù hợp cho tất cả trình ứng dụng.

RENAME TABLE
TABLE

RENAME

tbl_name

TO

new_table_namel,

tbl_name2

TRY...„ =]

Vấn
chóng

tin


này


tiện

đổi

tên
lợi.



một

hay

khác

nhiều
với

ALTER

bảng

rất

nhanh

TABLE tbl name


RENAME ở chỗ tất cả bảng đang được đổi tên trong vấn


170

Tao Web site hng database bang PHP

tin

đều

bị

khóa

nên

client khác

cho

phép

trong

khơng

bạn


hạn nếu muốn

suốt

thay

thi

bảng

bằng

hành

chúng.
bảng



mục

new: table

TABLE

database

thể

tin,


Điều

trống

này

chẳng

đã định.

(...)

old_table

TO

backup_table,

old_table;

Cũng

vấn

bắt đầu bảng mới một cách an tồn một

TABLE

RENAME


trình

thể truy cập

thế

khi đạt số lượng khoản
CREATE

quá

va MySQL

di

khác

chuyển

bằng

db_name.tbl name,

miễn

bang

cách


định

sao

cả

new_table

tt database
rõ tên
hai

bảng

bảng

nay
dưới

được

TO

đến
dạng

lưu

trên


cùng ổ đĩa vật lý.

Bạn phải có đặc quyền ALTER và DROP đối với bảng
gốc, cùng với CREATE và INSERT đối với bảng mới, để

thi hành
hành

vấn tin này.

giữa chừng

Vấn

tin RENAME

sẽ tự động

được

TABLE

đảo ngược,

về tình trạng ban dau.

ngưng

thi


nhằm

trả

REPLACE
REPLACE

[LOW_PRIORITY

| DELAYED]

[INTO] tbl_name

[(col_name, ...)] VALUES (expression, ...), ...

{
|

[(col_name,

...)] SELECT

...

|

SET col_name=expression, col_name=expression,

... }



Phu luc A: Cu phap MySQL

REPLACE

giống

chèn

xung

hoặc

UNIQUE,

mục

hệt

INSERT,

với

hàng

đột

khoản

mục


ngoại

trừ nếu

hiện



trong



được

thay

hàng
cột

171

được

PRIMARY

bằng

khoản


mới.

REVOKE
REVOKE priv_type [(column_list)|, ...
ON

{tbl_name

FROM

user, ...

Hàm này tước
dùng. Nếu tất
khoản, người
không thể truy
Xem

thông

| * 1 *.* | db_name.*}

bỏ quyền truy cập
cả quyền truy cập
dùng đó vẫn có thể
cập bất kỳ thơng tin

tin mơ

tả chỉ tiết về


từ tài khoản người
đều bị xóa khỏi tài
đăng nhập, nhưng
nào.
vấn

tỉn này

tại mục

“Điều khiển truy cập MySQL” ở Chương 8.

SELECT
SELECT

[select_options]

select_expression, ...
{INTO {OUTFILE

| DUMPFILE}

‘file

name’ export_options|

[FROM table_references
[WHERE
[GROUP

(HAVING

[ORDER

where_definition]
BY {col_name

| col_pos

} [ASC | DESC],

...]

} [ASC | DESC],

...]

where_definition]

BY {col_name

[LIMIT [offset,] rows]]

| col_pos


172

Tao Web site hudng




vấn tin phức

nhận

mọi
ấn

hoạt động
định

PHP

va MySQL

tạp nhất trong MySQL,

trợ các tùy chọn
được

database bang

SELECT

truy xuất dữ liệu. Vấn tin này

(select_options) dưới đây, vốn

kết


dam

hợp

với

nhau



phân

hỗ

có thể

cách

bằng

khoảng trắng.
ALL

| DISTINCT

| DISTINCTROW

Cả ba tùy chọn


này quy định cách xử lý hàng trùng

lặp trong tập hợp kết quả. ALL (mặc định) hiển thị tất
cả hàng trong tập hợp kết quả, trong khi DISTINC và
DISTINCTROW

(cùng

công

dụng)

loại

hàng

trùng

lặp

ra khỏi tập hợp kết quả.
HIGH_PRIORITY

Tùy chọn này gán thứ tự ưu tiên cao nhất cho vấn tin
SELECT. Thông thường, nếu một vấn tin chờ cập nhật
bảng,

mọi

vấn tin chỉ đọc


(như SELECT

chẳng

hạn)

phải nhường nó thi hành trước. Nhưng vấn tin SELECT
HIGH_

PRIORITY

sẽ được

ưu tiên.

STRAIGHT_JOIN

Buéc MySQL

kết nối nhiều bảng được ấn định trong

đối số table_references theo đúng

bạn
giảm

nghĩ vấn

tin tối ưu


hóa

hiệu suất thi hành chung,

bạn giành

quyền

trình tự đã định.

của

MySQL

đang

làm

đối số này cho phép

nó. Tìm thêm thơng tin ở mục

kiểu kết nối” bên dưới.

Nếu

“Các



Phu luc A: Cu phap MySQL

173

SQL_SMALL_RESULT

Tùy chọn

này khơng

cịn cần thiét trong MySQL

trở lên. Tuy nhiên, nó vẫn tồn tại vì khả năng
thích. Tùy chọn này cho MySQL
xem

tập

hợp

kết quả

tương

3.23

tương

biết bạn đang muốn


đối

nhỏ

từ vấn

tin sử

dụng tùy chọn DISTINCT hoặc mệnh để GROUP BY; vì
vậy,



áp

dụng

phương

pháp

tạo

bảng

tạm

nhanh

hơn nhưng tốn nhiều bộ nhớ hơn để lưu tập hợp kết

quả khi hồn tất.
SQL_BIG_RESULT

Nằm

cùng dịng với SQL_SMALL_RESULT, tùy chọn

cho MySQL

biết bạn đang mong

từ vấn tin sử dụng

tùy chọn

này

tập hợp kết quả lớn

DISTINCT

Khi nó tạo tập hợp két qua, MySQL

hoặc

GROUP

BY.

sé tao bang tam


trén dia dé luu két qua néu can. Day

la giai phap

nhanh

vốn

hơn

tạo

chỉ

mục

trên

bảng

tạm

đòi

hỏi

nhiều thời gian để cập nhật từng hàng trong tập hợp
kết quả lớn.
SQL_BUFFER_RESULT


Tùy chọn nay buéc MySQL

luu tap hợp kết quả trong

bảng tạm, giải phóng

được

cho quy trình khác

bảng

sử dụng,

hợp kết quả cho client.

dùng trong vấn tin

trong

lúc chuyển

tập


174

Tao Web site hudng database bang PHP va MySQL


SQL_CACHE
Tuy

chon

vào

bộ

nay

nhớ

yêu

cầu

vấn

MySQL

tin

(query

lưu kết quả

cache),

bộ


vấn

nhớ

tin

được

server dành riêng cho lưu trữ kết quả vấn tin thường

thi hành để khơng nhất thiết tính tốn lại chúng từ
đầu khi nội dung bảng liên quan không thay đổi.
MySQL có thể được lập cấu hình để chỉ lưu những
vấn

tin có

Nếu

bộ

tùy

nhớ

chọn

SQL CACHE


vấn tin bị vơ hiệu

vào
hóa,

bộ

nhớ

tùy chọn

cache.
này

sẽ

vơ hiệu.

SQL
NO _CACHE
Tùy

chọn

này

vấn

tin vào


u

bộ

cầu MySQL

nhớ

vấn

khơng

tin (xem

tùy

lưu kết quả
chọn

trước).

MySQGL có thể được lập cấu hình để lưu mọi vấn tin
vào

bộ

nhớ

cache


SQL_NO CACHE.
tùy chọn

Nếu

trừ
bộ

nhớ

phi





tùy

vấn

tin bị vơ

chọn

hiệu

hóa,

này sẽ vơ hiệu.


SQL_CALC_FOUND_ROWS

Được

sử dụng

kết hợp với mệnh

đẻ LIMIT, tùy chọn

này tính toán và ấn định tổng số hàng sẽ trả về từ
vấn tin nếu mệnh

để LIMIT khơng

bạn

truy

xuất

số

định

cột

chứa




thể

liệu

hiện diện. Sau đó,

này

thơng

SELECT FOUND_ROWSU (xem Phụ lục B).
select expression
từ vấn

tin. Thông

thường,

đây

tập

hợp

là tên

kết
cột


qua
quả

trong

hàm
trả

về

bảng,


×