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
mà
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.
Cú
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
mà
(ngoại
trừ
hạn). Đây
là
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
rõ
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
và
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
có
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
và
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
có
(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
mơ
đã
đị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,
và
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ì
vậy
bảng.
cột đó một
nhớ
định
rõ
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
là
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
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
mà
đị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
cú
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
đã
có
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
mơ
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
và
}
create_definition là:
[AUTO_INCREMENT]
Trong
157
nay,
...)
(index_col_name,
[index_name]
[INDEX]
KEY]
(index_col_name,
[index_name]
có
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õ,
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
sé
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
dé
Cét
phai
khi
la
NULL
NOT
dude
NULL,
chén.
va
la
PRIMARY
xét
sẽ
là
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
và
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ô
ở 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
cũ
nhau,
cho
nhất trong bảng.
Dạng
thức
thứ
hai
và
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ể
ký
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
là
DATABASE
lệnh
nguu
[IF EXISTS]
hiểm.
Nó
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
rõ
thi hành
IF EXISTS),
nếu
hoặc
database
giả
bạn
khơng
tồn
khơng
có
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
có
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
mã
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.
Nó
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
mà
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
sé
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,
và
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
có
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
có
thể
tin này
việc
sử
xem
cùng
sụng
nó
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
Nó
đị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
và
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
và
tiện
đổi
tên
lợi.
Nó
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
có
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
có
trong
cũ
đượ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
Là
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
và
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,
nó
á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
nó
có
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
có
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,