掃描二維碼關注

首頁 APP開(kāi)發小(xiǎo)程序開(kāi)發 微信公衆号 網站建設 營銷推廣 經典案列 産品服務 關于我們

“學習(xí)不僅是掌握知識”

向書(shū)本學習(xí),還要向實踐學習(xí)、向生活學習(xí)。消化已有(yǒu)知識,
而且要力求有(yǒu)所發現、有(yǒu)所發明(míng)、有(yǒu)所創造

MySQL之表結構修改

2019/4/7 11:21:33

MySQL之表結構修改

mysql數據庫裏,對一個(gè)已創建的(de)表進行(xíng)DDL操作,比如(rú)說添加一個(gè)字段。在做測試時,發現ddl操作的(de)時間特别的(de)長。oracle裏,通常情況下隻是修改數據字典就可(kě)以了,操作時間非常的(de)短,阻塞DML的(de)時間也(yě)比較短。mysql數據庫對表進行(xíng)ddl操作跟oracle數據庫有(yǒu)很大(dà)的(de)不同,它先要把原表拷貝一份到(dào)臨時表,這期間不阻塞select,阻塞所有(yǒu)的(de)更改操作(update,delete,insert),對臨時表ddl操作完成,删除原表,重命名臨時表。

  如(rú)果一張比較大(dà)的(de)表進行(xíng)ddl變更,比如(rú)說40G,那拷貝的(de)時間讓人(rén)無法忍受,并且阻塞所有(yǒu)的(de)DML操作,讓業(yè)務無法繼續。

  以下是測試過程:

mysql> desc t1;
+--------------+-------------+------+-----+---------+-------+
| Field    | Type    | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| id     | int(11)  | YES | MUL | NULL  |   |
| nick    | varchar(32) | YES |  | NULL  |   |
| email    | varchar(32) | YES |  | NULL  |   |
| gmt_create | datetime  | YES |  | NULL  |   |
| gmt_modified | datetime  | YES |  | NULL  |   |
+--------------+-------------+------+-----+---------+-------+
mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
| 2228017 |
+----------+
1 row in set (1.78 sec)

  現在對它進行(xíng)表結構變更,增加一列:

  mysql>altertablet1add(telvarchar(20));
  QueryOK,2304923rowsaffected(41.03sec)
  Records:2304923Duplicates:0Warnings:0

  在上(shàng)述表結構變更過程中,啓動另外一個(gè)會(huì)話(huà),進行(xíng)select查詢操作和(hé)一個(gè)更新操作:

mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
| 2304923 |
+----------+
1 row in set (2.10 sec)
  mysql> select * from t1 limit 10;
+------+-------+------------------+---------------------+---------------------+
| id  | nick | email      | gmt_create     | gmt_modified    |
+------+-------+------------------+---------------------+---------------------+
|  0 | nick0 | nick0@taobao.com | 2008-03-14 00:00:00 | 2008-03-14 00:00:00 |
|  1 | nick1 | nick1@taobao.com | 2008-03-14 00:00:00 | 2008-03-14 00:00:00 |
|  2 | nick2 | nick2@taobao.com | 2008-03-14 00:00:00 | 2008-03-14 00:00:00 |
|  3 | nick3 | nick3@taobao.com | 2008-03-14 00:00:00 | 2008-03-14 00:00:00 |
|  4 | nick4 | nick4@taobao.com | 2008-03-14 00:00:00 | 2008-03-14 00:00:00 |
|  5 | nick5 | nick5@taobao.com | 2008-03-14 00:00:00 | 2008-03-14 00:00:00 |
|  6 | nick6 | nick6@taobao.com | 2008-03-14 00:00:00 | 2008-03-14 00:00:00 |
|  7 | nick7 | nick7@taobao.com | 2008-03-14 00:00:00 | 2008-03-14 00:00:00 |
|  8 | nick8 | nick8@taobao.com | 2008-03-14 00:00:00 | 2008-03-14 00:00:00 |
|  9 | nick9 | nick9@taobao.com | 2008-03-14 00:00:00 | 2008-03-14 00:00:00 |
+------+-------+------------------+---------------------+---------------------+
10 rows in set (0.00 sec)
  mysql> update t1 set nick='test_nick' where id=1;
Query OK, 4 rows affected (43.89 sec)     --這裏是阻塞的(de)時間
Rows matched: 4 Changed: 4 Warnings: 0

  通過以上(shàng)實驗可(kě)以看出,對表進行(xíng)ddl操作時,mysql并不阻塞select查詢,但(dàn)會(huì)嚴重阻塞dml操作。另外,如(rú)果你(nǐ)要對表進行(xíng)ddl操作,由于有(yǒu)一個(gè)拷貝操作,你(nǐ)要計(jì)算好你(nǐ)的(de)可(kě)用(yòng)空間夠不夠?如(rú)果你(nǐ)的(de)系統經常要進行(xíng)表結構變更,那麽你(nǐ)将不得不要考慮此問題!

 


深圳市南山區南山街(jiē)道南海(hǎi)大(dà)道西(xī)桂廟路(lù)北陽光(guāng)華藝大(dà)廈1棟4F、4G-04

咨詢電話(huà):136 8237 6272
大(dà)客戶咨詢:139 0290 5075
業(yè)務QQ:195006118
技術(shù)QQ:179981967

更多可(kě)以了解的(de)信息

客戶案列
新聞資訊
資質榮譽
團隊風采
項目進度查詢

售前QQ咨詢
QQ溝通 項目QQ溝通

精銳軟件(jiàn)

Copyright© 2018-2023 深圳市無窮大軟件技術有限公司 All Rights Reserved. 京ICP證000000号 公安備案号:粵公網安備44030502009460号