資料庫之常見函式 事務四大特性 併發引發的三大問題

2021-10-24 02:28:45 字數 3676 閱讀 4950

-- 查字串長度

select char_lenth(hello)

;-- 5

-- 字串拼接

select concat(

'hello'

,'world');

-- helloworld

-- 將字串的所有字母變成小寫

select lower(

'hello');

-- hello

-- 將字串的所有字母變成大寫

select upper(

'hello');

-- hello

-- 從字串 s 的 start 位置(從1開始)擷取長度為length 的子字串

select substr(

'hello',2

,4);

-- ello

-- 去掉字串 s 開始和結尾處的空格

select trim(

' h ello ');

-- h ello

-- 返回0-1的隨機數

select rand();

-- 四捨五入保留幾位小數

select

round

(3.1415,3

);-- 3.142

-- 不會四捨五入保留幾位小數

select

truncate

(3.1415,3

);-- 3.141

-- 返回列表中的最小值

select least(1,

2,3,

4);-- 1

-- 返回列表中的最大值

select greatest(1,

2,3,

4);-- 4

select

now(

); 或 select sysdate();

select curdate();

-- 返回系統當前日期: 年-月-日

select curtime();

select

year

(now()

);-- 返回當前日期中的年份

select

month

(now()

);-- 返回當前日期中的月份

select

day(

now())

;-- 返回當前日期中的日

-- 返回當前使用者

select

current_user()

;-- root@localhost

-- 如果v1為null,返回v2,如果不是返回v1

select ifnull(v1,v2)

;-- 判斷表示式是否為null,是返回1,不是返回0

select isnull(

'周杰倫');

-- 0

事務:簡單來說就是多條sql語句組合在一起完成某個功能。

提交事務的方法:

1.手動提交:先開啟事務,執行sql語句,成功則提交事務,失敗則回滾事務。

以轉錢為例:

準備資料

-- 需求:a給b轉100塊錢

-- 1.先開啟乙個事務

start

transaction

;-- 2.執行一組dml語句

update account set money=money-

100where name=

'a';

-- a轉出100

update account set money=money+

100where name=

'b';

-- b收入100

-- 3.轉賬成功,提交事務(事務提交之後,sql語句對資料庫產生的操作才會被永久的儲存)

commit

;-- 提交

-- 4.轉賬失敗(比如第一條sql語句錯誤),回滾事務(撤銷已經成功執行的sql語句,回到開啟事務之前的狀態)

rollback;-- 回滾

2.自動提交:

每一條dml語句都是乙個單獨的事務,每條語句都會自動開啟乙個事務,執行完畢自動提交事務。

mysql預設是自動提交。即執行一條dml語句提交一次事務。

關閉自動提交的方式:

-- 檢視當前的autocommit模式

show variables like

'%commit%'

;-- 把自動提交關掉

set autocommit =0;

-- 0代表off

補充:

1.把自動提交關掉只是臨時的,下次啟動預設為自動提交。

2.如果先開啟乙個事務,在執行多個dml語句,代表這些語句在同乙個事務中,而且必須手動提交事務。

不設定回滾點

設定回滾點

為什麼要設定回滾點?

如果不設定回滾點,就會回滾到事務開始前,實際專案中,如果想回到中間某一位置,就需要在該處設定回滾點。

資料庫的事務必須具備acid特性,acid是指 atomicity(原子性)、consistensy(一致性)、isolation(隔離性)和durability(永續性)的英文縮寫。

原子性(atomicity)

原子性是指乙個事務中的一組sql不可分割。要麼都發生,要麼都不發生。
一致性(consistency)
如果事務成功的提交,那麼資料庫的所有變化將生效。

如果事務執行出現錯誤,那麼資料庫的所有變化將會被回滾(撤銷),返回到原始狀態。

一致性依賴於原子性,以及業務邏輯。

隔離性(isolation)
多個使用者併發的訪問資料庫時,乙個使用者的事務不能被其他使用者的事務干擾,多個併發的事務之間要相互隔離。

多事務間隔離性越強,併發越低,效率也就越低。

永續性(durability)
指乙個事務一旦被提交,它對資料庫的改變將是永久性的,哪怕資料庫發生異常,重啟之後資料亦然存在。
乙個事務讀取了另乙個事務未提交的資料叫做髒讀。(前提是沒有設定隔離性)

髒讀後果很嚴重,杜絕發生!!!

解決辦法:

1.設定全域性隔離級別為read

committed

setglobal

transaction

isolation

level

read

committed

;2.引入寫加鎖

例如:事務1引入寫加鎖後,事務1修改資料時,事務2形成阻塞,直到事務1提交後事務2才能讀取,降低了併發性。

在乙個事務內多次讀取表中的資料,多次讀取的結果不同。(強調資料內容不一致)

因為中間會有其他事務對資料進行操作,所以多次讀取的結果不一致。

解決辦法:引入讀加鎖

髒讀和不可重複讀的區別?

髒讀是讀取前一事務未提交的資料,不可重複讀是讀取前一事務已經提交的資料。

同乙個事務內,2次讀取的資料的數量不一致,叫做幻讀或者虛讀。(強調資料數量不一致)

資料庫事務四大特性

事務的 原子性 一致性 分離性 永續性 1 原子性 事務的原子性指的是,事務中包含的程式作為資料庫的邏輯工作單位,它所做的對資料修改操作要麼全部執行,要麼完全不執行。這種特性稱為原子性。事務的原子性要求,如果把乙個事務可看作是乙個程式,它要麼完整的被執行,要麼完全不執行。就是說事務的操縱序列或者完全...

資料庫事務四大特性

資料庫事務是指作為單個邏輯工作單元執行的一系列操作,這些操作要麼全做要麼全不做,是乙個不可分割的工作單位。資料庫事務的四大特性 簡稱acid 是 事務的原子性指的是,事務中包含的程式作為資料庫的邏輯工作單位,它所做的對資料修改操作要麼全部執行,要麼完全不執行。這種特性稱為原子性。例如銀行取款事務分為...

資料庫事務四大特性

事務的 原子性 一致性 分離性 永續性 1 原子性 事務的原子性指的是,事務中包含的程式作為資料庫的邏輯工作單位,它所做的對資料修改操作要麼全部執行,要麼完全不執行。這種特性稱為原子性。事務的原子性要求,如果把乙個事務可看作是乙個程式,它要麼完整的被執行,要麼完全不執行。就是說事務的操縱序列或者完全...