카테고리 없음

[SQL] 데이터베이스

왕초보코딩러 2024. 4. 7. 16:46
728x90

데이터베이스 생성

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

 

drop, delete, truncate 차이점 및 개념 이해하기

안녕하세요.오늘의 포스팅 주제는 DROP, TRUNCATE, DELETE 명령어에 대해 알아보고자 합니다.그리고 차이점을 알아보도록 하겠습니다. TRUNCATE 명령어개념 : 테이블의 데이터를 전부 삭제하고 사용하고

lee-mandu.tistory.com

 

테이블 복사

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 없애기

https://html6.tistory.com/521

 

MySQL safe mode 해제하기

거두절미하고 mysql에서 safe mode disable 하는 법 먼저 말씀드리겠습니다. 2개의 방법이 있는데 우선 빠르게 방법 보여드리고 차이점 설명 드리도록 하겠습니다. 1. MySQL safe mode disable with Query SET SQL_SA

html6.tistory.com

 

 

여러 개의 컬럼 값을 바꾸고 싶을 때

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로 갱신 됨