广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 软件教程 > 数据库 > 正文

Mysql中的alter table操作原理_mysql培训

作者:小甘发布时间:2020-12-24分类:数据库浏览:1293


导读:  altertable运行时会对原表进行临时复制,在副本上进行更改,然后删除原表,再对新表进行重命名。在执行altertable时,其它用户可以阅读原表,但是对表的更新和修改...

  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)


数据库排行
标签列表
网站分类
文章归档
最近发表