MySQL-資料與實務控制語言

來源:互聯網
上載者:User

標籤:date   user   開始   使用者資訊   地址   而不是   語句   不執行   基本實現   

一、資料控制語言(DCL)

1、資料控制,其實就是“分配許可權”——就涉及到使用者。

2、則主要就是2個問題:

  使用者管理:

  許可權分配:有哪些許可權。

1、mysql中的許可權

(1)mysql中,許可權是系統內定的一些“名詞”(單詞),大約30個,每個許可權表示“可以做什麼工作”。 

(2)則分配許可權就是相當於讓某個使用者可以做哪些工作。

(3)主要許可權如下:

   

 

2、mysql中的使用者

mysql中的使用者資訊都儲存在系統資料庫mysql的user表中:

   

 

(1)建立使用者

文法形式:

create  user  ‘使用者名稱’@’允許其登入的地址’  identified  by  ‘密碼’;

說明:

1,建立的使用者需同時指定該使用者可以在哪個地址進行登入。

其中“%”代表“任何地址”。

2,使用者建立之後,自動在mysql的user表中添加了一條記錄,但該使用者還沒有許可權。

 

(2)刪除使用者

drop  user  ‘使用者名稱’@’允許其登入的地址’;

 

(3)修改使用者密碼 登入進去

①修改自己密碼: set  password = password(‘新密碼’);

②修改他人密碼(必須有修改許可權):

  set  password  for  ‘使用者名稱’@’允許其登入的地址’  = password(‘新密碼’);

 

3、許可權分配 (1)增加許可權:

grant 許可權名1,許可權名2, ....  on  資料庫名.對象名 to  使用者名稱@允許其登入的地址  identified by 密碼

說明:

①許可權名就是:’select’, ‘update’, ‘delete’,等等。其中ALL 表示“所有許可權”,或all  privileges也一樣

②對象名:就是一個資料庫中“裝”的東西,表是最常見的,也可以是視圖,預存程序,儲存函數等。 now()

   其中:*.*表示所有資料中的所有對象

   某資料庫名.*表示該資料庫中的所有對象——這個商業上常用。

③identified by ‘密碼’用於給一個使用者在此時修改密碼,不寫也可以,那就不修改密碼。

④但同時該語句也可以建立使用者(如果不存在),但此時identified by ‘密碼’必須寫。

 

(2)刪除許可權

revoke  許可權名1,許可權名2, ....  on  資料庫名.對象名 from  使用者名稱@允許其登入的地址 ;

表示從某個使用者身上“取消”某些許可權(也許還保留了其他許可權)。

二、事務控制語言(DTL) 1、什麼是事務

通常,在此之前,我們說,一條語句使用一個分號(;)來結束,並得到執行。那麼我們說,這個“一次性執行”的過程,可以稱為“一個事務”。

簡單來說,“一條sql語句,就是一個事務”。則:資料庫(自然包括mysql資料庫)中的事務,是指,可以將“多條語句”的執行,當作“一條語句”來看到的一種內部機制。

即:“事務”是一種可以保證“多條語句一次性執行完成”或“一條都不執行”的機制。

2、為什麼需要事務?

看一個實際應用需求(銀行存款):表名cunkuan

id

賬戶名

存款

1

test1

1000

2

test2

5000

3

test3

3000

現在,test1突然需要一筆錢,買iPhone8,向test2借錢4000。

銀行轉賬:

第一步: update  cunkuan  set 存款=存款-4000  where id=2;

第一步做完,突然斷電了!

第二步: update  cunkuan  set 存款=存款+4000  where id=1;

則如果沒有事務,就可能發生這種事情(慘案)。

如果有了事務,則就可以避免該事情。

事務可以看作是一個“容器”,將多條語句,放入該容器,最後,只要一個命令列,來決定其中的所有語句是否“執行”。

3、事務的特點

(1)原子性:一個事務中的所有語句,應該做到:要麼全做,要麼一個都不做;

(2)一致性:讓資料保持邏輯上的“合理性”,比如:一個商品出庫時,既要讓商品庫中的該商品數量減1,又要讓對應使用者的購物車中的該商品加1;

(3)隔離性:如果多個事務同時並發執行,但每個事務就像各自獨立執行一樣。

(4)持久性:一個事務執行成功,則對資料來說應該是一個明確的硬碟資料更改(而不僅僅是記憶體中的變化)。

4、事務的基本實現流程:

(1)聲明事務開始:start transaction;

(2)設定多條要執行的具體語句,比如:insert, update, delete, select。。。其實就是執行,只是這些執行的語句,並不“生效”——其只是記憶體狀態下的執行,而不是物理狀態的執行。

(3)判斷是否需要執行該些語句:

if( 判斷是否有錯誤){

//執行——才針對執行了物理性改變——即生效。

commit;

}

eslse{

//復原——不執行任何語句。

rollback;

}

  

(4)判斷是否有錯誤通常分這兩種環境:

①如果是cmd中,直接觀察是否出錯。

②如果是php程式中,那就需要使用 mysql_error()函數來判斷是否有錯。

 

下來來使用事務完整轉賬這件事情(假設為cmd模式):

start  transaction;

#第一步:

update  cunkuan  set 存款=存款-4000  where id=2;

#第一步做完,突然斷電了?

#第二步:

update  cunkuan  set 存款=存款+4000  where id=1;

則如果這兩條語句都沒有錯誤,就可以:

commit;

但,如果其中發生了錯誤,則可以:

rollback;

 

MySQL-資料與實務控制語言

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.