[MySQL] DDL & DML
MySQL Table
CREATE TABLE
- 테이블 만들기INSERT INTO
- 테이블에 데이터(행) 추가ALTER
- 테이블의 속성 수정SET
- 테이블 속성 설정UPDATE
&SET
- 테이블의 데이터 수정DELETE
- 테이블의 데이터 삭제
CREATE TABLE
- CREATE TABLE [table_name] (columns)
# 방법1
CREATE TABLE userTbl(
uNo INT AUTO_INCREMENT PRIMARY KEY, -- PRIMARY KEY가 있으니 NOT NULL 빼도 됨, 붙여도 상관없음
uID VARCHAR(10) NOT NULL UNIQUE,
uName VARCHAR(10) NOT NULL,
uAge INT NOT NULL CHECK(uAge BETWEEN 0 AND 120),
uAddr CHAR(4) DEFAULT '서울',
mob1 CHAR(3) CHECK(mob1 IN ('010', '011', '019')),
mob2 CHAR(8),
uDate DATETIME NOT NULL DEFAULT NOW()
);
# 방법2 - Constraint을 더 명확하게 볼 수 있음
CREATE TABLE userTbl(
uNo INT AUTO_INCREMENT,
uID VARCHAR(10) NOT NULL,
uName VARCHAR(10) NOT NULL,
uAge INT NOT NULL,
uAddr CHAR(4) DEFAULT '서울', -- DEFAULT는 제약조건에 대한 이름을 만들 수 없음
mob1 CHAR(3),
mob2 CHAR(8),
uDate DATETIME NOT NULL DEFAULT NOW(),
CONSTRAINT userTbl_uNo_pk PRIMARY KEY(uNo),
CONSTRAINT userTbl_uID_uk UNIQUE(uID),
CONSTRAINT userTbl_uAGE_ck CHECK(uAge BETWEEN 0 AND 120),
CONSTRAINT userTbl_mob1_ck CHECK(mob1 IN ('010', '011', '019'))
);
# 기존에 존재하는 테이블 자체를 복사, 다만 이 경우 데이터만 복사되며, constraint, foreign key, index 등은 복사 안 됨
CREATE TABLE dept4
SELECT * FROM dept;
# 비어있는 테이블 생성후, 테이블 값 복사
CREATE TABLE dept5 (deptno int primary key,
dname varchar(20),
loc varchar(20))
INSERT INTO dept5
SELECT * FROM dept;
INSERT INTO
- INSERT INTO [table_name] VALUES(values)
# 방법1
INSERT INTO dept2(deptno, dname, loc) VALUES (50,'IT','SEOUL');
# 방법2 (column name과 values 순서는 맞아야 함)
INSERT INTO dept2(dname, loc, deptno) VALUES ('OP','BUSAN',60);
# 방법3
INSERT INTO dept2 VALUES(80, 'MKT', 'JEJU'),
(90, 'DEV', 'JEJU');
ALTER
- ALTER TABLE [table_name] [command_to_alter]
# auto_increment의 시작을 100으로 설정
ALTER TABLE dept3 AUTO_INCREMENT = 100;
# constraint primary key 추가
ALTER TABLE uTbl
ADD CONSTRAINT uTbl_uNo_pk PRIMARY KEY(uNo);
# constraint UNIQUE 추가
ALTER TABLE [table_name]
ADD UNIQUE [column_name];
# 만약 이미 중복 값이 잇다면 해당 값들이 UDPATE, DELETE 등을 해야함
# constraint MULTIPLE UNIQUE 추가
ALTER TABLE [table_name]
ADD UNIQUE [column_name1, column_name2];
# column에 대한 default 설정할 경우 경우 'add'가 아닌 'alter'임
ALTER TABLE uTbl
ALTER COLUMN uAddr SET DEFAULT '서울';
# constraint NOT NULL 추가
ALTER TABLE [table_name]
ALTER COLUMN [column_name] SET NOT NULL;
# 만약 이미 NULL 값이 잇다면 해당 값들이 UDPATE, DELETE 등을 해야함
# constraint DEFAULT 추가
ALTER TABLE [table_name]
ALTER COLUMN [column_name] SET DEFAULT [value];
# weight column 추가
ALTER TABLE uTbl
ADD COLUMN weight smallint;
# weight column 삭제
ALTER TABLE uTbl
DROP COLUMN weight;
# CONSTRAINT 삭제
ALTER TABLE [table_name]
DROP CONSTRAINT [constraint_name];
SET
# auto_increment를 3씩 하도록 함
SET @@AUTO_INCREMENT_INCREMENT=3;
UPDATE SET
# 90번 부서의 위치를 LA로 수정
UPDATE dept2
SET loc = 'LA'
WHERE (deptno=90);
# 70, 90번 부서의 위치를 JEJU로 수정하시오
UPDATE dept2
SET loc = 'JEJU'
WHERE (deptno IN (70,90));
# 80번 부서의 이름은 ADMIN, 위치는 BUSAN 으로 수정해주세요
UPDATE dept2
SET dname = 'ADMIN', loc = 'BUSAN'
WHERE (deptno = 80)
DELETE
# 부서번호가 80인 데이터 삭제
DELETE FROM dept2
WHERE (deptno = 80);
# 70번 부서이면서, 위치가 Jeju인 데이터 삭제
DELETE FROM dept2
WHERE (deptno = 70)
AND (loc = 'JEJU')