<MySQL資料庫操作> 1.創建資料庫. 在MySQL中應用 create database 語句創建資料庫.格式如下: create database db_name; db_name 為資料庫名,必須為合法名稱.規定如下: a.不能與其他資料庫重名. b.名字可以是任意的字母,阿拉伯數字,下劃 ...
<MySQL資料庫操作>
1.創建資料庫.
在MySQL中應用 create database 語句創建資料庫.格式如下:
create database db_name;
db_name 為資料庫名,必須為合法名稱.規定如下:
a.不能與其他資料庫重名.
b.名字可以是任意的字母,阿拉伯數字,下劃線或者"$"組成.可以使用以上任意的字元開頭,但不能是使用單獨的數字,哪樣會造成與數字混淆.
c.名字最長可由64個字元組成(包括表,列和索引),而別名最多可長達256個字元.
d.不能使用MySQL關鍵字作為資料庫名稱和表名.
ps: 執行過程:在創建資料庫時,首先連接MySQL伺服器,用戶名是root,密碼也是root,然後編寫"create database db_name;" sql語句,資料庫創建成功.
2.選擇資料庫.
use 語句用於選擇一個資料庫,使其成為當前預設資料庫.格式如下:
use db_name;
3.刪除資料庫.
刪除資料庫使用drop database語句.格式如下:
drop database db_name
ps.對於刪除資料庫的操作應該謹慎使用.一旦刪除資料庫中的所有結構和數據都將會被刪除,沒有恢復的可能,除非資料庫中有備份.
<MySQL 資料庫表>
上面將完資料庫的操作,下麵講一下資料庫中,對錶的操作.MySQL 資料庫表的操作包括 創建,查看,修改,重命名和刪除.
1.創建表.
創建表使用create table 語句.格式如下:
create [temporary] table [if not exists] 數據表名 [(create_definition,...)][table_options][select_statement]
a. temporary ,如果使用該關鍵字,表示創建一個臨時表.
b. if not exists ,該關鍵字用於避免創建表時,表存在時 MySQL報告的錯誤.
c. create_definition,這是表的列表屬性部分.MySQL要求在創建表時,表至少要包含一列.
create_deifnition 格式如下:
col_name type [not null] [default default_value] [auto_increment] [primary key] [reference_definition]
col_name:欄位名. type:欄位類型. not null|null:指出該列是否允許空值.not null 表示不允許空值.default default_value:表示預設值.
auto_increament:表示預設值.primary key:表示是否為主鍵,一個表中只能有一個primary key.如果沒有primary key ,而某些應用要求primary key,
伺服器將返回第一個沒有null 列的unique 鍵作為primary key.
d. table_option, 表的一些特性參數.
e. select_statement,select語句描述部分,用它可以快速地創建表.
2.查看表.
對於創建成功的表,使用show columns 語句或describe 語句查看指定數據表的表結構.格式如下:
show columns 語句:
show [full] columns from 數據表名 [from 資料庫名];
或者
show [full] columns from 數據表名.資料庫名;
describe 語句,describe 可以簡寫成DESC.
describe 數據表名;
或者
describe 數據表名 列名;
3.修改表.
修改表結構使用alter table語句.其中,修改表結構的操作又包括:增加或者刪除欄位,修改欄位名稱或者欄位類型,設置/取消主鍵或者外鍵,設置/取消索引以及修改表的註釋等.格式如下:
alter [ignore] TABLE 數據表名 alter_spec[,alter_spec]....
如果指定參數 ignore,當出現重覆行時,則只執行一行,其他重覆行將被刪除.
其中alter_spec 子句定義要修改的內容,格式如下:
alter_specification: add [column] create_definition [FIRST | AFTER column_name],//添加新欄位 add index [index_name] (index_col_name,....),//添加索引名稱 add primary key (index_col_name,...),//添加主鍵名稱 add unique [index_name] (index_col_name,...),//添加唯一的索引 alter [column] col_name {SET DEFAULT literal | DROP DEFAULT},//修改欄位名稱 change [column] old_col_name create_definition //修改欄位類型 modify [column] create_definition,//修改字句定義的欄位 drop [column] col_name ,//刪除欄位名稱 drop primary key,//刪除主鍵名稱 drop indEX index_name, //刪除索引名稱 rename [AS] new_tbl_name,//更改表名 table_options
alter table 語句允許制定多個動作,其動作使用逗號分隔,每個動作表示對錶的一個修改.通過alter 修改表列的前提是必須將表中的數據全部刪除.
4. 重命名錶.
重命名錶使用rename table 語句.格式如下:
rename table 數據表名1 to 數據表名2;//rename table 語句可以同時對多個數據表進行重命名,多個表之間以逗號分隔.
5. 刪除表
刪除數據表使用語句 drop table .格式如下:
drop table 數據表名; 或者 drop table if exists 數據表名; //防止刪除不存在的表,導致的報錯.
刪除數據表,將同樣導致沒有備份的數據無法恢復.
ps:在執行create table,alter table和drop table中的任何操作時,首先必須選擇資料庫,否則將無法對數據表進行操作.
<MySQL 數據表中的數據>
下麵總結數據表中的數據.如何更好的操作和使用這些數據才是使用MySQL資料庫的根本.
1.添加(插入)數據.
創建完資料庫和數據表後,要向表中添加數據.添加數據主要有三種語法方式:
a.列出所有新添加數據的所有的值.
insert into table_name values(value1,value2,.....);//語句缺點 當列過多的時候,不易明確知道匹配值.
b.給出要賦值的列,然後再給出值.
insert into table_name (column_name1,column_name2,...) values ( value1,value2,....);//缺點同上
c.用col_name =value 的形式給出列和值.
insert into table_name set column_name1 = value1 ,column_name2 = value2 , ....;//彌補以上缺點,但導致語句過長.
/*****批量添加數據.begin****/
數據的批量添加使用load data 和MySQLimport語句實現.
load data 通過大量讀取本地文件系統上的文件,可以將大量數據添加到資料庫中.格式如下:
load data local infile "filename.txt" into table table_name;
MySQLimport語句實現程式直接從文件讀取批量數據.它相當於load data 語句的一個介面.格式如下:
%MySQLimport -local table_name filename.txt;
MySQLimport可以自動生成一個load data 語句,該語句把filename.txt 文件中的數據裝入table_name 表.MySQLimport 將文件名中第一個圓點前的的字元作為新的表名,並且將文件中的數據導入到新表中.如 文件名 com.youfilename.txt. 那麼將會將數據導入到表com 中.
/*****批量添加數據.end****/
2.修改數據.
修改數據使用update語句.格式如下:
update table_name set column_name1=new_Value1,column_name2 =new_value2,... where condition;
condition 為條件語句,如user_name='張三'. 必須保證condition條件的準確性,否則將會導致破壞表中的數據.
3.刪除數據.
刪除數據使用 delete 語句.格式如下:
delete from table_name where condition;
ps. a.刪除某條數據時,一般選擇該數據的id 作為條件,以避免產生不必要的錯誤.
b.當到刪除整個表的數據,因效率問題,不推薦使用delete操作.可以使用truncate 語句,它可以很快的刪除表中的所有內容.
4.查詢數據.
從資料庫表中查詢數據用與操作以及顯示,是對數據進行操作比較重要的一環.下麵將會作詳細的解釋.
首先,對MySql資料庫表進行數據查詢用到select 語句.格式如下:
select selection_list //要查詢的內容,選擇查詢的列. from table_list //從何表中查詢,從何處選擇行. where primaryz_constraint //查詢時,需要滿足的條件. group by grouping_columns //如何對查詢結果進行分組. order by sorting_columns //如何對結果進行排序 having secondary_constraint //查詢時滿足的第二條件. limit count //限定輸出的結果.
a. select_list 表示要查詢的內容.如果要查詢表中所有的列,可以用" * "表示.如果查詢多列,可以直接輸入列名,並使用" , "分隔.
b. table_list 從指定的表中查詢.既可以從一個表中查詢;也可以從多個表中查詢,多表查詢使用 " ," 分隔,並且在where 字句中使用連接運算符號來確定表與表之間的關係.當使用多表查詢的使用,如果表中有相同的欄位,為了告訴伺服器要顯示的那個表中的欄位信息,需要在欄位前加上表名.格式如下:
table_name.columns_name; //表名.欄位名.
使用 " = "符號將表連接起來,叫做等同連接.比如.tb_student.name = tb_gradeOne.name ;如果不使用等號連接,那麼產生的結果將是兩個表的笛卡爾積,叫做全連接.
c.where 條件語句用於通過相應條件獲取對應信息.格式為 columns_name 比較運算符 value.
d. group by 實現對查詢得到的數據進行劃分並加以分組,從而實現分組查詢.在查詢時,所查詢的列必須包含在分組的列中,目的是使查詢到的數據沒有矛盾.在與avg() 或則sum()函數一起使用時,group by 語句能夠發揮最大的作用.
e.使用distinct 在結果中去除重覆行.
f.order by.使用order by 可以對結果進行升序和降序(DESC),在預設情況下,order by 按照升序輸出結果.如果要降序可以使用DESC 來實現.當對含有null值的列進行排序時,升序,null值排在最前,降序,null 排在最後.
g.like 模糊查詢. like 屬於較常用的運算符,通過它可以實現模糊查詢,他有兩種通配符,即"%"和下劃線"_"."%"可以實現匹配一個或多個字元,而"_"只匹配一個字元.
h. 使用concat 聯合多列.使用concat 函數可以聯合多個欄位,從而構成一個總的字元串.例如把書名與價格合併,並使用as 為欄位起一個別名.
select id ,concat(bookname,":",price) as bookInfo form tb_mkbook;
i.使用limit 限定結果函數.使用limit字句可以對結果的記錄條數進行限定,從而控制它輸出的行數. 例如:limit 3 --表示顯示3條數據.limit 5,10---表示從編號為5的記錄開始,往下讀10條數據用於顯示.
j.函數表達式.常用的統計函數有:
avg(columns_name);//獲取指定列的平均值.
count(columns_name);//統計出制定列的非空記錄的條數. 加distinct限定關鍵字,則統計不同值的條數,相同值的被認為為一條記錄.count(*),則統計包含空記錄的數目.
max(columns_name) 或者 min(columns_name);//獲取指定欄位的最大/最小值.
std(columns_name) 或者 stdtev(columns_name);//指定欄位的標準背離值.
sum(columns_name);//指定欄位所有記錄的值的和.
ps.常見的數據類型有 數字類型,字元串類型,時間和日期類型.詳細情況,請參考php相關知料與文檔.
<MySQL 資料庫的操作步驟.>
以上對mysql資料庫結構層次總結如下,下麵介紹對資料庫的操作步驟.
1.連接到mysql伺服器.
使用mysql_connect()函數創建與MySQL伺服器連接.方法格式如下:
<?php $conn = mysql_connect('hostname' , 'username' , ' password ') or die( "資料庫伺服器連接失敗".mysql_error()); //hostname: mysql伺服器的主機名或者ip.如果省略埠號,則預設為3306; //username:登陸mysql資料庫伺服器的名稱 //password: mysql伺服器的用戶密碼.
//改函數的返回值表示對這個資料庫的連接,如果成功,則返回一個資源.
if($conn){
//伺服器連接成功
}
?>
從上可以知道,可以指定非本機的機器名作為資料庫伺服器,這樣就為資料庫的異地存儲和資料庫的的安全隔離提供了保障.外界用戶往往通過www伺服器的直接訪問許可權,如果資料庫直接放在www伺服器上,就會給MySQL資料庫帶來安全隱患;如果為資料庫系統安裝防火牆,那麼php可以直接通過區域網訪問資料庫,而區域網的電腦對外部不可見,這樣保證了s資料庫不受外來攻擊.
為了方便查詢資料庫連接錯誤,可以加上die()函數進行屏蔽的錯誤處理機制.mysql_error()用於提取錯誤文本信息,如果沒有出錯則返回空字元;如果出錯,連蘭奇上將會顯示錯誤信息.
ps.對於用戶而言,建議在mysql_connect()前面添加@符號,用於屏蔽錯誤信息,這樣做是為了讓用戶看到一堆莫名其妙的錯誤信息.但是對於開發者而言,在調試的過程中,不使用@能讓我們快速定位錯誤信息.
2.選擇MySQL資料庫.
使用mysql_select_db()函數選擇MySQL資料庫伺服器上的資料庫,並與資料庫創建連接.格式如下:
mysql_select_db(string 資料庫名 [,resource link_identifier]); //string 資料庫名:要選擇的MySQL資料庫名稱 //resource link_identifier: MySQL伺服器的連接標識.
//例子,同上一步.
<?php
if($conn){
$selected = sql_select_db("db_webBookStore",$conn);
if($selected){
//資料庫連接成功;
}
}
?>
3.執行sql語句.
使用mysql_query()函數執行sql語句.sql語句操作在前面已經講過,此處不在闡述.主要介紹mysql_query()函數的用法,格式如下:
$result = mysql_query(string sql [,resource link_identifier]); //如果sql語句為查詢語句,成功則返回結果集合,否則返回false //如果sql語句為插入,刪除或更新,成功則返回true,否則返回false. //ps.改函數也可以用於選擇資料庫,和設置資料庫編碼格式. //如:mysql_query('user db_database13',$conn); // mysql_query(' set names utf8');
提高:mysql_unbuffered_query(),顧名思義改函數為不緩存結果查詢.它僅向伺服器發送一條sql查詢語句,但不獲取和緩存結果的行.它不像mysql_query哪樣自動獲取並緩存結果集.優點在於,當處理很大的結果集時,會節省客觀的記憶體;另一方面,可以在獲取第一行數據後立即對結果集進行操作,而不用等到整個SQL語句都執行完畢.
mysql_fetch_array()函數,用於將結果集合返回到數組中.格式為:
$array = mysql_fetch_array(resource result [,int result_type]); //resource result:資源類型的參數,要傳入的是由mysql_query()返回的資源數據指針. //int result_type:可選項,要傳入的整型參數,可以是:mysql_assoc(關聯索引),mysql_num(數字索引),mysql_both(同時包含前兩者).預設為mysql_both.
//註意,本函數返回的欄位名區分大小寫.
mysql_fetch_row()函數,從結果集中獲取一行來作為枚舉數組.格式為:
$array = mysql_fetch_row(resource result); //根據所獲取的行數據,生成數組.如果沒有更多的行,則返回false. //數組偏移量下標從0開始. //本函數返回的欄位名區分大小寫.
本函數只能使用數字索引,而mysql_fetch_array()兩者都可使用.如:數字索引:$array[0],關聯索引:$array[type];
mysql_num_rows()函數,用於獲取查詢結果集中的記錄數.格式為:
int mysql_num_rows(resource result);
//返回結果集中行的數目.此命令只對select語句有效.要獲取其他sql語句的操作所影響的數據集行數目,需要使用mysql_affected_rows()
4.數據執行完後,需要關閉結果集,以釋放資源.語法如下:
mysql_free_result(resource result);
如果在網頁中要頻繁的對資料庫進行訪問,可以通過創建與伺服器資料庫持續連接來提高效率.這樣就避免了,每次連接伺服器請求多帶來的長時間請求和較大的資源開銷.持續連接資料庫使用mysql_pconnect()函數來替換mysql_connect()函數.創建的持續連接,在程式結束前將不會調用mysql_close()來關閉資料庫請求.當再次調用mysql_pconnect()去連接資料庫的時,伺服器將返回已經創建的持續連接的ID號,而不去重新創建資料庫連接.
5.關閉MySQL伺服器.
每次使用mysql_connect()和mysql_query(),都會消耗系統資源.在少量用戶訪問web網站時候問題還不大,但當大量用戶連接超過一定的數量,就會造成系統性能的下降,甚至死機.為了避免這種情況,在完成資料庫操作後,應調用改函數來關閉與MySQL伺服器的連接,以節省系統的資源.格式如下:
mysql_close($conn);
ps.php中與資料庫的連接是非持久連接,系統會自動回收,一般不用設置關閉.但如果一次性返回的結果集比較大,或者網站訪問量比較多,則最好使用改函數手動釋放.
提高:
資料庫亂碼問題,使用mysql_query()函數設置資料庫編碼.編碼格式建議使用utf-8.如果使用gbk2312,如果用戶沒有安裝中文編碼(如一些美洲,歐洲用戶的機器查看中文網站),則在輸出時將會導致亂碼.utf-8 的使用返回更廣,可移植性更高,也更被國際化支持.
/************************************我是性感的分割線 ******************************/
ps:
哎,總算完成改部分的學習..本打算每周利用周末時間學習一部分,結果總是由於自己的惰性而遲遲沒有完成..明天請了假,準備參加一高中同學婚禮,只好利用這樣的一點時間完成.想想這一年,參加的婚禮還真不少啊.咱們都到了這年紀了,還是孤家寡人的可憐虫(^.^).
晚上看了<社交網路>,facebook的誕生過程原來是這樣的.真心覺得做一件事請都需要專註.one more things ,想到的就要馬上去做,我們常常為自己找這樣哪樣的藉口,以此來逃避麻煩,背對困難.但成功的關鍵,往往就在那麼一點行動力上.