MySQL之表结构修改

夏尔么么哒

夏尔么么哒

2016-02-19 19:48

在这个颜值当道,屌丝闪边的时代,拼不过颜值拼内涵,只有知识丰富才能提升一个人的内在气质和修养,所谓人丑就要多学习,今天图老师给大家分享MySQL之表结构修改,希望可以对大家能有小小的帮助。

  mysql数据库里,对一个已创建的表进行DDL操作,比如说添加一个字段。在做测试时,发现ddl操作的时间特别的长。oracle里,通常情况下只是修改数据字典就可以了,操作时间非常的短,阻塞DML的时间也比较短。mysql数据库对表进行ddl操作跟oracle数据库有很大的不同,它先要把原表拷贝一份到临时表,这期间不阻塞select,阻塞所有的更改操作(update,delete,insert),对临时表ddl操作完成,删除原表,重命名临时表。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  如果一张比较大的表进行ddl变更,比如说40G,那拷贝的时间让人无法忍受,并且阻塞所有的DML操作,让业务无法继续。

  以下是测试过程:

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)

  现在对它进行表结构变更,增加一列:

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

  在上述表结构变更过程中,启动另外一个会话,进行select查询操作和一个更新操作:

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)     --这里是阻塞的时间
Rows matched: 4 Changed: 4 Warnings: 0

  通过以上实验可以看出,对表进行ddl操作时,mysql并不阻塞select查询,但会严重阻塞dml操作。另外,如果你要对表进行ddl操作,由于有一个拷贝操作,你要计算好你的可用空间够不够?如果你的系统经常要进行表结构变更,那么你将不得不要考虑此问题!

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

MySQL之表结构修改

编程语言 网络编程
MySQL之表结构修改

修改Access表结构

编程语言 网络编程
修改Access表结构

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

如何修改Access表结构

编程语言 网络编程
如何修改Access表结构

如何快速创建MySQL相同结构的表

编程语言 网络编程
如何快速创建MySQL相同结构的表

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

帮你完全解答如何修改Access表结构问题

编程语言 网络编程
帮你完全解答如何修改Access表结构问题

MYSQL基础之连接MYSQL、修改密码、添加用户

编程语言 网络编程
MYSQL基础之连接MYSQL、修改密码、添加用户

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

是不是涐给迩旳爱太多,让迩觉得太沉重.

是不是涐给迩旳爱太多,让迩觉得太沉重.

Oracle SQLCODE/SQLERRM

Oracle SQLCODE/SQLERRM
下拉加载更多内容 ↓