본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

SK 네트웍스 AI 캠프

SK 네트웍스 AI 캠프 - 1_프로그래밍 데이터 기초 - Day9_SQL 기본

 

테이블 및 컬럼 이름은 문자로 시작, 30자 이하 영문대소문자, 숫자, 특수문자 _ $ #, 한글만 포함가능하며 중복되는 이름은 사용할 수 없고 예약키워드 CREATE TABLE COLUMN등 사용할 수 없다.

 

제약조건

데이터 무결성, 저장된 데이터가 손상되지않도록 유지하는 상태. 유효하지않는 입력을 방지하거나 유효한 벙ㅁ위에서만 데이터 변경/삭제 작업을 허용한다.

 

NOT NULL 해당 컬럼에 NULL을 포함되지않도록 한다.

-- NOT NULL : 이름은 반드시 입력
name VARCHAR(20) NOT NULL

 

 

UNIQUE 해당 컬럼 또는 컬럼 조합값이 유일하도록 한다.

-- UNIQUE : 이메일 중복 금지
email VARCHAR(50) UNIQUE

 

PRIMARY KEY 각 행을 유일하게 식별할 수있도록 한다.

-- PRIMARY KEY : 학번으로 학생 구분
student_id INT PRIMARY KEY

 

REFERENCES TABLE(COLUMN_NAME) 참조하고 있는 테이블의 특정 컬럼값과 일치하거나 NULL이 되도록 보장한다.

-- FOREIGN KEY(REFERENCES) : 존재하는 학과번호만 입력 가능
FOREIGN KEY (dept_id) REFERENCES department(dept_id)

 

CHECK특정 조건을 항상 만족시키도록한다.

-- CHECK : 나이는 0 이상만 가능
age INT CHECK (age >= 0)

 

 

 

 

실습

 

 

 

 

 

 

dafault설정이 없을경우 insert into table values() 시 null로 기록된다.

 

 

 

 

 

 

not null 지정할 경우 insert되지않는다.

 

 

 

 

 

unique가 설정되면 값이 중복 될 수 없다. - 단일, 다수 가능하다

 

 

 

 

 

 

desc, describe table ~ 로 해당 조건을 확인 가능하다

 

 

 

 

 

좀더 정확히 알고싶다면 select문.

select * from information_schema.table_constraints where table_name = ~

 

 

 

 

 

 

check

해당 값에 선택값을 부여할 수 있다.

primary key

해당 값을 기본값으로 사용하겠다 .

 

 

 

 

 

 

 

primary key는 묶어서 지정될 수 있다.

constraint 묶음이름 primary key (열, 열)

show keys form 테이블 

단일키든 복합키든 null불가

 

 

 

 

 

foreign key

FOREIGN KEY(외래키)는 반드시 “다른 테이블의 PRIMARY KEY 또는 UNIQUE KEY를 참조해야 한다.

 

 

foreign key설정은 컬럼에게, table에서 가능하다.

테이블에 정의시 reference앞에 constraint 키워드추가  foreign key (컬럼) 를 붙임

CONSTRAINT = “제약조건” (데이터에 규칙을 거는 것)

 

REFERENCES  참조테이블명  ( 참조필드명 )

constraint 키워드추가  foreign key (컬럼) REFERENCES 참조테이블명 (참조필드명)

 

 

AS SUBQUERY

테이블 생성과 행삽입을 동시에 진행할 수 있다. 

이때 CTAS (CREATE TABLE ... AS SELECT)는 데이터 + 컬럼 구조는 가져오지만, PRIMARY KEY 같은 제약조건은 거의 안 가져온다. 제약조건까지 가져오면 충돌위험이 커지기 때문.

CTAS에서는 컬럼에 제약조건 거의 못 쓴다. 단순히 사용한다고 생각하자.

 

left join

“왼쪽 테이블은 무조건 살리고 오른쪽을 붙인다”는 뜻

 

 

TABLE_SUBQUERY1라는 새 테이블을 생성했다.
AS SELECT 결과로 EMPLOYEE테이블을 기준으로 테이블을 만들것인데
속성은 EMP_ID, EMP_NAME, SALARY, DEPT_NAME, JOB_TITLE을 사용하기위해
DEPARTMENT 테이블에서 DEPT_ID, DEPT_NAME
JOB 테이블에서 JOB_ID를 조인해서 JOB_TITLE을 가져올것이다.

 

 

 

 

 

erd 그리기 실습완료

https://standout.tistory.com/1709

 

MySQL Workbench로 erd만들기

database - reverse engineer 로그인 - next db 선택 - next - next 테이블 선택 - execute loading - next - finish 완료 + file - export 원하는 확장자로 다운 가능

standout.tistory.com

 

 

 

 

 

 

제약조건 확인하기

select * from information_schema.table_constraints

 

 

 

 

table과 컬럼의 이름을 바꿀 수 있다.

alter table 이전이름 rename to 바꿀이름

alter table 테이블이름 rename column 이전이름 to 바꿀이름

 

 

 

 

 

 

 

default값 바꾸기

alter table 테이블명 modify 칼럼명 칼람형 default '바꿀값'

단 '이전 데이터'에 반영되지않고 '이 이후'부터 반영된다.

 

 

 

 

 

 

테이블 데이터 삭제하기

delete from 테이블명

 

 

 

 

 

 

 

alter table 테이블명 drop colum 칼럼명

칼럼 삭제하기

단 모든 칼럼을 삭제할 수 없어 하나는 남겨둬야한다.

 

 

 

 

 

 

부모키가 삭제되면 자식 레코드 컬럼은 null이 되고 

부모키가 값을 수정하면 자식 레코드의 컬럼값도 함께 변경

 

 

 

부모데이터가 삭제되면 child에 parent_id를 null로 변경할뿐, 연결만 끊고 데이터를 남긴다.
또 부모의 parent_id가 바뀌면 child의 parent_id도 자동으로 같이 변경해 데이터 정합성 유지한다.

CREATE TABLE parent (
    parent_id INT PRIMARY KEY,
    name VARCHAR(50)
);

CREATE TABLE child (
    child_id INT PRIMARY KEY,
    parent_id INT,
    name VARCHAR(50),
    
    CONSTRAINT fk_parent
    FOREIGN KEY (parent_id)
    REFERENCES parent(parent_id)

    ON DELETE SET NULL
    ON UPDATE CASCADE
);

 

 

 

 

 

 

실습수행 완료

 

 

 

 

 

 

 

 

view

노출되면 안되는 데이터가 있을때 사용한다.

 

 

 

 

set autocommit = 0

커밋을 자동으로 실행할 수 있다.

 

 

 

 

rollback으로 값을 다시 돌릴 수 있다.