Tröôùc khi chuùng ta taïo caùc table trong CSDL cuûa MySQL, coù moät vaøi thöù baïn caàn phaûi hieåu
roõ. Nhöõng khaùi nieäm cô baûn maø toâi saép giôùi thieäu sau ñaây raát quan troïng. Baïn haõy chaéc raèng
mình ñaõ naém kyõ veà chuùng tröôùc khi thöïc hieän vieäc thieát keá döõ lieäu.
Null
Vieäc ñaàu tieân baïn phaûi laøm trong vieäc thieát keá moät table laø quyeát ñònh xem moät field coù cho
pheùp giaù trò NULL hay khoâng.
Trong CSDL quan heä, giaù trò NULL cuûa moät field ñoàng nghóa vôùi noù coù theå chaáp nhaän khoâng
coù döõ lieäu trong ñoù. Neân nhôù raèng giaù trò NULL khaùc vôùi giaù trò cuûa moät chuoãi khoâng coù kyù
töï trong ñoù hoaëc soá coù giaù trò 0.
Ñoâi khi trong chöông trình, baïn seõ thöïc hieän moät soá ñoäng taùc so saùnh xem moät chuoãi naøo ñoù
coù chöùa giaù trò hay khoâng, noù coù theå laø moät caâu leänh IF. Xeùt moät ví duï PHP nhö sau:
$var //this is a variable used in the test
if ($var == “”)
{
echo “Var is an empty string”;
} else {
echo $var;
}
Neáu baïn thöïc hieän vieäc so saùnh xem giaù trò soá coù phaûi 0 hay khoâng thì cuõng thöïc hieän töông
töï.
Ñoäng taùc so saùnh treân seõ khoâng laøm vieäc ñöôïc ñoái vôùi giaù trò NULL. Baïn neân hieåu raèng
NULL laø khoâng chöùa baát kyø giaù trò gì trong ñoù, cho neân vieäc so saùnh trò khoâng mang yù nghóa
gì caû. Trong chöông 3 baïn seõ thaáy raèng ñoái vôùi giaù trò NULL ñoøi hoûi laäp trình vieân phaûi raát
caân nhaéc khi vieát leänh lieân keát table.
Trong leänh SELECT cuûa SQL, coù moät soá caùch ñeå baïn coù theå kieåm tra neáu nhö moät field
chöùa giaù trò NULL. Tröôùc heát baïn haõy söû duïng haøm Isnull(). Giaû söû tìm moät record trong
table maø giaù trò midle_name laø NULL, baïn coù theå söû duïng query sau:
select * from names where isnull(middle_name);
Hoaëc laáy caùc record maø middle_name khaùc NULL:
select * from names where !isnull(middle_name);
Baïn cuõng coù theå söû duïng is null vaø is not null:
select * from users were addr2 is null;
select * from users where addr2 is not null;
Ñeå roõ hôn, baïn haõy xem chuyeän gì xaûy ra khi toâi coá gaéng lieân keát hai table sau:
Khach_hang
ten ho_lot ba_xa
Trung Le Anh 1321
Khai Tong Phuoc Null
Hon_nhan
ba_xa ten ho_lot
1321 Diem Nguyen Thuy
Neáu baïn muoán tìm teân caùc khaùch haøng vaø teân nhöõng baø xaõ cuûa hoï, baïn seõ phaûi lieân keát 2
table naøy thoâng qua field ba_xa. (Xin baïn chôù lo laéng khi chöa hieåu veà cuù phaùp, baïn seõ hoïc
ngay ôû phaàn tieáp theo thoâi).
SELECT * FROM khach_hang, hon_nhan
WHERE khach_hang.ba_xa = hon_nhan.ba_xa
Vieäc thöïc hieän naøy chæ ñuùng ñoái vôùi Trung, nhöng seõ coù vaán ñeà ñoái vôùi Khai bôûi vì anh ta haõy
coøn ñoäc thaân vaø ba_xa cuûa anh ta laø NULL.
Trong chöông 3 baïn seõ khaûo saùt kyõ hôn veà vaán ñeà naøy.
Index
Ngöôøi ta noùi raèng öu ñieåm vöôït troäi cuûa Heä quaûn trò CSDL quan heä laø noù thöïc hieän caùc vieäc
tìm kieám hay saép xeáp nhöõng khoái löôïng döõ lieäu khoång loà moät caùch raát nhanh choùng. Sôû dó noù
thöïc hieän ñöôïc vieäc naøy laø do noù coù chöùa moät cô caáu löu tröõ döõ lieäu goïi laø INDEX.
INDEX cho pheùp database server taïo ñöôïc moät field ñaëc tröng tìm kieám vôùi toác ñoä khoù ngôø.
Caùc INDEX ñaëc bieät hoã trôï moät hoaëc moät nhoùm caùc record trong moät table chöùa soá löôïng lôùn
caùc record. Chuùng cuõng hoã trôï toác ñoä cho caùc haøm lieân keát hoaëc taùch nhoùm döõ lieäu nhö
min(), max(), baïn seõ tìm hieåu ôû Chöông 3.
Vôùi caùc tính naêng vöôït troäi naøy, taïi sao ngöôøi ta laïi khoâng taïo index trong taát caû caùc field cuûa
moät table? Coù moät soá ñieàu trôû ngaïi nhö sau: Thöù nhaát, index coù seõ laøm chaäm moät soá tieán
trình trong CSDL. Moãi laàn baûo trì caùc index Database Server phaûi maát khaù nhieàu thôøi gian.
Coù moät vaøi tröôøng hôïp chính caùc index laøm cho chuùng chaäm haún. Neáu nhö treân table cuûa baïn
taát caû caùc record ñeàu gioáng y nhö nhau thì khoâng coù lyù do gì ñeå baïn taïo index. Caùc index dö
thöøa chæ laøm cho toán theâm khoâng gian ñóa cuûa baïn maø thoâi.
Ñoái vôùi moät table coù gaén khoaù chính (primary key) thì thoâng thöôøng field coù khoaù naøy ñöôïc
duøng vaøo vieäc tìm kieám cho neân index seõ ñöôïc gaùn töï ñoäng treân field naøy.
Baïn seõ gaëp laïi raát nhieàu coâng vieäc taïo index ôû caùc phaàn tieáp theo sau.
Leänh CREATE Database
Tröôùc khi taïo ñöôïc moät Table thì ñieàu taát yeáu laø baïn phaûi taïo ñöôïc moät Database caùi ñaõ.
Vieäc naøy deã daøng vaø nhanh choùng thoâi. Leänh CREATE ñöôïc söû duïng nhö sau:
mysql> create database database_name;
Neáu nhö baïn thaéc maéc raèng sau khi taïo database noù seõ naèm ôû trong thö muïc naøo treân oå ñóa cuûa baïn thì baïn haõy
tìm trong ..\\mysql\\data xem coù khoâng.
Khi ñaët teân cho database, hay ñaët teân cho field vaø index gì ñaáy traùnh tröôøng traùnh tröôøng hôïp
ñaët nhöõng caùi teân khoù nhôù hoaëc deã bò laãn loän. Ñoái vôùi moät soá heä thoáng Unix chaúng haïn coù söï
phaân bieät chöõ HOA/thöôøng thì CSDL chaïy treân noù cuõng aûnh höôûng theo.
Baïn haõy choïn moät quy öôùc cho rieâng mình trong vieäc ñaët teân ñeå khoûi nhaàm laãn veà sau.
Chaúng haïn teân cuûa table vaø field ñeàu ñaët chöõ thöôøng chaúng haïn. Neân nhôù laø khoâng ñöôïc söû
duïng khoaûng traéng.
Baây giôø baïn tìm hieåu caû hai caùch taïo database: Caùch thöù nhaát taïo thuû coâng töø daáu nhaéc doøng
leänh DOS, caùch thöù hai söû duïng caùc leänh trong PHP.
Caùch thöù nhaát toâi ñaõ coù trình baøy ôû chöông giôùi thieäu vaø baïn ñaõ taïo moät database teân laø
guestbook. Cuù phaùp taïo nhö sau:
mysql> create database guestbook;
Caùch thöù hai laø söû duïng leänh trong PHP, baïn coù theå duøng haøm mysql_create_db() hoaëc
mysql_query(). Nhöng neân nhôù tröôùc khi taïo baïn phaûi thöïc hieän ñöôïc keát noái vôùi database
server.
$conn = mysql_connect(“localhost”,”username”, “password”)
or die (“Could not connect to localhost”);
mysql_create_db(“my_database”) or
die (“Could not create database”);
$string = “create database my_other_db”;
mysql_query($string) or
die(mysql_error());
Leänh USE Database
Sau khi ñaõ taïo ñöôïc moät database môùi trong database server baïn seõ baét ñaàu choïn noù ñeå söû
duïng cho coâng vieäc cuûa mình. Caùch thöïc hieän nhö sau:
1. Command Prompt:
mysql> use database_name;
2. Trong PHP:
$conn = mysql_connect(“localhost”,”username”, “password”)
or die (“Could not connect to localhost”);
mysql_select_db(“test”, $conn) or
die (“Could not select database”);
Leänh CREATE Table
Löu yù: Leänh naøy thöïc hieän sau khi ñaõ coù leänh CREATE Database.
Moät khi baïn ñaõ taïo vaø choïn database, vieäc tieáp theo laø taïo moät table. Baïn seõ söû duïng leänh
Create Table nhö sau:
create table table_name
(
column_1 column_type column_attributes,
column_2 column_type column_attributes,
primary key (column_name),
index index_name(column_name)
)
Ñoái vôùi thuoäc tính caùc field (coät) chuùng ta caàn baøn veà:
- null hoaëc not null
- default
Neáu baïn khoâng ñònh nghóa NULL hay NOT NULL thì NULL seõ ñöôïc choïn laøm giaù trò maëc
ñònh. Haõy xeùt ví duï sau:
create table topics2 (
topic_id integer not null auto_increment,
parent_id integer default 0 not null,
root_id integer default 0,
name varchar(255),
description text null,
create_dt timestamp,
modify_dt timestamp,
author varchar(255) null,
author_host varchar(255) null,
primary key(topic_id),
index my_index(parent_id))
Trong ví duï treân baïn taïo ra moät table coù teân topics2, coù taát caû 8 field vaø coù 2 index, moät
index cho khoaù chính vaø moät cho parent_id. Type cuûa caùc field treân laàn löôït laø integer,
varchar, text, timestamp. Giaù trò ñöùng sau defaul laø giaù trò maëc ñònh baïn gaùn cho moät oâ trong
record khi khoâng nhaäp lieäu vaøo.
Baây giôø chuùng ta aùp duïng caùc leänh naøy vaøo moät chöông trình PHP ñeå taïo table, haøm
mysql_query () ñöôïc söû duïng:
$conn = mysql_connect(“localhost”,”username”, “password”) or
die (“Could not connect to localhost”);
mysql_select_db(“test”, $conn) or
die(“could not select database”);
$query = “create table my_table (col_1 int not null primary key,
col_2 text)”;
mysql_query($query) or
die(mysql_error());
* Löu yù: username vaø password tuyø thuoäc vaøo MySQL cuûa baïn.Ví duï:
$conn = mysql_connect(“localhost”,”minhtrung”, “zadfdfaked”) or
Thoâng thöôøng caùc nhaø cung caáp host PHP söû duïng localhost, tuy nhieân moät soá hosting khoâng söû duïng localhost
nhö Yahoo chaúng haïn. Do ñoù baïn caàn xem höôùng daãn cuûa nhaø cung caáp host.
Kieåu döõ lieäu
Baây giôø chuùng ta haõy baøn veà caùc kieåu döõ lieäu (type) gaùn cho field trong table. Coù raát nhieàu
kieåu khaùc nhau chuùng ta seõ laàn löôït khaûo saùt töøng kieåu moät.
Kieåu chuoãi vaên baûn
MySQL coù 7 kieåu daønh cho döõ lieäu kieåu chuoãi vaên baûn:
char
varchar
tinytext
text
mediumtext
longtext
enum
Leänh Alter table
Neáu nhö baïn muoán thay ñoåi caùc thaønh phaàn cuûa table baïn seõ söû duïng leänh alter table. Baïn coù
theå thöïc hieän caùc thay ñoåi nhö: ñoåi teân table, field, index; theâm hoaëc xoaù field vaø index; ñònh
nghóa laïi caùc field vaø index. Cuù phaùp cô baûn cuûa leänh naøy laø:
alter table table_name
Caùc leänh coøn laïi tuyø thuoäc vaøo thao taùc maø chuùng ta seõ baøn tieáp theo ñaây:
Ñoåi teân Table
Cuù phaùp nhö sau:
alter table table_name rename new_table_name
If you have MySQL version 3.23.27 or higher you can make use of the
rename statement.The basic syntax is
rename table_name to new_table_name
Theâm vaø xoaù coät trong Table
Khi theâm field vaøo trong table, baïn seõ caàn phaûi coù nhöõng ñònh nghóa caàn thieát cho field ñoù.
Töø phieân baûn 3.22 cuûa MySQL cho pheùp baïn choïn vò trí ñeå ñaët field môùi vaøo trong table.
Chöùc naêng naøy khoâng baét buoäc.
alter table table_name add column column_name column attributes
Ví duï:
alter table my_table add column my_column text not null
Caùch söû duïng ñònh vò moät field trong table: Söû duïng leänh first ñeå cheøn field môùi vaøo vò trí ñaàu
cuûa table. After ñeå cheøn vaøo vò trí sau cuøng treân table:
alter table my_table add column my_next_col text not null first
alter table my_table add column my_next_col text not null after
my_other_column
Ñeå xoaù moät field, baïn thöïc hieän leänh sau:
alter table table_name drop column column name
Khi thöïc hieän leänh alter ñoái vôùi moät table, baïn chæ neân thöïc hieän moät thao taùc ñoái vôùi table maø thoâi. Ví duï: Baïn
thöïc hieän vieäc xoaù moät index, sau ñoù taïo moät index môùi, thì khoâng neân goäp chung vaøo moät leänh alter maø neân
thöïc hieän 2 laàn.
Theâm vaø xoaù Index
Baïn coù theå theâm index baèng caùch söû duïng leänh index, unique vaø primary key, töông töï nhö
vieäc söû duïng leänh create vaäy.
alter table my_table add index index_name (column_name1,
column_name2, ...)
alter table my_table add unique index_name(column_name)
alter table my_table add primary key(my_column)
Baïn cuõng coù theå boû index baèng caùch söû duïng leänh drop:
alter table table_name drop index index_name
alter table_name test10 drop primary key
Ñoåi thuoäc tính cuûa coät (field)
Thay ñoåi caùch thaønh toá cuûa field baèng leänh change hoaëc modify:
alter table table_name change original_column_name new_column_name
int not null
Leänh sau laø sai:
alter table table_name change my_col2 my_col3;
Neáu baïn muoán chæ ñoåi thuoäc tính cuûa field thì duøng leänh change vaø taïo field môùi cuøng teân
nhöng thay ñoåi thuoäc tính. Giaû duï baïn ñoåi field col_1 töø kieåu char(200) sang varchar(200):
alter table table_name change col_1 col_1 varchar(200)
Vôùi MySQL phieân baûn 2.22.16 trôû ñi baïn coù theå duøng leänh modify:
alter table table_name modify 1 col_1 varchar(200)
Leänh Update
Leänh UPDATE coù moät chuùt khaùc bieät so vôùi caùc leänh maø chuùng ta ñaõ khaûo saùt, noù thöïc hieän
thoâng qua leänh WHERE. Cuù phaùp thoâng thöôøng laø:
update table_name set col_1=value1, col_2=value_2 where col=value
Xin nhaéc laïi laàn nöõa, neáu baïn muoán theâm vaøo moät chuoãi, baïn caàn phaûi bao noù trong caùc daáu
nhaùy ñôn vaø daáu thoaùt. Neân nhôù raèng leänh WHERE trong caâu leänh UPDATE coù theå thöïc hieän
baát kyø pheùp so saùnh naøo ôû phía sau noù. Thoâng thöôøng noù hay ñöôïc duøng ñeå ñònh xaùc ñònh moät
record ñôn vôùi khoaù chính. Trong table folks sau ID laø khoaù chính.
id fname lname salary
1 Don Liu 25,000
2 Don Corleone 800,000
3 Don Juan 32,000
4 Don Johnson 44,500
Caâu leänh sau seõ taùc ñoäng ñeán Don Corleone:
update folks set fname=’Vito’ where id=2
Nhö baïn thaáy, neáu nhö baïn duøng leänh UPDATE döïa treân field fname thì thaät khoâng neân chuùt
naøo, vì baïn coù theå caäp nhaät taát caû caùc field trong table naøy.
update folks set fname=’Vito’ where fname=’don’
Baïn cuõng coù theå duøng UPDATE ñeå thöïc hieän vieäc ñieàu chænh taêng löông ñoái vôùi nhaân vieân
chaúng haïn:
update folks set salary=50000 where salary<50,000
Leänh drop table/drop database
Leänh DROP duøng ñeå xoaù table hoaëc caû database. Neân nhôù moät ñieàu laø moät khi baïn thöïc hieän
leänh naøy roài thì baïn khoâng theå khoâi phuïc laïi döõ lieäu cuûa baïn. Haõy caån troïng!
drop table table_name
drop database database_name
Leänh DROP TABLE ñöôïc chuyeån ñoåi sang PHP thoâng qua haøm mysqlquery(). Neáu baïn
muoán xoaù database trong PHP, baïn caàn söû duïng haøm mysql_drop_db(). Seõ ñöôïc trình baøy caên
keõ ôû caùc phaàn sau!
Leänh show tables
Ñeå trình baøy moät danh saùch caùc table coù trong database, baïn söû duïng leänh SHOW TABLES.
Ñeå thöïc hieän ñöôïc leänh naøy baïn neân löu yù laø phaûi choïn database tröôùc ñaõ baèng leänh USE
DATABASE
Hình sau laø keát quaû cuûa vieäc thöïc hieän leänh SHOW TABLES töø daáu nhaéc leänh.
Leänh Show table
Trong PHP, baïn coù theå cho hieån thò moät danh saùch table baèng caùch söû duïng haøm
MYSQL_LIST_TABLES():
<?
mysql_connect(“localhost”, “root”, “”);
$result = mysql_list_tables(“test”);
while($row = mysql_fetch_array($result))
{
echo $row[0] . “<br>\\n”;
}
?>
Leänh show columns /show fields
Caùc leänh cho keát quaû gioáng nhau. Baây giôø baïn haõy duøng leänh CREATE ñaõ hoïc ñeå taïo moät
table sau ñoù duøng moät trong hai leänh treân ñeå cho hieån thò caùc field cuûa noù:
create table topics (
topic_id integer not null auto_increment primary key,
parent_id integer default 0 not null,
root_id integer default 0,
name varchar(255),
description text null,
create_dt timestamp,
modify_dt timestamp,
author varchar(255) null,
author_host varchar(255) null,
index my_index(parent_id)
)
Hình sau trình baøy keát quaû cuûa leänh SHOW FIELDS thöïc hieän töø daáu nhaéc leänh:
Leänh Show Fields
Baïn coù theå cho ra keá quaû töông töï trong PHP baèng caùch söû duïng haøm
MYSQL_FIELD_NAME(), MYSQL_FIELD_TYPE(), vaø MYSQL_FIELD_LEN(). Taát caû
caùc caùc haøm naøy ñöôïc trình baøy caën keõ ôû caùc phaàn sau.
$db = mysql_connect(“localhost”,”root”, “”)
or die (“Could not connect to localhost”);
mysql_select_db(“test”, $db)
or die (“Could not find test”);
$db_name =”topics”;
$query = “select * from $db_name”;
$result = mysql_query($query);
$num_fields = mysql_num_fields($result);
//create table header
echo “<table border = 1>”;
echo “<tr>”;
for ($i=0; $i<$num_fields; $i++)
{
echo “<th>”;
echo mysql_field_name ($result, $i);
echo “</th>”;
Ñôn giaûn noù chæ laø moät caùch thöùc ñeå duy trì vaø truyeàn bieán trong khi chuyeån tieáp giöõa caùc
trang web. Chöông trình cuûa baïn khai baùo moät session ñöôïc baét ñaàu vôùi haøm start_session().
PHP ñaêng kyù moät SesssionID duy nhaát, vaø thöôøng thì ID naøy ñöôïc gôûi ñeán user thoâng qua moät
cookie. PHP sau ñoù taïo moät taäp tin treân server ñeå theo doõi söï thay ñoåi cuûa bieán. Taäp tin naøy
coù teân gioáng nhö teân cuûa SessionID.
Moät khi session ñöôïc taïo, baïn coù theå ñaêng kyù baát kyø soá löôïng bieán. Caùc giaù trò cuûa nhöõng bieán
naøy ñöôïc löu giöõ trong taäp tin treân server. Cuõng nhö söï toàn taïi cuûa cookie, caùc bieán trong
session seõ hieän dieän treân baát kyø trang naøo ñöôïc truy caäp ñeán trong phaïm vi moät domain. Vieäc
xaùc laäp naøy raát thuaän tieän hôn laø chuyeån tieáp caùc bieán töø trang naøy sang trang khaùc thoâng qua
caùc phaàn töû aån trong form hay cookie.
Session noùi chung laø khaù ñôn giaûn. Haõy xem script sau seõ ñaêng kyù moät bieán session teân laø
$my_var, vaø seõ gaùn cho noù moät giaù trò laø \"hello world\".
<?
session_start();
session_register(\"my_var\");
$my_var = \"hello world\";
?>
Treân nhöõng trang tieáp theo bieán $my_var seõ hieän dieän, nhöng chæ sau khi baïn chaïy haøm
sesssion_start(). Haøm naøy baûo PHP tìm kieám moät session xem coù toàn taïi hay khoâng, roài laøm
cho caùc bieán session trôû thaønh global. Noù coù theå söû duïng caâu leänh IF ñeå laøm cho caùc bieán
session hoaøn toaøn coù theå truy caäp ñöôïc. Haõy xem xeùt ví duï sau:
<?php
session_start();
session_register(\"your_name\");
//check to see if $your name contains anything
if(!empty($your_name))
{
echo \"I already know your name, $your_name\";
}
//this portion will probaby run the first time to
//this page.
elseif(empty($your_name) && !isset($submit))
{
echo \"<form name=myform method=post action=$PHP_SELF>
<input type=text name=first_name> first name<br>
<input type=text name=last_name> last name<br>
<input type=submit name=submit value=submit>
</form>\";
//if the form has been submitted, this portion will
//run and make an assignment to $your_name.
} elseif (isset($submit) && empty($your_name))
{
$your_name = $first_name . \" \" . $last_name;
echo \"Thank you, $your_name\";
}
Sau khi chaïy chöông trình naøy, choïn refresh treân trình duyeät. Baïn seõ thaáy script seõ nhôù ñöôïc
raèng baïn laø ai.
Caùc haøm setcookie() vaø session_start() neân ôû vò trí gaàn ñaàu taäp tin. Neáu baïn thöû chuyeån ñeán
trình duyeät tröôùc ñeå xaùc laäp moät cookie baïn seõ nhaän ñöôïc moät thoâng baùo loãi.
1 comments
Comments 1 - 1 of 1 previous next Post a comment