a) Remove column from table 't1' - DML operations can proceed while DDL is in progress i.e. ALTER TABLE .. DROP column..
mysql >show processlist;
+-----+------+-----------+------+---------+------+----------------+----------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+------+-----------+------+---------+------+----------------+----------------------------------+
| 67 | root | localhost | test | Query | 0 | init | show processlist |
| 604 | root | localhost | test | Query | 3 | altering table | alter table t1 drop column data2 |
+-----+------+-----------+------+---------+------+----------------+----------------------------------+
2 rows in set (0.00 sec)
mysql >insert into t1 values (null,'xxxx','yyyy');
Query OK, 1 row affected (0.00 sec)
mysql >select * from t1 where id=2;
+----+----------------------------------------------------+-------+
| id | data | data2 |
+----+----------------------------------------------------+-------+
| 2 | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | a |
+----+----------------------------------------------------+-------+
1 row in set (0.00 sec)
b) Add new column table 't1' - DML operations can proceed as long as they do not access the new column that is being added to the table:
mysql>show processlist;
+-----+------+-----------+------+---------+------+----------------+---------------------------------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+------+-----------+------+---------+------+----------------+---------------------------------------------------------+
| 67 | root | localhost | test | Query | 0 | init | show processlist |
| 604 | root | localhost | test | Query | 38 | altering table | alter table t1 add column data2 varchar(20) default 'a' |
+-----+------+-----------+------+---------+------+----------------+---------------------------------------------------------+
2 rows in set (0.00 sec)
mysql>insert into test.t1 values (null,'xxxx');
Query OK, 1 row affected (0.02 sec)
mysql>insert into test.t1 values (null,'xxxx','yyyy');
ERROR 1136 (21S01): Column count doesn't match value count at row 1
wonderful information, I had come to know about your blog from my friend nandu , hyderabad,i have read atleast 7 posts of yours by now, and let me tell you, your website gives the best and the most interesting information. This is just the kind of information that i had been looking for, i'm already your rss reader now and i would regularly watch out for the new posts, once again hats off to you! Thanks a ton once again, Regards, MySql online trainingamong the MySql in Hyderabad. Classroom Training in Hyderabad India
ReplyDeleteThanks
ReplyDelete