<MySQL資料庫操作>

来源:http://www.cnblogs.com/shouce/archive/2016/04/28/5441252.html
-Advertisement-
Play Games

<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 ,想到的就要馬上去做,我們常常為自己找這樣哪樣的藉口,以此來逃避麻煩,背對困難.但成功的關鍵,往往就在那麼一點行動力上. 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); FormStart fs = new FormStart(); fs.ShowDi ...
  • IOC容器就是具有依賴註入功能的容器,IOC容器負責實例化、定位、配置應用程式中的對象及建立這些對象間的依賴。應用程式無需直接在代碼中new相關的對象,應用程式由IOC容器進行組裝。在Spring中BeanFactory是IOC容器的實際代表者。 IOC初始化的過程主要就是讀取XML資源,並解析,最 ...
  • 分享一款基於asp.net mvc框架開發的社區產品--近乎。目前可以在官網免費下載,下載地址:http://www.jinhusns.com/Products/Download?type=whp 1 引言 1.1 目的 用於社會化開發平臺的架構設計指導,闡述基礎設施及關鍵技術構件、業務構件的設計思 ...
  • 今天學習,如標題。創建一個類,欄位屬性構造函數:Source code: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Task ...
  • abstract 用關鍵字abstract修飾的類叫做抽象類,且只能作為基類,也不能實例化。 用abstract定義的抽象類中不一定只包含抽象方法 ,可以包含非抽象方法。 abstract定義的方法一定用放在抽象類中。 派生類中一定要實現抽象類中的所有的抽象方法,否則派生類也要聲明為抽象類。 抽象方 ...
  • 0x00 前言 寫網站的時候,或多或少會遇到,登錄,註冊等操作,有時候,為了防止別人批量進行操作,不得不做出一些限制IP的操作(當前也可以用於限制某個賬號的密碼校驗等)。 這樣的簡單限制,我們又不想對數據進行存庫(顯得過於浪費資源了)。所以就誕生了0x01中提到的,簡單IP限制類。 0x01 正文 ...
  • 第一次自己寫博客文章,大家多多指教。寫博客主要記錄一下學習的過程,給初學者提供下參考,也留給自己做備忘。 Slickflow .NET開源工作流-項目轉換 上一篇文章里說了1.2版本的下載,下載解壓後,發現使用的是VS2013創建的項目。可憐我的電腦至今最高版本是VS2010。於是就有了這篇文章。最 ...
  • 第一次自己寫博客文章,大家多多指教。寫博客主要記錄一下學習的過程,給初學者提供下參考,也留給自己做備忘。 Slickflow .NET開源工作流-介紹 這裡摘錄Slickflow官網的介紹: Slickflow工作流引擎,選取BPMN模型作為工作流模型的語義表達,BPMN模型消除技術和業務之間的隔閡 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...