-- 샘플 DATA 생성
mysql [localhost] {msandbox} (test) > create table tbl_alter (a int primary key auto_increment, b int, c varchar(40));
Query OK, 0 rows affected (0.06 sec)
mysql [localhost] {msandbox} (test) > insert into tbl_alter (b,c) select round(rand()*10)+1 , uuid() from information_schema.columns A1, information_schema.columns B2 limit 100000;
Query OK, 100000 rows affected (5.73 sec)
Records: 100000 Duplicates: 0 Warnings: 0
--^^ Sample Data 100000건을 넣는다.
mysql [localhost] {msandbox} (test) > alter table tbl_alter add column x int;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
--^^ 컬럼 추가의 경우, 순식간에 진행된다.
mysql [localhost] {msandbox} (test) > alter table tbl_alter add column y int after a;
Query OK, 0 rows affected (0.33 sec)
Records: 0 Duplicates: 0 Warnings: 0
--^^ 컬럼 추가시, after 혹은 before를 통해 중간에 column을 추가하려는 경우, 예전방식으로 동작된다. 시간이 0.33초로 늘어난것을 확인하자.
mysql [localhost] {msandbox} (test) > alter table tbl_alter add column z int after a, ALGORITHM=INSTANT;
ERROR 1845 (0A000): ALGORITHM=INSTANT is not supported for this operation. Try ALGORITHM=COPY/INPLACE.
--^^ 컬럼 추가시, after 혹은 before를 통해 중간에 column을 추가하면서 META DATA만 변경하는 INSTANT algorithm을 사용한다면, 에러가 발생한다.
mysql [localhost] {msandbox} (test) > alter table tbl_alter add column z int after a, ALGORITHM=INPLACE, LOCK=NONE;
Query OK, 0 rows affected (0.36 sec)
Records: 0 Duplicates: 0 Warnings: 0
--^^ ALGORITHM=INPLACE 방식으로는 정상적으로 추가됨을 확인한다.
mysql [localhost] {msandbox} (test) > ALTER TABLE tbl_alter ALTER COLUMN c SET DEFAULT 'defaultValue', ALGORITHM=INSTANT;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql [localhost] {msandbox} (test) > ALTER TABLE tbl_alter ALTER COLUMN c DROP DEFAULT, ALGORITHM=INSTANT;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
--^^ default 값을 추가하거나 삭제하는 작업은 ALGORITHM=INSTANT 로 metadata만을 수정하여 작업가능하다.
mysql 8.0 [localhost] {msandbox} (test) > ALTER TABLE tbl_alter RENAME COLUMN x to x2;
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
--^^ column 이름을 변경하는것도 빠른시간내에 meta만 변경하는 작업으로 진행된다.
mysql 8.0 [localhost] {msandbox} (test) > show create table tbl_alter\G
*************************** 1. row ***************************
Table: tbl_alter
Create Table: CREATE TABLE `tbl_alter` (
`a` int(11) NOT NULL AUTO_INCREMENT,
`z` int(11) DEFAULT NULL,
`y` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL,
`c` varchar(40),
`x2` int(11) DEFAULT NULL,
PRIMARY KEY (`a`)
) ENGINE=InnoDB AUTO_INCREMENT=131071 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)