본문 바로가기
✨ DBMS/MySQL

[MySQL / SQL] 테이블 구조 생성, 변경, 삭제 (DDL)

by 환풍 2023. 7. 26.
728x90
반응형

-- 데이터베이스 생성 명령어
CREATE DATABASE [dbname]; 
-- 데이터베이스 생성 및 속성 설정 명령어
CREATE DATABASE [dbname] CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 테이블 생성 명령어
CREATE TABLE [tablename] (
    [column_name1] INT PRIMARY KEY AUTO_INCREMENT,
    [column_name2] VARCHAR(255) NOT NULL,
    [column_name3] DATETIME NOT NULL,
)CHARSET=utf8;


 DROP 명령어
-- 데이터베이스 삭제 명령어
DROP DATABASE [dbname];
-- 테이블 삭제 명령어
DROP TABLE [table_name];

-- 테이블에 컬럼 추가하기
ALTER TABLE [table_name] ADD COLUMN [column_name] [column_type];
 
-- 테이블의 컬럼 타입 변경하기
ALTER TABLE [table_name] MODIFY COLUMN [column_name] [column_type];
 
-- 테이블의 컬림 이름 변경하기
ALTER TABLE [table_name] CHANGE COLUMN [old_column_name] [new_column_name] [new_column_type];
 
-- 테이블의 컬럼 삭제하기
ALTER TABLE [table_name] DROP COLUMN [column_name];
 
-- 테이블에 컬럼 인덱스 주기
ALTER TABLE [table_name] DROP INDEX [index_name];
 
-- 테이블에 PRIMARY KEY 만들기
ALTER TABLE [table_name] ADD PRIMARY KEY( column_name_on_this_table );
 
-- 테이블에 PRIMARY KEY 삭제하기
ALTER TABLE [table_name] DROP PRIMARY KEY;
 
-- 테이블 명 바꾸기
ALTER TABLE [old_table_name] RENAME [new_table_name]; 

-- 테이블 이름 변경 명령어
RENAME TABLE [old_table_name] TO [new_table_name];
TRUNCATE
데이터가 존재하던 공간까지 모두 제거합니다.
AUTO_INCREMENT로 지정하여 값이 증가하던 컬럼이 완전 초기화 됩니다.(MySQL 5.0.13 버전 이후)
-- 테이블의 데이터 삭제 명령어
TRUNCATE TABLE [table_name];

제약조건 확인하기
select * from information_schema.table_constraints;
제약조건 삭제하기
ALTER TABLE [테이블명] DROP CONSTRAINT [제약조건이름];
ALTER TABLE [테이블명] DROP FOREIGN KEY [제약조건이름];

제약조건 추가하기
외래키 :
  ALTER TABLE [테이블명] ADD CONSTRAINT [제약조건이름] FOREIGN KEY(컬럼명)
  REFERENCES [부모테이블명](PK컬럼명) [ON DELETE CASCADE / ON UPDATE CASCADE];
기본키 : 
  ALTER TABLE [테이블명] ADD CONSTRAINT [제약조건이름] PRIMARY KEY(컬럼명);
NOT NULL 제약조건 추가
  ALTER TABLE [테이블명] MODIFY [컬럼명] [데이터타입] CONSTRAINT [제약조건이름] NOT NULL;



SELECT @@AUTOCOMMIT;   // AUTOCOMMIT 여부 확인
SET AUTOCOMMIT = TRUE;   // AUTOCOMMIT 설정

SET AUTOCOMMIT = FALSE;   // AUTOCOMMIT 해제
COMMIT; // 커밋
ROLLBACK; // 롤백

MySQL에서 트랜잭션은 데이터베이스를 상태를 바꾸는 일종의 작업 단위입니다.

원자성 (Atomicity) 트랜잭션의 결과는 DB에 반영이 되거나 반영이 안되거나 이 두 가지 결과만을 나타냅니다.
일관성 (Consistency) 트랜잭션이 진행되는 동안 DB가 변경되더라도 이전에 사용한 DB를 참조합니다.
즉 트랜잭션은 시작부터 종료 시까지 같은 형태의 DB를 참조합니다.
독립성 (Isolation) 트랜잭션이 두 개이상 실행될 때 트랜잭션 끼리 영향을 주지 못합니다, 즉 하나의 트랜잭션이 또 다른 트랜잭션의 결과를 참조할 수 없습니다.
영구성 (Durability) 트랜잭션이 성공적으로 완료(Commit)이 되었을 때 결과를 영구적으로 DB에 반영됩니다.
2. 사용법
아래 명령어를 통해 트랜잭션을 실행할 수 있습니다, 이때 Commit 방식은 수동 Commit으로 바뀝니다.

START TRANSACTION;

#AUTO COMMIT 
SET AUTOCOMMIT = FALSE;

#TRANSACTION 
START TRANSACTION;

#UPDATE 
SAVEPOINT A;
UPDATE TABLENAME SET NAME = 'ABC' WHERE NAME LIKE 'A%'

SAVEPOINT B;
UPDATE TEMP_TABLE SET NAME = 'BBC' WHERE NAME = 'B%'

SAVEPOINT C;
UPDATE TEMP_TABLE SET NAME = 'CCD' WHERE NAME = 'C%'

그리고나서 모든 데이터가 UPDATE를 제대로 진행 해서 변경을 적용하고 싶다면 역시나
COMMIT

세개의 모든 UPDATE 문을 취소하고싶다면 (즉, 전체취소)
ROLLBACK

세번째 UPDATE 만 실행하고 싶다면 다음과 같이 SAVEPOINT를 사용하면 된다.
ROLLBACK TO SAVEPOINT C

728x90
반응형

댓글