• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • Mysql中的alter table操作原理

    發表于:2013-12-16來源:IT博客大學習作者:Incessant點擊數: 標簽:MySQL
    alter table運行時會對原表進行臨時復制,在副本上進行更改,然后刪除原表,再對新表進行重命名。在執行alter table時,其它用戶可以閱讀原表,但是對表的更新和修改的操作將被延遲,直到新表生成為止。

      alter table運行時會對原表進行臨時復制,在副本上進行更改,然后刪除原表,再對新表進行重命名。在執行alter table時,其它用戶可以閱讀原表,但是對表的更新和修改的操作將被延遲,直到新表生成為止。新表生成后,這些更新和修改信息會自動轉移到新表上。

      注意,如果您在執行alter table時使用除了rename以外的選項,則MySQL會創建一個臨時表。即使數據并不需要進行復制(例如當您更改列的名稱時),MySQL也會這么操作。對于Myisam表,您可以通過把myisam_sort_buffer_size系統變量設置到一個較高的值,來加快重新創建索引(該操作是變更過程中速度最慢的一部分)的速度。

      如果您使用alter table tbl_name rename to new_tbl_name并且沒有其它選項,則MySQL只對與table tbl_name相對應的文件進行重命名。不需要創建一個臨時表。

      也就是說我們在執行alter table操作時,會阻塞所有的dml操作,但可以進行select查詢,這個和oracle有很大的不同。

      mysql> select count(*) from test;

      +----------+

      | count(*) |

      +----------+

      | 2097152 |

      +----------+

      1 row in set (2.11 sec)

      mysql> alter table test add c varchar(100);

      Query OK, 2097152 rows affected (1 min 24.02 sec) --用了85s秒左右

      Records: 2097152 Duplicates: 0 Warnings: 0

      mysql> alter table test modify c int;

      Query OK, 2097152 rows affected (1 min 21.69 sec) --用了85s秒左右

      Records: 2097152 Duplicates: 0 Warnings: 0

      mysql> alter table test rename to test_new; --這個操作是直接文件名的,所以很快

      Query OK, 0 rows affected (0.03 sec)

    原文轉自:http://blogread.cn/it/article/72

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>