01、mysql 簡介

mysql簡介

一、概述:

Mysql數據庫是一種c/s結構的軟件,客戶端/服務端,若想訪問服務器必須通過(服務器已至運行,客戶端在需要使用的時候運行)。

 

二、交互方式

      1、客戶端連接認證:連接服務器,認證身份:mysql.exe

      2、發送sql指令

      3、服務器接收sql指令,處理sql指令,返回操作結果

      4、客戶端接收結果:顯示結果

      5、斷開連接(釋放資源:服務器併發限制)

 

三、Mysql服務器對象

      沒有辦法完全瞭解服務器內部的內容:只能粗略的去分析數據庫服務器的內部結構,將Mysql服務器的內部對象豐城了四層:系統(DBMS)-》數據庫(DB)-》數據表(table)-》字段(field)

 

四、SQL基本操作

       1、基本操作CRUD

       將SQL的基本操作根據操作對象進性分類,我們可以將之分爲三類:庫操作,表操作(字段操作),數據操作。

    

 

五、庫操作

     對數據庫的增刪改查

    1、新增數據庫

         基本語法:Create database 數據庫名字[庫選項];

       -> 什麼叫做庫選項,用來約束數據庫,分爲兩個選項

   1)字符集設定:charset/characterset集體字符集(數據存儲的編碼格式),常用字符集:GBK,uft8

   2)校對字符集:collate 具體校對集(數據比較的規則)

       * 其中數據庫名字不能使用關鍵字和保留字

       *如果要使用中文名字的數據庫的時候,解決方案就是告訴服務器當前中文的字體是什麼.

*sql語句報錯只會告訴用戶大致的錯誤位置,不會說明錯誤的原因,這算是一種警告模式。

      *如果非要使用關鍵字數據庫,那麼我們必須使用反引號(esc鍵下面的鍵在英文狀態下輸出)

      *當我們創建數據庫的sql語句執行後發生了什麼?

      1)在數據庫系統中,創建對應名字的數據庫,增加了響應的數據庫信息

      2)會在保存數據庫的面Data目錄下創建一個對應的數據庫命名字的文件夾

       2、查看數據庫

           1)查看所有數據庫: show databases;

           2 ) show databases information_ ;時我們需要注意,下劃線可以替代一個字符,而百分號可以替代一個或者多個字符。這種方式被我們稱之爲模糊查詢。斜槓或者反斜槓被查詢時需要被轉義。

           3)查看數據庫的創建語句:showdatabase 數據庫名字;

       在這個時候我們可以看到,顯示出來的sql語句跟我們當初使用的語句是不一樣的,這說明了數據庫在執行sql語句之前回優化我們的sql;系統保存的結果是優化後的結果,所以當我們查看我們的語句時,會顯示優化後的結果。

 

     3、更新數據庫

          1)一般我們不能更改數據庫的名字,因爲這會造成後期代碼大量的維護成本。

          2)數據庫的修改 僅限於庫選項:字符集和校對集(字符集依賴校對集),所以我們一般很少去修改校對集。

             Alter database 數據庫名字[庫選項];

             Charset character set[=]字符集

             Clolate  校對集

      4、刪除數據庫

           所有數據庫中:刪除是最簡單的

           Drop database 數據庫名字;

           當刪除數據庫與執行後發生了什麼

1)      在數據庫內部看不到對應的數據。

2)      在對應的數據庫存儲文件夾內,數據庫對應名字的數據庫也被刪除(級聯刪除)。

3)      注意:數據庫的刪除可不是鬧着玩的。不要隨意刪除,應該先進行備份後操作,(刪除是不可逆的)。

六、表操作

     表的操作與字段是密不可分的

1、     新增數據表:

create table[if not exists] 表名(

字段名字 數據類型,

字段名字 數據類型

)[表選項]; 最後一個字段是不需要字段的

If not exists : 如果表名不存在,那麼就創建,否則不執行創建代碼:檢查功能。

表選項:控制表的表現

è 字符集:charset /character set 具體字符集; 保證表中存儲數據的字符集

è  校對集:collate 具體校對集

è 存儲引擎:engine 具體的存儲引擎(innodb和 myisam)

              任何一個表的設計都必須指定數據庫:

l  方案一:爲表指定數據庫 數據庫的.表名

l  方案二:隱式的指定數據表:先進入到數據庫環境,然後再來創建表,這樣的話,表就自動歸屬到某個指定的數據庫中。

進入數據庫環境: use 數據庫名字。

è 當創建數據表的sql指令執行之後發生了什麼?

1)      指定數據庫中已經存在對應的表

2)      在數據庫對應的文件夾下,會產生對應表的結構文件

2、     查看數據表

數據庫能查看的方式都能查看

1)      查看所有數據表:show databases;

2)      產看部分表:模糊匹配 show tables like ‘%s’;

3)      還能查表的創建語句:show create table 表名\g;

還有另外一種方式show create table 表明\G;跟第一種方式區別在於表內容的顯示旋轉了九十度。

4)      查看錶的結構:

desc 表名;

descibe 表名;

show colums from 表名;這三種方式都是一樣的。

3、     修改數據表

表本身存在,還包含字段,所以表的修改包括修改表本身以及修改字段。

1)      修改表本身:

表本身可以修改: 表名,表選項

A、     修改表名: rename 老表名 to 新表名;

B、     修改表選項:字符集、校對集、存儲引擎

Alter table 表名 表選項

C、     Droptable 表名1,表名2,……..;可以一次性刪除多張表。這樣的操作我我們一般不做,因爲幾乎所有的操作中,刪除數據式非常危險的一種方式,我們要有保護數據的意識。

è   當刪除數據表的指令生效時,(1)在表的空間中,沒有了指定的表(就連原先存儲的數據都沒有了)(2)在數據庫對應的文件夾下面,表對應的文件(與數據庫的存儲引擎有關)也會被刪除。

2)      修改字段:

字段操作有很多:新增、修改、重命名、刪除

A、     新增字段:alter 表名 add [column] 字段名 數據類型 [列屬性] [位置]

位置:字段名可以存放在任何的位置

First::第一個位置

After:在哪個字段之後:after 字段名;默認是在最後一個字段之後。

B、     重命名字段: alter table 表名 change 舊字段 新字段名數據類型 [屬性] [位置];

C、     刪除字段:alter table 表名 drop 字段名;

注意:如果表中已經存在數據,刪除該字段的時候,會清空該字段中的所有數據

                    

3)      數據操作

A、     新增數據:有兩種方式

l  方案一:給全表中的字段添加數據,不需要指定字段列表,但是要求數據的值出現的順序必須與表中設計的字段出現的順序一致,凡是非數值數據,都需要使用引號,而且建議使用單引號包裹

Insert into 表名 values (值列表)[,(值列表)]; 可以一次性插入多條記錄

l  方案二:給部分字段插入數據,需要選定字段列表:字段列表出現的順序無關,但是值列表的順序一定要與選擇插入的字段列表的順序一致。

Insert into 表名 (字段列表)values(值列表)[,(值列表)];

B、     查看數據

<- 查看所有數據:select * from 表名;

C、     更新數據

Update 表名 set 字段=值[where 條件];

更新數據不一定會成功,如果數據沒有變化就不會成功。

D、     刪除數據

Delete from 表名 where 條件;

七、 中文數據問題的本質是字符集的問題

計算機只識別二進制:人類更多的時識別字符,需要有個二進制與字符形成對應關係(字符集)

A、     查看數據庫服務器支持的字符集:show character set;

B、     查看數據服務器默認的對外處理的字符集:show variables like ‘character_set%’;

C、     採用set方式設置字符集時,只是檔次有效,如果我們每次都是這樣去設置字符集,將會變得十分麻煩,所以我們可以採用一下方式快捷設置字符集。

D、     快捷設置字符集: set names [字符集名稱];

例如:set names gbk;

此時更改的是character_set_client,character_set_cllection,character_set_results;三個選項。

ð 爲什麼要改變collection呢?這是因爲collection是字符集住那邊的連接層,如果統一了效率會更高,事實上不統一也是沒有任何問題的。

八、 校對集問題

         校對集的概念:數據比較的方式:

         校對集的三種方式:

1)      _bin:binary ,二進制的比較,一位一位的比較,區分大小寫

2)      _cs:case sensitive,大小寫敏感,區分大小寫

3)      _ci:  case insensitice,大小寫不敏感,不區分大小寫。

1、      首先我們查看一下數據庫支持的校對集:show cllection;我們可以知道,數據庫支持197種校對集。

2、      校對集應用,只有在數據產生比較的時候,校對集蔡虎生效

3、      對比:使用utf8 的_bin和_ci 來創建表,通過這個來進行比較。

九、 Web亂碼問題

       動態網站是由三部分構成的:瀏覽器,服務器,數據庫服務器三個部分組成,三個部分都有自己的字符集,,數據需要在三個方面來回傳遞,很容易產生亂碼問題

       解決方案就是:三方統一字符集,但是 事實上是不可能的,我們不可能控制用戶的字符集編碼。

 

但是我們呢要注意一點:操作系統的文件是ANSI:本地操作系統字符集GBK

當我們使用,javaweb進行web編程的時候,我們就依賴java代碼來將這幾者相互交互,處理好他們之間的字符集關係。這個時候我們就必須進行編碼檢查。


發佈了27 篇原創文章 · 獲贊 24 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章