亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

通過(guò)這一篇文章讓你徹底了解事務(wù),文章當(dāng)中提供了很多真實(shí)示例,供大家參考學(xué)習(xí)!

目錄

一、什么是事務(wù)?

事務(wù) 是一組操作的集合,它是一個(gè)不可分割的工作單位,事務(wù)會(huì)把所有的操作 作為一個(gè)整體一起向系統(tǒng)提交 或 撤銷操作請(qǐng)求,即這些操作要么同時(shí)成功,要么同時(shí)失敗。

在關(guān)系數(shù)據(jù)庫(kù)中,一個(gè)事務(wù)可以是一條SQL語(yǔ)句,或者一組SQL語(yǔ)句;

在JAVA當(dāng)中,一個(gè)事務(wù)可以是一個(gè)接口,也可以是service層當(dāng)中的一個(gè)方法;

舉例:張三給李四轉(zhuǎn)賬1000塊錢,張三銀行賬戶的錢減少1000,而李四銀行賬戶的錢要增加1000。 這一組操作就必須在一個(gè)事務(wù)的范圍內(nèi),要么都成功,要么都失敗。

 

正常情況:轉(zhuǎn)賬這個(gè)操作, 需要分為以下這么三步來(lái)完成

 

異常情況:轉(zhuǎn)賬這個(gè)操作, 也是分為以下這么三步來(lái)完成 , 在執(zhí)行第三步是報(bào)錯(cuò)了, 這樣就導(dǎo)致張三減少1000塊錢, 而李四的金額沒(méi)變, 這樣就造成了數(shù)據(jù)的不一致, 就出現(xiàn)問(wèn)題了。

 

為了解決上述的問(wèn)題,就需要通過(guò)數(shù)據(jù)的事務(wù)來(lái)完成,我們只需要 在業(yè)務(wù)邏輯執(zhí)行之前開(kāi)啟事務(wù),執(zhí)行完畢后提交事務(wù)。如果執(zhí)行過(guò)程中報(bào)錯(cuò),則回滾事務(wù),把數(shù)據(jù)恢復(fù)到事務(wù)開(kāi)始之前的狀態(tài) 。

 

注意: 默認(rèn)MySQL的事務(wù)是自動(dòng)提交的,也就是說(shuō),當(dāng)執(zhí)行完一條DML語(yǔ)句時(shí),MySQL會(huì)立即隱式的提交事務(wù)。

二、事務(wù)操作

光說(shuō)不練肯定不行,下面我們通過(guò)sql來(lái)演示以上場(chǎng)景,首先演示沒(méi)有事務(wù)的情況,然后再演示通過(guò)事務(wù)來(lái)控制的情況。事務(wù)控制mysql當(dāng)中有兩種方式,我們分別進(jìn)行演示。

數(shù)據(jù)準(zhǔn)備:

DROP TABLE IF EXISTS account;

CREATE TABLE account ( 
	id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID', 
	NAME VARCHAR ( 10 ) COMMENT '姓名', 
	money DOUBLE ( 10, 2 ) COMMENT '余額' 
) COMMENT '賬戶表';

INSERT INTO account ( NAME, money ) VALUES ( '張三', 2000 ),( '李四', 2000 );

1、沒(méi)有事務(wù)會(huì)出現(xiàn)什么場(chǎng)景?

(1) 測(cè)試正常情況

-- 1. 查詢張三余額 
select * from account where name = '張三'; 
-- 2. 張三的余額減少1000 
update account set money = money - 1000 where name = '張三'; 
-- 3. 李四的余額增加1000 
update account set money = money + 1000 where name = '李四';

 

(2) 測(cè)試異常情況

UPDATE account set money = 2000;
-- 1. 查詢張三余額 
select * from account where name = '張三'; 
-- 2. 張三的余額減少1000 
update account set money = money - 1000 where name = '張三'; 
出錯(cuò)了.... (這里是故意整的不加注釋,來(lái)模仿執(zhí)行當(dāng)前事務(wù)執(zhí)行到中間報(bào)錯(cuò)了)
-- 3. 李四的余額增加1000 
update account set money = money + 1000 where name = '李四';

我們把數(shù)據(jù)都恢復(fù)到2000, 然后再次一次性執(zhí)行上述的SQL語(yǔ)句(出錯(cuò)了… 這句話不符合SQL語(yǔ) 法,執(zhí)行就會(huì)報(bào)錯(cuò)),檢查最終的數(shù)據(jù)情況, 發(fā)現(xiàn)數(shù)據(jù)在操作前后不一致了。

 

2、控制事務(wù)方式一(手動(dòng)提交)

mysql當(dāng)中的事務(wù)默認(rèn)是自動(dòng)提交,什么是自動(dòng)提交?

所謂自動(dòng)提交就是每執(zhí)行一條sql就進(jìn)行提交一次。而實(shí)際我們?cè)陂_(kāi)發(fā)當(dāng)中,往往會(huì)出現(xiàn)上面類似業(yè)務(wù),多條sql同時(shí)執(zhí)行,還要保證要么都成功要么都失敗。而在java當(dāng)中我們并沒(méi)有看到過(guò)什么commit提交事務(wù),什么rollback回滾事務(wù)的相關(guān)sql,這是因?yàn)槲覀兪褂玫某志脤涌蚣芏歼M(jìn)行了封裝,例如MyBatis默認(rèn)就是手動(dòng)提交事務(wù)。而他的commit和rollback全權(quán)由框架來(lái)管控。

什么是手動(dòng)提交事務(wù)?

只要不執(zhí)行commit,那么mysql會(huì)認(rèn)為你所執(zhí)行的sql都是在一個(gè)事務(wù)當(dāng)中,當(dāng)commit的時(shí)候,假如成功了就都成功了,一旦執(zhí)行的sql有異常,就全部回滾!

SELECT @@autocommit ;
SET @@autocommit = 0 ;
COMMIT;
ROLLBACK;

注意:

  • 上述的這種方式,我們是修改了事務(wù)的自動(dòng)提交行為, 把默認(rèn)的自動(dòng)提交修改為了手動(dòng)提交, 此時(shí)我們執(zhí)行的DML語(yǔ)句都不會(huì)提交,需要手動(dòng)的執(zhí)行commit進(jìn)行提交。
  • SET @@autocommit = 0 ; 設(shè)置手動(dòng)提交 是臨時(shí)生效(只對(duì)當(dāng)前會(huì)話有效),一旦會(huì)話關(guān)閉就沒(méi)了。想要設(shè)置永久手動(dòng)提交可以通過(guò)mysql的配置文件當(dāng)中添加 autocommit=0 然后重啟即可。

什么是會(huì)話?

會(huì)話并不是指的客戶端連接,一個(gè)客戶端連接可以創(chuàng)建多個(gè)會(huì)話,navicate應(yīng)該都用過(guò),通過(guò)下圖應(yīng)該會(huì)一目了然!下面兩個(gè)查詢界面就是兩個(gè)會(huì)話!

 

sql測(cè)試:

提交事務(wù)之后會(huì)發(fā)現(xiàn)數(shù)據(jù)根本沒(méi)修改成功,原因就是執(zhí)行過(guò)程遇到了報(bào)錯(cuò),然后自動(dòng)會(huì)進(jìn)行回滾!

-- 先改為手動(dòng)提交
SET @@autocommit = 0 ;

-- 1. 查詢張三余額 
select * from account where name = '張三'; 
-- 2. 張三的余額減少1000 
update account set money = money - 1000 where name = '張三'; 
出錯(cuò)了.... (這里是故意整的不加注釋,來(lái)模仿執(zhí)行當(dāng)前事務(wù)執(zhí)行到中間報(bào)錯(cuò)了)
-- 3. 李四的余額增加1000 
update account set money = money + 1000 where name = '李四';
-- 4. 提交事務(wù) 
COMMIT;

3、控制事務(wù)方式二(通過(guò)命令開(kāi)啟事務(wù))

除了上面所說(shuō)的改為手動(dòng)提交,還有一種就是通過(guò)sql來(lái)指定我要?jiǎng)?chuàng)建一個(gè)事務(wù),commit的時(shí)候就是事務(wù)結(jié)束當(dāng)前事務(wù)的時(shí)候。

  • 開(kāi)啟事務(wù): START TRANSACTION 或 BEGIN ;
  • 提交事務(wù): COMMIT;
  • 回滾事務(wù): ROLLBACK;

sql測(cè)試:

-- 開(kāi)啟事務(wù) 
start transaction 
-- 1. 查詢張三余額 
select * from account where name = '張三'; 

-- 2. 張三的余額減少1000 
update account set money = money - 1000 where name = '張三'; 

-- 3. 李四的余額增加1000 
update account set money = money + 1000 where name = '李四'; 

-- 如果正常執(zhí)行完畢, 則提交事務(wù) 
commit; 

-- 如果執(zhí)行過(guò)程中報(bào)錯(cuò), 則回滾事務(wù)(commit失敗的時(shí)候會(huì)自動(dòng)執(zhí)行回滾,不需要我們管) 
-- rollback;

三、事務(wù)四大特性

事務(wù)應(yīng)該具有4個(gè)屬性:原子性、一致性、隔離性、持久性。這四個(gè)屬性通常稱為 ACID特性 。

  • 原子性(atomicity) 。一個(gè)事務(wù)是一個(gè)不可分割的工作單位,事務(wù)中包括的操作 要么都做,要么都不做 。
  • 一致性(consistency) 。事務(wù)必須是使 數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài) 。一致性與原子性是密切相關(guān)的。
  • 隔離性(isolation) 。一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)干擾。即一個(gè)事務(wù)內(nèi)部的操作和使用的數(shù)據(jù)對(duì)并發(fā)的其他事務(wù)是隔離的, 并發(fā)執(zhí)行的各個(gè)事務(wù)之間不能互相干擾 。
  • 持久性(durability) 。持久性也稱永久性(permanence),指一個(gè)事務(wù)一旦提交,它 對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變就應(yīng)該是永久性的 。接下來(lái)的其他操作或故障不應(yīng)該對(duì)其有任何影響。

假設(shè)我現(xiàn)在去ATM機(jī)轉(zhuǎn)賬,將我的建設(shè)銀行卡的1000塊錢轉(zhuǎn)到中國(guó)銀行的卡里去。程序可能是這樣執(zhí)行的:

第一步:從建設(shè)銀行卡的余額里扣除1000;

第二步:然后再?gòu)闹袊?guó)銀行的卡的余額里增加1000。

假如在第一步執(zhí)行完之后服務(wù)器宕機(jī)了,那么顯然第二步將無(wú)法完成,我的建設(shè)銀行卡被扣了1000,但中國(guó)銀行的卡卻沒(méi)增加,我將白白損失了1000塊錢。在數(shù)據(jù)庫(kù)中,這就是所謂的“不一致性狀態(tài)”。

那么如何實(shí)現(xiàn)“一致性”呢?

事實(shí)上,ACID中的AID都是為了實(shí)現(xiàn)C的。事務(wù)的最終目的就是為了實(shí)現(xiàn)“ 一致性 ”。如果轉(zhuǎn)賬的操作具有原子性,那么在中途出現(xiàn)錯(cuò)誤的時(shí)候發(fā)生回滾,就不會(huì)出現(xiàn)不一致的情況,可見(jiàn),“原子性”和“一致性”是緊密聯(lián)系在一起的!

四、事務(wù)的隔離性

這里再重點(diǎn)提一下ACID當(dāng)中的 隔離性(isolation) 。

隔離性是針對(duì)數(shù)據(jù)資源的并發(fā)訪問(wèn),規(guī)定了 各個(gè)事務(wù)之間相互影響的程度 。

舉例:為了疫情防控,各個(gè)城市針對(duì)于每個(gè)人的出行情況,出了對(duì)應(yīng)的隔離級(jí)別,例如低風(fēng)險(xiǎn)的回老家就是3天兩檢,中風(fēng)險(xiǎn)的就是隔離14天,特別嚴(yán)重的就是集中隔離21天,等等。。。

隔離級(jí)別就是為了防止出現(xiàn)問(wèn)題,而定的規(guī)則!

而事務(wù)的隔離性也分為了4種類型的隔離級(jí)別,這些隔離級(jí)別專門用于應(yīng)對(duì) 數(shù)據(jù)資源并發(fā)訪問(wèn) 下不同問(wèn)題的場(chǎng)景。(就好比上面的例子,每個(gè)隔離級(jí)別都是對(duì)應(yīng)一個(gè)場(chǎng)景,三天兩檢就是對(duì)應(yīng)的低風(fēng)險(xiǎn))。

1、并發(fā)事務(wù)下會(huì)產(chǎn)生什么問(wèn)題?

什么是并發(fā)事務(wù)?

并發(fā)事務(wù)就是多個(gè)客戶端同時(shí)開(kāi)啟事務(wù),或者是多個(gè)會(huì)話同時(shí)開(kāi)啟事務(wù)!Java當(dāng)中一個(gè)接口就是一個(gè)事務(wù),也可以稱之為一次會(huì)話,接口當(dāng)中包含了很多sql,當(dāng)并發(fā)訪問(wèn)接口的時(shí)候會(huì)出現(xiàn)什么問(wèn)題,也被稱為并發(fā)事務(wù)問(wèn)題。當(dāng)然本篇主要以數(shù)據(jù)庫(kù)并發(fā)事務(wù)產(chǎn)生的問(wèn)題為主!

隔離級(jí)別專門用于應(yīng)對(duì) 數(shù)據(jù)資源并發(fā)訪問(wèn) 下不同問(wèn)題的場(chǎng)景,那么究竟有哪些問(wèn)題呢?有三個(gè):臟讀、不可重復(fù)讀、幻讀

  • 臟讀: 讀到了還沒(méi)有提交事務(wù)的數(shù)據(jù),簡(jiǎn)稱讀未提交

舉例:如果一個(gè)事務(wù)B對(duì)數(shù)據(jù)進(jìn)行了更改,但是還沒(méi)有提交,而另一個(gè)事務(wù)A就可以讀到事務(wù)B尚未提交的更新結(jié)果。這樣,當(dāng)事務(wù)B進(jìn)行回滾時(shí),那么事務(wù)A開(kāi)始讀到的數(shù)據(jù)就是一筆臟數(shù)據(jù)。

 

  • 不可重復(fù)讀: 同一個(gè)事務(wù)在事務(wù)過(guò)程中,對(duì)同一個(gè)數(shù)據(jù)進(jìn)行讀取操作,讀取到的結(jié)果不同。

舉例:事務(wù) A 多次讀取同一數(shù)據(jù),但事務(wù) B 在事務(wù)A多次讀取的過(guò)程中,對(duì)數(shù)據(jù)作了更新并提交,導(dǎo)致事務(wù)A多次讀取同一數(shù)據(jù)時(shí),結(jié)果 不一致。

 

  • 幻讀: 一個(gè)事務(wù)按照條件查詢數(shù)據(jù)時(shí),沒(méi)有對(duì)應(yīng)的數(shù)據(jù)行,但是在插入數(shù)據(jù)時(shí),又發(fā)現(xiàn)這行數(shù)據(jù)已經(jīng)存在,好像出現(xiàn)了 “幻影”。

 

不可重復(fù)讀側(cè)重表達(dá) 讀-讀,幻讀則是說(shuō) 讀-寫,用寫來(lái)證實(shí)讀的是鬼影。

如何避免:

  • 要避免臟讀,需要控制在事務(wù)沒(méi)有提交更新前,其他事務(wù)無(wú)法看到此事務(wù)的更新結(jié)果。
  • 要避免不可重復(fù)讀,假如查詢單條數(shù)據(jù),可以通過(guò)行鎖,范圍查詢可以進(jìn)行表鎖。
  • 要避免幻讀,需要將整張表都鎖住了。

2、事務(wù)的隔離級(jí)別

上述所說(shuō)的"臟讀",“不可重復(fù)讀”,"幻讀"這些問(wèn)題,其實(shí)就是數(shù)據(jù)庫(kù)讀一致性問(wèn)題,必須由數(shù)據(jù)庫(kù)提供的事務(wù)隔離機(jī)制來(lái)進(jìn)行解決。

 

  • 讀未提交(Read Uncommitted): 最低的隔離級(jí)別。一個(gè)事務(wù)可以讀取另一個(gè)事務(wù)沒(méi)有提交的更新結(jié)果。它是性能最好,也可以說(shuō)它是最野蠻的方式,因?yàn)樗鼔焊鶅壕筒患渔i,所以根本談不上什么隔離效果,可以理解為沒(méi)有隔離。
  • 讀已提交(Read Committed): 一個(gè)事務(wù)的更新操作只有在提交了之后,才會(huì)被另一個(gè)事務(wù)讀取到同一筆數(shù)據(jù)更新后的結(jié)果。
  • 可重復(fù)讀(Repeatable Read): 在整個(gè)事務(wù)中,對(duì)同一筆數(shù)據(jù)的讀取結(jié)果是相同的,不管其他事務(wù)是否同時(shí)在對(duì)這筆數(shù)據(jù)進(jìn)行更新,也不管這筆更新是否提交。
  • 串行化(SERIALIZABLE): 串行化就相當(dāng)于處理一個(gè)人請(qǐng)求的時(shí)候,別的人都等著。讀的時(shí)候加共享鎖,也就是其他事務(wù)可以并發(fā)讀,但是不能寫。寫的時(shí)候加排它鎖,其他事務(wù)不能并發(fā)寫也不能并發(fā)讀。

注意:

  • MySQL默認(rèn)事務(wù)隔離級(jí)別為可重復(fù)讀(RR),oracle默認(rèn)事務(wù)隔離級(jí)別為讀已提交(RC)。
  • MySQL存在幻讀,而oracle存在不可重復(fù)讀和幻讀的情況!
  • 數(shù)據(jù)庫(kù)的事務(wù)隔離越嚴(yán)格,并發(fā)副作用越小,但付出的代價(jià)越大;

命令:

show variables like 't%_isolation';
select @@session.transaction_isolation;
select @@global.transaction_isolation;

注意:早期版本的mysql中用的變量名稱是tx_isolation,5.7.20版本之后,用的是transaction_isolation。

事務(wù)隔離級(jí)別分為會(huì)話和全局,會(huì)話在上面有提到過(guò),一個(gè)客戶端可以有多個(gè)會(huì)話。會(huì)話一旦關(guān)閉,設(shè)置的就失效了。可以通過(guò)以下命令針對(duì)兩種進(jìn)行修改, SESSION就是會(huì)話級(jí)別的 , GLOBAL全局的

SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }

如下示例,修改會(huì)話事務(wù)隔離級(jí)別為 READ UNCOMMITTED:

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

(1)首先演示第一種:讀未提交(Read Uncommitted)

首先讀未提交會(huì)出現(xiàn)臟讀,那么我們就進(jìn)行通過(guò)讀未提交來(lái)演示臟讀!

我們就還是以這兩條數(shù)據(jù)進(jìn)行演示,其次我們要進(jìn)行演示并發(fā)場(chǎng)景,就需要兩個(gè)客戶端,那么我們直接通過(guò)cmd打開(kāi)兩個(gè)窗口 來(lái)進(jìn)行連接mysql演示并發(fā)場(chǎng)景。

打開(kāi)cmd通過(guò)命令進(jìn)行連接: mysql -hlocalhost -u賬號(hào) -p密碼

 

我的客戶端查出來(lái)的數(shù)據(jù)是亂碼的,應(yīng)該是數(shù)據(jù)庫(kù)編碼有問(wèn)題,但是這不影響我們演示

以下示例就是典型的臟讀,也就是讀取到了他沒(méi)有提交的數(shù)據(jù),沒(méi)有提交就意味著數(shù)據(jù)并沒(méi)有存到磁盤,他很有可能會(huì)進(jìn)行回滾,一旦回滾,而別的客戶端讀到了他沒(méi)提交的數(shù)據(jù),而且還依賴這些臟數(shù)據(jù)做了別的操作,那將后果不堪設(shè)想!

 

(2)第二種:讀已提交(Read Committed)

讀已提交可以避免臟讀,這我們就不再測(cè)試了,想測(cè)試的可以按照上面的測(cè)試方法進(jìn)行測(cè)試,看看是否會(huì)有以上問(wèn)題!

讀已提交存在不可重復(fù)讀和幻讀的問(wèn)題,同時(shí)也是oracle默認(rèn)的隔離級(jí)別,我們重點(diǎn)演示不可重復(fù)讀!

 

其實(shí)仔細(xì)想想不可重復(fù)讀其實(shí)并不是很嚴(yán)重,他無(wú)非是在一個(gè)事務(wù)當(dāng)中多次讀取可能值不一樣,但是他讀出來(lái)的都是提交過(guò)后的,也就意味著永遠(yuǎn)是最新的數(shù)據(jù),有時(shí)候未必是一件壞事!!!

(3)第三種:可重復(fù)讀(Repeatable Read)

可重復(fù)讀可以避免臟讀和不可重復(fù)讀情況,但是沒(méi)辦法避免幻讀,所以本次重點(diǎn)演示幻讀!

在測(cè)試這個(gè)的時(shí)候我們需要將id自增給關(guān)掉,自增的情況下不會(huì)出現(xiàn)這種情況!

新增的時(shí)候發(fā)現(xiàn)報(bào)錯(cuò),原因就是id為主鍵唯一,但是不是新增,在新增的時(shí)候?qū)嶋H上數(shù)據(jù)庫(kù)已經(jīng)存在了id為3的數(shù)據(jù),導(dǎo)致新增失敗,而他在這個(gè)事務(wù)當(dāng)中不管怎么去查,也查不到id為3的數(shù)據(jù),這就是幻覺(jué)!!!

 

說(shuō)白了不可重復(fù)讀就是在當(dāng)前事務(wù)當(dāng)中,不管別的客戶端操作沒(méi)操作過(guò)數(shù)據(jù),他查到的都是他開(kāi)啟事務(wù)之前的數(shù)據(jù)。所以他根本不可能存在臟讀,也不可能存在不可重復(fù)讀。

(4)第四種:串行化(Serilizable)

讀的時(shí)候加共享鎖,也就是其他事務(wù)可以并發(fā)讀,但是不能寫。寫的時(shí)候加排它鎖,其他事務(wù)不能并發(fā)寫也不能并發(fā)讀。

 

五、本章總結(jié)

本篇文章要求掌握的:

  1. mysql當(dāng)中事務(wù)默認(rèn)是自動(dòng)提交,可以改為手動(dòng)提交
  2. 在一次事務(wù)當(dāng)中,假如出現(xiàn)異常,事務(wù)會(huì)自動(dòng)進(jìn)行回滾
  3. 通過(guò)以上示例,如果還不知道事務(wù)是干什么的,建議多讀幾次,事務(wù)知識(shí)點(diǎn)太重要了,特別是學(xué)習(xí)后端的兄弟們!
  4. 數(shù)據(jù)庫(kù)當(dāng)中,并發(fā)事務(wù)會(huì)引發(fā)什么問(wèn)題?幻讀、不可重復(fù)讀、臟讀
  5. 隔離級(jí)別就是為了解決 并發(fā)事務(wù)可能會(huì)引發(fā)的問(wèn)題 而誕生的,其中分為了四種級(jí)別,我們可以根據(jù)自己系統(tǒng)的情況進(jìn)行自由選擇,事務(wù)隔離越嚴(yán)格,并發(fā)副作用越小,但付出的代價(jià)越大。正常開(kāi)發(fā)當(dāng)中一般都會(huì)采用默認(rèn)的。
    四種分別是:讀未提交、讀已提交、不可重復(fù)讀、串行化。
  6. 并發(fā)事務(wù)會(huì)引發(fā)什么問(wèn)題,還有隔離級(jí)別 這兩個(gè)都是面試經(jīng)常會(huì)問(wèn)的!!!

原文鏈接:
https://blog.csdn.NET/weixin_43888891/article/details/126024380?utm_source=tuicool&utm_medium=referral

分享到:
標(biāo)簽:Mysql
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定