My SQL Documentation (sưu tầm)
Trang: 1
MYSQL DOCUMENTATION
(sưu tầm)
Trong bài này, giả sử bạn đã có MySQL cài đặt sẳn trong máy và biết cách
connect và disconnect vào server rồi. Xin nhắc lại, để connect vào server
mysql, bạn click vào file mysql.exe trong thư mục bin. Hoặc đánh lệnh ở ngoài
dos như sau:
shell> mysql -h <hostname> -u <username> -p;
Enter password: ******** (password của bạn)
1. Vào queries (yêu cầu):
Phải chắc chắn rằng bạn đã connect vào server rồi.
Lệnh để vào queries là: select. Ví dụ, để xem version number hay ngày hiện
tại bạn type như sau:
mysql> select version(), current_date;
+ + +
| version() | Current_date |
+ | +
| 3.22.20a-log | 2002-03-29 |
+ + +
1 row in set (0.00 sec)
mysql>
Giải thích:
1. Các lệnh trong sql được kết thúc bởi dấu chấm phẩy (;). (trử 1 số lệnh như
quit là trường hợp đặc biệt)
Chú ý dấu nhắc đã được đổi từ "mysql>" sang thành "->" khi bạn đánh "enter"
mà không được kết thúc bằng dấu chấm phẩy ";".
My SQL Documentation (sưu tầm)
Trang: 2
Nếu bạn muốn kết thúc dòng lệnh mà không đưa ra kết quả (cancel) bạn type
"\c". ví dụ:mysql> select
-> user()
-> \c
mysql>
Mysql có 4 loại dấu nhắc. Sau đây là ý nghĩa của các dấu nhắc:
Prompt Ý Nghĩa
mysql> Sẳn sàng cho 1 lệnh mới
-> Chờ cho hàng kế tiếp của 1 lệnh có nhiều hàng
'> Chờ cho hành kế tiếp thực hiện bởi 1 chuỗi trong dấu nháy đơn
"> Chờ cho hành kế tiếp thực hiện bởi 1 chuỗi trong dấu nháy đôi
ví dụ:
mysql> select user()
-> ;
hay
mysql> select * from my_table where name = "Thuy Lan age < 30;
mysql> create database menagerie;
Bây giờ bạn show databases, databases "menagerie" bạn mới tạo sẽ có trên
server. Để sử dụng database mới tạo, dùng lệnh use.
mysql> use menageries;
Database changed
My SQL Documentation (sưu tầm)
Trang: 3
(chú ý: có dấu ; hay không có cũng không thành vấn đề!)
Bạn đã có database rồi, bây giờ bạn sẽ tạo bảng.
b. Tạo bảng (table)
Trước hết, bạn muốn xem thử xem có bao nhiêu bảng đã tồn tại. Bạn dùng lệnh
show tables.
mysql> show tables;
Empty set (0.00 sec)
Không có bảng nào tồn tại. Giã sử bây giờ bạn muốn tạo bảng mới có tên là
"pet" gồm các mục sau:
1. Tên (name)
2. owner (người nuôi)
3. species (loài)
4. sex (giới tính)
5. birth (ngảy sinh)
mysql> insert into pet
-> values ('Puffball','Diane','hamster','f','1999-03-30',NULL);
Chú ý, giá trị cuối cùng là NULL, có nghĩa là rỗng.
Để xem các giá trị vừa rồi, bạn dùng câu lệnh như sau:
mysql> select * from pet;
Bây giở bạn hãy đưa vào bảng như sau: + + + + + + +
My SQL Documentation (sưu tầm)
Trang: 4
| name | owner | species | sex | birth | death |
+ + + + + + +
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Fang | Benny | dog | m | 1990-08-27 | NULL |
| Bowser | Diane | dog | m | 1998-08-31 | 1995-07-29 |
| Chirpy | Gwen | bird | f | 1998-09-11 | NULL |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
| Slim | Benny | snake | m | 1996-04-29 | NULL |
| Puffball | Diane | hamster | f | 1999-03-30 | NULL |
+ + + + + + +
Ngoài ra, bạn cũng có thể dùng tập tin text để đưa record vào bảng. Cách này
mysql> update pet set birth = '1989-08-31' where name = 'Bowser';
Tuy nhiên, vẫn còn 1 cách sửa lại nếu bạn dùng tập tin ".txt". Bạn mở tập tin
pet.txt ra, sửa lại record bạn muốn sửa. Rồi đánh lệnh sau:
mysql> set autocommit=1; #dùng để tạo nhanh lại 1 bảng.
mysql> delete from pet;
mysql> load data infile "pet.txt" into table pet;
3. Chọn từng bảng xác định:
Ví dụ:
a.
mysql> SELECT * FROM pet WHERE name = "Bowser";
+ + + + + + +
My SQL Documentation (sưu tầm)
Trang: 5
| name | owner | species | sex | birth | death |
+ + + + + + +
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
+ + + + + + +
b.
mysql> SELECT * FROM pet WHERE birth >= "1998-1-1";
+ + + + + + +
Các điều kiện and và or có thể được "trộn" (intermix) vào nhau:
mysql> SELECT * FROM pet WHERE (species = "cat" AND sex = "m")
-> OR (species = "dog" AND sex = "f");
+ + + + + + +
| name | owner | species | sex | birth | death |
+ + + + + + +
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+ + + + + + +
4. Chọn các hàng xác định (particular columns):
mysql> SELECT name, birth FROM pet;
+ + +
| name | birth |
+ + +
| Fluffy | 1993-02-04 |
| Claws | 1994-03-17 |
| Buffy | 1989-05-13 |
My SQL Documentation (sưu tầm)
Trang: 6
| Fang | 1990-08-27 |
| Bowser | 1989-08-31 |
| Chirpy | 1998-09-11 |
| Whistler | 1997-12-09 |
| Slim | 1996-04-29 |
| Puffball | 1999-03-30 |
| Diane |
| Gwen |
| Harold |
+ +
Bạn có thể dùng WHERE để kết hợp các hàng lại với nhau. Ví dụ, bạn muốn ngày
sinh của chó và mèo thôi:
mysql> SELECT name, species, birth FROM pet
-> WHERE species = "dog" OR species = "cat";
+ + + +
| name | species | birth |
+ + + +
| Fluffy | cat | 1993-02-04 |
| Claws | cat | 1994-03-17 |
| Buffy | dog | 1989-05-13 |
| Fang | dog | 1990-08-27 |
| Bowser | dog | 1989-08-31 |
+ + + +
5. Sắp xếp: (sorting the rows)
Với những mục đính cụ thể nào đó, bạn muốn sắp xếp những gì sẽ được đưa ra,
bạn dùng câu lệnh: "sort by <Tên hàng> [desc] hay [asc]". Ví dụ:
My SQL Documentation (sưu tầm)
Trang: 7
mysql> SELECT name, birth FROM pet ORDER BY birth;
+ + +
DESC là DESCENDING, ASC là ASCENDING.
Bạn cũng có thể sắp xếp nhiều hàng cùng 1 lúc bằng cách kết hợp các ORDER BY
với nhau. Ví dụ bạn muốn sắp xếp kiểu con vật trước, sau đó đến ngày sinh của
từng con, bạn sort như sau:
mysql> SELECT name, species, birth FROM pet ORDER BY species, birth
-> DESC;
+ + + +
| name | species | birth |
+ + + +
| Chirpy | bird | 1998-09-11 |
| Whistler | bird | 1997-12-09 |
| Claws | cat | 1994-03-17 |
| Fluffy | cat | 1993-02-04 |
| Fang | dog | 1990-08-27 |
| Bowser | dog | 1989-08-31 |
| Buffy | dog | 1989-05-13 |
| Puffball | hamster | 1999-03-30 |
| Slim | snake | 1996-04-29 |
+ + + +
Chú ý: DESC chỉ áp dụng cho hàng birth (có nghĩa là ngay trước nó). Còn
species vẫn được sắp xếp theo Asceding order.
6. Tính toán ngày: (Date Calculations)
Hãy lấy thêm 1 thí dụ nữa:
mysql> SELECT name, birth, CURRENT_DATE,
-> (YEAR(CURRENT_DATE)-YEAR(birth))
-> - (RIGHT(CURRENT_DATE,5)<RIGHT(birth,5))
-> AS age
-> FROM pet ORDER BY name;
+ + + + +
| name | birth | CURRENT_DATE | age |
+ + + + +
| Bowser | 1989-08-31 | 2001-08-29 | 11 |
| Buffy | 1989-05-13 | 2001-08-29 | 12 |
| Chirpy | 1998-09-11 | 2001-08-29 | 2 |
| Claws | 1994-03-17 | 2001-08-29 | 7 |
| Fang | 1990-08-27 | 2001-08-29 | 11 |
| Fluffy | 1993-02-04 | 2001-08-29 | 8 |
| Puffball | 1999-03-30 | 2001-08-29 | 2 |
| Slim | 1996-04-29 | 2001-08-29 | 5 |
| Whistler | 1997-12-09 | 2001-08-29 | 3 |
+ + + + +
Bây giờ, bạn muốn tính tuổi của những con đã chết rổi:
mysql> SELECT name, birth, death,
-> (YEAR(death)-YEAR(birth)) - (RIGHT(death,5)<RIGHT(birth,5))
-> AS age
-> FROM pet WHERE death IS NOT NULL ORDER BY age;
| Bowser | 1989-08-31 | 8 |
| Chirpy | 1998-09-11 | 9 |
| Whistler | 1997-12-09 | 12 |
| Slim | 1996-04-29 | 4 |
| Puffball | 1999-03-30 | 3 |
+ + + +
Do đó, để tìm xem tháng tới có phải cái sinh nhật nào không? giả sử bây giờ
là tháng 4, bạn muốn tìm sinh nhật trong tháng 5:
mysql> SELECT name, birth FROM pet WHERE MONTH(birth) = 5;
+ + +
| name | birth |
+ + +
| Buffy | 1989-05-13 | (trùng hợp thật, 13/5 cũng là SN của tôi)
+ + +
Thế nhưng Nếu bạn đang ở tháng 12 thỉ sao? chẳng lẽ bạn lại đi tìm
MONTH(birth) = 13 (???). Một điểu không thể phải không bạn?
Do đó, mysql đã cung cấp cho ta 1 hàm DATE_ADD(). Hàm này cho phép bạn thêm
vào ngày nào đó 1 khoảng thời gian xác định nào đó. Hãy thử như sau:
mysql> SELECT now(), Date_add(now(), interval 1 day) as them 1
-> ngay,
-> Date_add(now(), interval 1 month) as them 1 thang,
-> Date_add(now(), interval 1 year) as them 1 nam,
-> Date_add(now(), interval 1 hour) as them 1 gio,
-> Date_add(now(), interval 1 minute) as them 1 phut,
-> Date_add(now(), interval 1 second) as them 1 giay;
+ + + + +
Như đã thấy, kết quả nhận được thật vô nghĩa. Hãy sử dụng như sau:
mysql> select 1 is null, 1 is not null;
+ + +
| 1 IS NULL | 1 IS NOT NULL |
+ + +
| 0 | 1 |
+ + +
Trong mysql, 0 hoặc Null là FALSE, tất cả các giá trị khác là TRUE. Do đó,
kết quả trên là điều dễ hiểu.
8. Pattern Matching (xin lỗi mình không tìm được từ nào để dịch cả).
Hãy nghỉ Pattern Matching dùng để tìm các record đặc biệt.
SQL pattern matching cho phép bạn dùng '_' để gán với 1 kí tự riêng lẻ hay
dùng '%' để gán 1 lúc nhiều kí tự. (hãy nghĩ giống như '?' và '*' vậy). Trong
MySQL, pattern là "case insensity". Ngoài ra, trong SQL, bạn không dùng tóan
tử =, <> cho pattern matching mà dùng LIKE hoặc NOT LIKE.
Ví dụ:
mysql> SELECT * FROM pet where name = "b%";
Empty set(0.00)
mysql> SELECT * FROM pet where like 'b%';
+ + + + + + +
| name | owner | species | sex | birth | death |
+ + + + + + +
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+ + + + + + +
Ngoài ra, mysql còn sử dụng "extended regular expresions" cho pattern
matching. Khi sử dụng kiểu này, bạn thay LIKE và NOT LIKE thành REGEXP
(REGular EXPression) và NOT REGEXP. (hoặc bạn cũng có thể dùng RLIKE hoặc NOT
RLIKE cũng được, tất cả đều là 1)
+ Vài kiều mẫu của Extended regular expression":
o '.': gán cho tất cả các kí tự đơn.
o lớp kí tự '[ ]': gán với tất cả các kí tự trong ngoặc. Ví dụ,
'[abc]' gán với 'a','b' hoặc 'c'. Để đặt tên cho 1 dãy các kí tự, dùng dấu '-
'. Ví dụ: '[a-z]': gán với tất cả các kí tự và '[0-9]' cho tất cả các con số.
o '*': gán với số không '0' hoặc số các kí tự tạo nên nó. Ví dụ, 'x*' gán với
tất cả số các kí tự x.
o Để gắn các pattern sao cho nó gán vào đầu hoặc cuối của giá trị cần tỉm, ta
dùng '^' cho phần tử đầu và '$' cho phần tử cuối cùng.
Ví dụ: tìm tên bắt đầu bằng từ 'b':
mysql> SELECT * FROM pet WHERE name REGEXP '^b';
+ + + + + + +
Để tìm các pattern có kí tự 'w' và 'W' bạn dùng như sau:
mysql> SELECT * FROM pet WHERE name REGEXP 'w';
+ + + + + + +
| name | owner | species | sex | birth | death |
+ + + + + + +
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
+ + + + + + +
Như vậy, để tìm các tên có chính xác 5 kí tự như ví dụ trên thì bạn làm như
sau:
mysql> SELECT * FROM pet WHERE name REGEXP '^ $';
+ + + + + + +
| name | owner | species | sex | birth | death |
+ + + + + + +
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+ + + + + + +
Tuy nhiên, ví dụ trên còn có cách viết đơn giản hơn bằng cách dùng
"repeat-n-times operator". Kiểu như sau: '{n}'.
Ví dụ:
mysql> SELECT * FROM pet WHERE name REGEXP '^.{5}$';
Kết quả đưa ra giống như trên. Ở đây, xin chú ý các '.' được lập lại 5 lẩn.
mysql> SELECT sex, count(*) FROM pet GROUP BY sex;
Số các con vật từng loài và từng giới tính:
mysql> SELECT species, sex, count(*) FROM pet GROUP BY species,
->sex;
+ + + +
| species | sex | COUNT(*) |
+ + + +
| bird | NULL | 1 |
| bird | f | 1 |
| cat | f | 1 |
| cat | m | 1 |
| dog | f | 1 |
| dog | m | 2 |
| hamster | f | 1 |
| snake | m | 1 |
+ + + +
Bạn chỉ muốn đếm các con chó và mèo thôi? Hãy thử xem sao:
mysql> SELECT species, sex, count(*)
-> FROM pet
-> WHERE species = 'dog' OR species = 'cat'
-> GROUP BY species, sex;
+ + + +
| species | sex | COUNT(*) |
3. 1 trường để miêu tả sự kiện
4. 1 phân loại của sự kiện nếu bạn muốn phân loại các sự kiện đó.
Bây giờ, ta hãy tạo 1 bảng tên la event với các mục kể trên.
mysql> CREATE TABLE event (name VARCHAR(20), date DATE, type
-> VARCHAR(15),
-> remark VARCHAR(255));
Sau đó, dùng lệnh insert để đưa các dữ kiện sau vào: (hoặc để đơn giản hơn,
bạn dùng notepad type vào như sau và lưu vào tập tin event.txt. Sau đó, dùng
lệnh sau để đưa vào database server:
mysql> load data infile "event.txt" into table event;
name date type remark
Fluffy 1995-05-15 litter 4 kittens, 3 female, 1 male
Buffy 1993-06-23 litter 5 puppies, 2 female, 3 male
Buffy 1994-06-19 litter 3 puppies, 3 female
Chirpy 1999-03-21 vet needed beak straightened
Slim 1997-08-03 vet broken rib
Bowser 1991-10-12 kennel
Fang 1991-10-12 kennel
Fang 1998-08-28 birthday Gave him a new chew toy
Claws 1998-03-17 birthday Gave him a new flea collar
Whistler 1998-12-09 birthday First birthday
Kiểm lại: mysql> show tables;
mysql> select (to_days(current_date));
My SQL Documentation (sưu tầm)
Trang: 15
Đôi khi, bạn không cần phải co 2 bảng để có thể kết hợp lại với nhau. Điều
này có nghĩa là bạn cũng có thể kết hợp 1 bảng với chính nó. Trường hợp này
la dùng "aliases". Thí dụ bạn muốn tìm từng cặp con vật bạn có thể kết hợp
bảng pet với chính nó để tìm từng cặp con vật theo từng giống nòi.
mysql> SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species
-> FROM pet As p1, pet AS p2
-> WHERE p1.species = p2.species AND p1.sex = 'f' AND p2.sex =
-> 'm';
+ + + + + +
| name | sex | name | sex | species |
+ + + + + +
| Fluffy | f | Claws | m | cat |
| Buffy | f | Fang | m | dog |
| Buffy | f | Bowser | m | dog |
+ + + + + +
+ Câu lệnh FROM trên, bạn co thể có AS cũng được mà không có cũng được.
11. Lấy thông tin về cơ sở dữ liệu và bảng:
Một khi bạn đã quên tên của cơ sở dữ liệu hoặc tên của bảng, hoặc bạn muốn
tìm cấu trúc của 1 bảng nào đó. MySQL cho phép bạn làm điều đó qua 1 số câu
lệnh.
-> article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,
-> dealer CHAR(20) DEFAULT '' NOT NULL,
-> price DOUBLE(16,2) DEFAULT '0.00' NOT NULL,
-> PRIMARY KEY(article,dealer));
Đưa các giá trị vào bảng:
mysql> INSERT INTO shop VALUES
My SQL Documentation (sưu tầm)
Trang: 16
->
(1,'A',3.45),(1,'B',3.99), (2,'A',10.99),(3,'B',1.45),(3,'C',1.69),
-> (3,'D',1.25),(4,'D',19.95);
Thử xem sao:
mysql> SELECT * FROM shop;
+ + + +
| article | dealer | price |
+ + + +
| 0001 | A | 3.45 |
| 0001 | B | 3.99 |
| 0002 | A | 10.99 |
| 0003 | B | 1.45 |
| 0003 | C | 1.69 |
| 0003 | D | 1.25 |
| 0004 | D | 19.95 |
+ + + +
SELECT article, max(price) as price
FROM shop
GROUP BY article;
+ + +
| article | price |
+ + +
| 0001 | 3.99 |
| 0002 | 10.99 |
| 0003 | 1.69 |
| 0004 | 19.95 |
+ + +
My SQL Documentation (sưu tầm)
Trang: 17
+ cho từng article, tìm dealer với giá mắc nhất.
Với ANSI SQL, bạn làm như sau:
SELECT article, dealer, price
FROM shop s1
WHERE price=(SELECT MAX(s2.price)
FROM shop s2
WHERE s1.article = s2.article);
Nhưng với mysql, bạn làm theo 2 bước sau:
a. Lấy 1 list các giá trị (article, maxprice), dùng bảng tạm thời.
b. So sánh giá trị của bảng shop với giá trị của bảng tạm thời và rút ra
kết quả.
select * from shop where price = @min_price or price = @max_price;
+ + + +
| article | dealer | price |
+ + + +
| 0003 | D | 1.25 |
| 0004 | D | 19.95 |
+ + + +
Đó là tất cả những gì cơ bản nhất của mysql. Nếu bạn thích thú với mySQL, tôi
xin giới thiệu chương trình phpMyAdmin. phpMyAdmin là một chương trình mySQL
Client rất mạnh được viết bằng PHP. Bạn có thể dùng phpMyAdmin để truy cập
vào database quản lý mySQL từ browser.
end