데이터베이스 생성
CREATE DATABASE [데이터베이스 이름];
똑같은 이름의 데이터베이스 생성 방지
CREATE DATABASE IF NOT EXISTS [데이터베이스 이름];
데이터베이스 지정
USE [데이터베이스 이름];
테이블 생성하고, 컬럼 구조 만들기
CREATE TABLE [데이터베이스 이름].[테이블 이름] (
`컬럼명` [데이터 타입] [속성],
`컬럼명` [데이터 타입] [속성],
`컬럼명` [데이터 타입] [속성],
`컬럼명` [데이터 타입] [속성],
`컬럼명` [데이터 타입] [속성]
);
컬럼명을 구분할 때는 백틱(`)을 사용.
(문자열 값을 나타낼 때에는 작은 따옴표(')/큰 따옴표(")를 사용)
데이터 타입
1. 숫자
-정수형
TINYINT, SMALLINT, INT, MIDIUMINT, BIGINT
음수 포함 선택 가능: SIGNED(음수 포함), UNSIGNED(0과 양수만)
-실수형
DECIMAL, FLOAT, DOUBLE
2. 날짜 및 시간
DATE, DATETIME, TIMESTAMP, TIME
3. 문자열
CHAR, VARCHAR, TEXT
속성은 여러 개일 수 있다
속성
NOT NULL / NULL
AUTO_INCREMENT
DEFAULT 기본값
UNIQUE
PRIMARY KEY 와 UNIQUE의 차이
PRIMARY KEY는 한 테이블에 하나만 존재. NULL값이 있으면 안됨
UNIQUE는 한 테이블에 여러 개 존재 가능. NULL값이 있어도 됨(여러 row가 NULL값 가져도 됨). NULL 제외 중복되는 값 있으면 안됨
순서 바꾸기 속성
컬럼을 맨 앞으로 위치 시키기(주로 PRIMARY KEY에 사용) : FIRST
특정 컬럼 다음에 위치 시키기: AFTER [컬럼명]
CREATE 시 PRIMARY KEY 설정하기
CREATE TABLE [테이블 이름] (
...
PRIMARY KEY ([컬럼명]);
);
PRIMARY KEY (`컬럼명`)
속성으로 PRIMARY KEY
CREATE 시 FOREIGN KEY 설정하기
CREATE TABLE [테이블 이름] (
...
CONSTRAINT [제약사항 이름] FOREIGN KEY ([외래키로 사용할 컬럼])
REFERENCES [DB 이름].[테이블 이름] ([참조될 컬럼])
ON UPDATE [업데이트 정책] ON DELETE [삭제 정책];
);
테이블 이름 변경
RENAME TABLE [원래 테이블 이름] TO [바꿀 테이블 이름];
테이블 삭제
DROP TABLE [테이블 이름];
테이블 삭제 3가지 경우
DROP TABLE [테이블 이름];
DELETE FROM [테이블 이름];
TRUNCATE [테이블 이름];
https://lee-mandu.tistory.com/476
테이블 복사
CREATE TABLE [테이블 이름] AS SELECT문으로 테이블 가져오기;
CREATE TABLE [테이블 이름]
AS SELECT * FROM [복사할 테이블 이름];
테이블 컬럼 구조만 복사
CREATE TABLE [테이블 이름] LIKE [컬럼 구조를 복사할 테이블 이름];
row 삽입
INSERT INTO [테이블 이름] (테이블에 값을 넣을 컬럼1, 컬럼2, ... , 컬럼n)
VALUES (값1, 값2, ... , 값n);
모든 컬럼의 데이터 추가
INSERT INTO [테이블 이름]
VALUES (값1, 값2, ... , 값n);
만약 모든 컬럼의 데이터 추가한다면 테이블 컬럼명들은 생략해도 된다
여러 개 삽입 시
INSERT INTO [테이블 이름] (테이블에 값을 넣을 컬럼1, 컬럼2, ... , 컬럼n)
VALUES
(값1, 값2, ... , 값n), (값1, 값2, ... , 값n), (값1, 값2, ... , 값n);
서브쿼리를 사용한 삽입 (컬럼 구조가 동일해야 한다)
INSERT INTO [테이블 이름] (테이블에 값을 넣을 컬럼1, 컬럼2, ... , 컬럼n)
SELECT FROM (WHERE);
row 갱신(수정)
기존의 row를 바꾸고 싶을 때 사용
UPDATE [테이블 이름]
SET 컬럼명 = 바꿀 값
WHERE 조건;
WHERE절을 쓰지 않으면 모든 row가 변경되기 때문에
WHERE절을 꼭 써야 한다!!
where절을 쓰지 않거나
조건이 primary key인 컬럼이 아닌 컬럼으로 하면
UPDATE가 실행되지 않는다
->safe update 없애기
여러 개의 컬럼 값을 바꾸고 싶을 때
UPDATE [테이블 이름]
SET 컬럼1 = 바꿀 값, 컬럼2 = 바꿀 값, 컬럼3 = 바꿀 값
WHERE 조건;
row 삭제
DELETE FROM [테이블 이름]
WHERE 조건;
WHERE절을 쓰지 않으면 모든 row가 삭제되기 때문에
WHERE절을 꼭 써야 한다!!
column 관련
ALTER TABLE [테이블 이름]
column 추가
ALTER TABLE [테이블 이름] ADD [새로운 컬럼명] [데이터 타입] [속성];
column 삭제
ALTER TABLE [테이블 이름] DROP COLUMN [삭제할 컬럼명];
column 이름 변경
ALTER TABLE [테이블 이름] RENAME COLUMN [원래 컬렴명] TO [바꿀 컬럼명];
column의 데이터 타입, 속성 변경하기
데이터 타입을 미리 변경할 데이터 타입에 적합한 값으로 변경하고 바꾼다
ex) 코드 번호로 바꾸기 '컴퓨터' -> '3' -> 데이터 타입 변경 -> 3
ALTER TABLE [테이블 이름] MODIFY [컬럼명] [데이터 타입] [속성];
column 이름, 데이터 타입, 속성 변경(RENAME+MODIFY)
ALTER TABLE [테이블 이름]
CHANGE [원래 컬럼명] [바꿀 컬럼명] [데이터 타입] [속성];
ALTER TABLE 뒤에 여러 절이 올 수 있고 콤마(,)로 구분한다
테이블의 컬럼 보기
DESCRIBE [테이블 이름];
DESC [테이블 이름];
DATETIME, TIMESTAMP 데이터 타입의 DEFAULT 값을 현재 시간으로 하기
`컬럼명` DATETIME DEFAULT CURRENT_TIMESTAMP;
`컬럼명` TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
UPDATE 값을 현재 시간으로 하기
`컬럼명` DATETIME ON UPDATE CURRENT_TIMESTAMP;
`컬럼명` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
+INSERT 할 때 현재 시간 넣기
NOW()
제약사항
제약사항 생성
ALTER TABLE [테이블 이름]
ADD CONSTRAINT [제약사항 이름] CHECK ([제약조건]);
여러 제약 조건을 쓸 수 있다(AND로 연결)
CHECK ([제약조건1] AND [제약조건2] AND ... AND [제약조건n]);
제약사항 삭제
ALTER TABLE [테이블 이름]
DROP CONSTRAINT [제약사항 이름];
참조 무결성을 위한 FOREIGN KEY 제약사항
foreign key로 다른 테이블의 primary key를 참조한다
참조 당하는 테이블 = 부모 테이블
참조 하는 테이블 = 자식 테이블
ALTER TABLE [테이블 이름]
ADD CONSTRAINT [외래키 제약사항 이름]
FOREIGN KEY ([외래키로 사용할 컬럼])
REFERENCES [데이터베이스 이름].[테이블 이름] ([참조될 컬럼])
ON UPDATE [업데이트 정책]
ON DELETE [삭제 정책];
ON DELETE 정책
( 부모 테이블의 row 삭제 시 )
1. RESTRICT
: 자식테이블에 그것을 참조하고 있는 row가 하나라도 있다면 삭제 안됨
2. CASCADE
: 자식테이블에 그것을 참조하고 있는 row들도 함께 삭제 됨
3. SET NULL
: 자식테이블에 그것을 참조하고 있는 FOREIGN KEY 값을 NULL로 바뀜
ON UPDATE 정책
(부모 테이블의 참조 당하는 컬럼의 값이 바뀌었을 때. 다른 컬럼의 값은 상관 없음)
1. RESTRICT : 갱신 안됨
2. CASCADE : 같이 갱신 됨
3. SET NULL : NULL로 갱신 됨