[MySQL] DDL(2) ALTER

Hunie_07ยท2์ผ ์ „

SQL

๋ชฉ๋ก ๋ณด๊ธฐ
4/8
post-thumbnail

๐Ÿ“Œ ALTER

- ํ…Œ์ด๋ธ” ์ˆ˜์ •

- ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์ •์˜ ๋ณ€๊ฒฝ

- ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ ์ถ”๊ฐ€, ํŠน์ • ์ปฌ๋Ÿผ์˜ ๊ธฐ๋ณธ๊ฐ’ ๋ณ€๊ฒฝ, ํŠน์ • ์ปฌ๋Ÿผ ์‚ญ์ œ ๋“ฑ

ALTER TALBE ํ…Œ์ด๋ธ”๋ช…

  • ADD : ์ปฌ๋Ÿผ ์ถ”๊ฐ€
  • RENAME COLUMN : ์ปฌ๋Ÿผ ์ด๋ฆ„ ๋ณ€๊ฒฝ
  • MODIFY : ์ปฌ๋Ÿผ ๋ฐ์ดํ„ฐ ํ˜•์‹ ๋ณ€๊ฒฝ
  • CHANGE : ์ปฌ๋Ÿผ ์ด๋ฆ„๊ณผ ๋ฐ์ดํ„ฐ ํ˜•์‹ ํ•จ๊ป˜ ๋ณ€๊ฒฝ
  • DROP COLUMN : ์ปฌ๋Ÿผ ์‚ญ์ œ
  • DROP : ์—ฌ๋Ÿฌ ๊ฐœ ์ปฌ๋Ÿผ ์‚ญ์ œ
  • DROP PRIMARY KEY : ๊ธฐ๋ณธํ‚ค ์‚ญ์ œ
  • DROP CONSTRAINT : ์ œ์•ฝ์กฐ๊ฑด ์‚ญ์ œ

์‚ฌ์šฉ ํ…Œ์ด๋ธ”

  • student / department ํ…Œ์ด๋ธ”
  • ์ƒ์„ธ์ฝ”๋“œ : DDL(1) CREATE

1๏ธโƒฃ Table ์ด๋ฆ„ ๋ณ€๊ฒฝ

  • ํ•œ ํ…Œ์ด๋ธ” ์ด๋ฆ„ ๋ณ€๊ฒฝ
    ALTER TABLE ๊ธฐ์กดํ…Œ์ด๋ธ”๋ช… RENAME ์ƒˆํ…Œ์ด๋ธ”๋ช…;
    ALTER TABLE RENAME TABLE ๊ธฐ์กดํ…Œ์ด๋ธ”๋ช… TO ์ƒˆํ…Œ์ด๋ธ”๋ช…;

  • ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ” ์ด๋ฆ„ ๋ณ€๊ฒฝ

ALTER TABLE RENAME TABLE ๊ธฐ์กดํ…Œ์ด๋ธ”๋ช…1 TO ์ƒˆํ…Œ์ด๋ธ”๋ช…1,
				         ๊ธฐ์กดํ…Œ์ด๋ธ”๋ช…2 TO ์ƒˆํ…Œ์ด๋ธ”๋ช…2,
				         ๊ธฐ์กดํ…Œ์ด๋ธ”๋ช…3 TO ์ƒˆํ…Œ์ด๋ธ”๋ช…3, 
                         ...;

2๏ธโƒฃ Column ์ถ”๊ฐ€

ALTER TABLE ํ…Œ์ด๋ธ”๋ช… ADD ์ปฌ๋Ÿผ์ด๋ฆ„;

ALTER TABLE student ADD stdTel VARCHAR(15);
ALTER TABLE student ADD(
	stdAge VARCHAR(2),
    stdAddress2 VARCHAR(50)
);

3๏ธโƒฃ ํ…Œ์ด๋ธ” ์ •๋ณด/๋ฐ์ดํ„ฐ ์กฐํšŒ

DESCRIBE ํ…Œ์ด๋ธ”๋ช…
DESC ํ…Œ์ด๋ธ”๋ช…

DESCRIBE student;
DESC student;

4๏ธโƒฃ Column ์†์„ฑ ๋ณ€๊ฒฝ

ALTER TABLE ํ…Œ์ด๋ธ”๋ช… MODIFY ์ปฌ๋Ÿผ๋ช… ๋ณ€๊ฒฝํ• ๋ฐ์ดํ„ฐํ˜•์‹;

ALTER TABLE student MODIFY stdName VARCHAR(20) NULL;
# ๊ธฐ์กด VARCHAR(30) NOT NULL ์—์„œ VARCHAR(20) NULL ๋กœ ๋ณ€๊ฒฝ

5๏ธโƒฃ Column ์ด๋ฆ„ ๋ณ€๊ฒฝ

ALTER TABLE ํ…Œ์ด๋ธ”๋ช… RENAME COLUMN ๋ณ€๊ฒฝ์ „์ด๋ฆ„ TO ๋ณ€๊ฒฝํ›„์ด๋ฆ„;

ALTER TABLE student RENAME COLUMN stdTel To stdHP;

6๏ธโƒฃ Column ์ด๋ฆ„ & ๋ฐ์ดํ„ฐ ํ˜•์‹ ๋ณ€๊ฒฝ

ALTER TABLE ํ…Œ์ด๋ธ”๋ช… CHANGE ์ปฌ๋Ÿผ๋ณ€๊ฒฝ์ „์ด๋ฆ„ ๋ณ€๊ฒฝํ›„์ด๋ฆ„ ๋ฐ์ดํ„ฐํ˜•์‹;

ALTER TABLE student CHANGE stdAddress stdAddress1 VARCHAR(30);
# stdAdress ์—์„œ stdAddress1 ์œผ๋กœ ์ด๋ฆ„๋ณ€๊ฒฝ
# VARCHAR(50) ์—์„œ VARCHAR(30) ์œผ๋กœ ๋ฐ์ดํ„ฐ ํ˜•์‹ ๋ณ€๊ฒฝ

7๏ธโƒฃ Column ์‚ญ์ œ

ALTER TABLE ํ…Œ์ด๋ธ”๋ช… DROP COLUMN ์ปฌ๋Ÿผ๋ช…

ALTER TABLE ํ…Œ์ด๋ธ”๋ช… DROP ์ปฌ๋Ÿผ๋ช…,
					DROP ์ปฌ๋Ÿผ๋ช…2,
                    DROP ์ปฌ๋Ÿผ๋ช…3, ...;
  • ์ปฌ๋Ÿผ 1๊ฐœ ์‚ญ์ œ
ALTER TABLE student DROP COLUMN stdHP;
  • ์ปฌ๋Ÿผ 2๊ฐœ ์ด์ƒ ์‚ญ์ œ
ALTER TABLE student DROP stdAge,
					DROP stdAddress1,
                    DROP stdAddress2;
  • ์™ธ๋ž˜ํ‚ค ํ˜น์€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ํ‚ค๋Š” ์‚ญ์ œ๊ฐ€ ๋ถˆ๊ฐ€ํ•˜๋‹ˆ ์ œ์•ฝ์กฐ๊ฑด ๋“ฑ์„ ํ•ด์ œํ•œ ํ›„์— DROP ์„ ์ง„ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

8๏ธโƒฃ ์ œ์•ฝ์กฐ๊ฑด ๋ณ€๊ฒฝ (Constraint)

1. ๊ธฐ๋ณธํ‚ค ์‚ญ์ œ

ALTER TABLE ํ…Œ์ด๋ธ”๋ช… DROP PRIMARY KEY

  • ๊ธฐ๋ณธํ‚ค๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๊ธฐ๋ณธํ‚ค๋ฅผ ๋จผ์ € ์‚ญ์ œํ•  ์ˆ˜ ์—†๋‹ค.
  • ์™ธ๋ž˜ํ‚ค ํ…Œ์ด๋ธ”์„ ๋ณ€๊ฒฝํ•œ ํ›„์— ๊ธฐ๋ณธํ‚ค ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
ALTER TABLE department DROP PRIMARY KEY;
# department ์˜ primary key ์ธ dptNo ์„ student ํ…Œ์ด๋ธ”์ด foreign key ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์–ด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

2. ์ œ์•ฝ์กฐ๊ฑด ์‚ญ์ œ

ALTER TABLE ํ…Œ์ด๋ธ”๋ช… DROP CONSTRAINT ์ œ์•ฝ์กฐ๊ฑด์ด๋ฆ„;

  • ์™ธ๋ž˜ํ‚ค ์ œ์•ฝ์กฐ๊ฑด ์‚ญ์ œ ํ›„ ๊ธฐ๋ณธํ‚ค ์‚ญ์ œ ๊ฐ€๋Šฅ
ALTER TABLE student DROP CONSTRAINT FK_student_dptNo;

3. ๊ธฐ๋ณธํ‚ค ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€

ALTER TABLE ํ…Œ์ด๋ธ”๋ช… ADD CONSTRAINT ์ œ์•ฝ์กฐ๊ฑด์ด๋ฆ„ PRIMARY KEY (์ปฌ๋Ÿผ๋ช…);
ALTER TABLE ํ…Œ์ด๋ธ”๋ช… ADD PRIMARY KEY (์ปฌ๋Ÿผ๋ช…);

ALTER TABLE department ADD CONSTRAINT PK_department_dptNo PRIMARY KEY (dptNo);
ALTER TABLE department ADD PRIMARY KEY (dptNo);

4. ์™ธ๋ž˜ํ‚ค ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€

ALTER TABLE ํ…Œ์ด๋ธ”๋ช… ADD CONSTRAINT ์ œ์•ฝ์กฐ๊ฑด์ด๋ฆ„ FOREIGN KEY (์ปฌ๋Ÿผ๋ช…) REFERENCES ์ฐธ์กฐํ…Œ์ด๋ธ”(์ปฌ๋Ÿผ๋ช…);

ALTER TABLE student ADD CONSTRAINT FK_student_dptNo 
					FOREIGN KEY (dptNo) REFERENCES department(dptNo);

โ€ป ์ œ์•ฝ์กฐ๊ฑด ๋ชฉ๋ก ๋ณด๊ธฐ

  • ์ œ์•ฝ์กฐ๊ฑด ๋ชฉ๋ก์„ ํ†ตํ•ด ์„ค์ •ํ–ˆ๋˜ ์ œ์•ฝ์กฐ๊ฑด ์ด๋ฆ„ ๋ฐ ํƒ€์ž…์„ ํ™•์ธํ•˜์—ฌ ์ œ์•ฝ์กฐ๊ฑด ๋ณ€๊ฒฝ , ์‚ญ์ œ์— ํ™œ์šฉํ•œ๋‹ค.
  • ์ œ์•ฝ์กฐ๊ฑด ๋ชฉ๋ก ๊ฒฐ๊ณผ
SELECT * FROM information_schema.table_constraints
	WHERE CONSTRAINT_SCHEMA='testdb2';

5. ์™ธ๋ž˜ํ‚ค ์ œ์•ฝ์กฐ๊ฑด ๋ณ€๊ฒฝ

  • ๊ธฐ์กด ์ œ์•ฝ์กฐ๊ฑด ์‚ญ์ œ ํ›„ ๋‹ค์‹œ ์„ค์ •
    ON DELETE RESTRICT ON UPDATE RESTRICT
    ON DELETE CASCADE ON UPDATE CASCADE

  • ํ˜„์žฌ student ํ…Œ์ด๋ธ”์€ department ์˜ ๊ธฐ๋ณธํ‚ค์ธ deptNo ์„ ์™ธ๋ž˜ํ‚ค๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์•„๋ž˜์˜ ์ฝ”๋“œ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

DELETE FROM `testdb2`.`department` WHERE (`dptNo = '3');
  • student ํ…Œ์ด๋ธ”์˜ ์™ธ๋ž˜ํ‚ค ์ œ์•ฝ์กฐ๊ฑด ์‚ญ์ œ ํ›„ ON DELETE CASCADE ๋ฅผ ์ž‘๋Š” ์™ธ๋ž˜ํ‚ค ์ œ์•ฝ์กฐ๊ฑด์œผ๋กœ ๋‹ค์‹œ ์„ค์ •ํ•œ๋‹ค.
    - ๋‹จ, ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ, ์ผ๊ด€์„ฑ ๊ด€์ ์—์„œ๋Š” ์ถ”์ฒœํ•˜์ง€ ์•Š๋Š”๋‹ค.
ALTER TABLE student DROP CONSTRAINT FK_student_dptNo;

ALTER TABLE student ADD CONSTRAINT FK_student_dptNo
	FOREIGN KEY(dptNo)
    REFERENCES department(dptNo) ON DELETE RESTRICT ON UPDATE CASCADE;
  • Update ๋ฅผ CASCADE ํ•˜์—ฌ Update ๊ฐ€ ์ ์šฉ๋œ๋‹ค.
UPDATE `testdb2`.`department` SET `dptNo` = '10' WHERE (`dptNo` = '3');

6. CHECK / DEFAULT ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€, ์‚ญ์ œ

  • ์‚ญ์ œ ์‹œ ์ œ์•ฝ์กฐ๊ฑด ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ๋จผ์ € ์ œ์•ฝ์กฐ๊ฑด ์ด๋ฆ„์„ ํ™•์ธ (4๋ฒˆ์˜ โ€ป ์ฐธ์กฐ)
    - SELECT * FROM information_schema.table_constraints;
    • Ex) CONSTRAINT_TYPE ์ด CHECK์ธ ํ–‰์—์„œ CONSTRAINT_NAME ํ™•์ธ
SELECT * FROM information_schema.table_constraints
	WHERE CONSTRAINT_SCHEMA='testdb2' AND TABLE_NAME='student' 
    		AND CONSTRAINT_TYPE='CHECK';

  • DEFAULT๊ฐ’ CHECK ์กฐ๊ฑด์ด ์ ์šฉ๋œ ๊ฒฝ์šฐ : stdYear ์ด 1~4 ๋ฒ”์œ„๋งŒ ์ž…๋ ฅ ๊ฐ€๋Šฅํ•˜๋‚˜ 5์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ, ์—๋Ÿฌ ๋ฐœ์ƒํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ์ œ์•ฝ์กฐ๊ฑด ์‚ญ์ œ ํ›„ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…, ๊ทธ ํ›„ ์ œ์•ฝ์กฐ๊ฑด์„ ๋‹ค์‹œ ์ถ”๊ฐ€ํ•œ๋‹ค.
    - ์—๋Ÿฌ : student_chk_1 ์ด๋ผ๋Š” CHECK CONSTRAINT ์œ„๋ฐ˜์ด๋‹ค.
Executing:
INSERT INTO `testdb2`.`student` (`stdNo`, `stdName`, `stdYear`, `stdBirthDay`, `dptNo`) VALUES ('2022', '๋ฐฉ์ž', '5', '2000-01-10', '1');

ERROR 3819: 3819: Check constraint 'student_chk_1' is violated.
SQL Statement:
INSERT INTO `testdb2`.`student` (`stdNo`, `stdName`, `stdYear`, `stdBirthDay`, `dptNo`) 
VALUES ('2022', '๋ฐฉ์ž', '5', '2000-01-10', '1')
  • CHECK ์ œ์•ฝ์กฐ๊ฑด ์‚ญ์ œ
ALTER TABLE student DROP CONSTRAINT student_chk_1;
  • CHECK ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€
ALTER TABLE student ADD CHECK(stdYear >= 1 AND stdYear <= 5);

0๊ฐœ์˜ ๋Œ“๊ธ€