본문 바로가기
SQL

기초 문법 - 테이블 생성 및 조작

by d22pinsights 2024. 7. 21.

CREATE DATABASE IF NOT EXISTS doitsql;

doitsql이란 이름의 데이터베이스가 없을 경우 생성하는 코드!

 

AUTO_INCREMENT
USE doitsql;

CREATE TABLE doit_increment(
col_1 INT AUTO_INCREMENT PRIMARY KEY,
col_2 VARCHAR(50),
col_3 INT
);

INSERT INTO doit_increment (col_2, col_3) VALUES ('1 자동 입력',1);
INSERT INTO doit_increment (col_2, col_3) VALUES ('2 자동 입력',2);

SELECT * FROM doit_increment;

auto_increment가 적용된 col_1은 자동으로 1씩 증가한 데이터가 입력된 것을 확인할 수 있음

values를 통해 값을 입력하지 않아도 auto_increment로 인해 자동으로 답이 입력된다

 

INSERT INTO doit_increment (col_1, col_2, col_3) VALUES(3,'3자동 입력', 3);

자동 입력되는 값과 동일한 값을 입력한 경우 문제없이 쿼리가 실행되고 이와 같은 결과가 출력됨

INSERT INTO doit_increment(col_1, col_2, col_3) VALUES(5,'4건너뛰고 5 자동 입력',5);

SELECT * FROM doit_increment;

 

자동 입력대로라면 4가 입력되어야하지만, 5를 넣어도 문제없이 쿼리가 실행됨

INSERT INTO doit_increment (col_2, col_3) VALUES('어디까지 입력되었을까?',0);

SELECT * FROM doit_increment;

5 다음 숫자인 6이 입력되어있음을 볼 수 있따

 

LAST_INSERT_ID() : 자동 생성된 마지막 값 확인
SELECT LAST_INSERT_ID();

AUTO_INCREMENT가 적용된 열의 마지막 데이터를 확인할 수 있다

현재 마지막 AUTO_INCREMENT 값을 보여준다

 

AUTO_INCREMENT 활용하기
ALTER TABLE doit_increment AUTO_INCREMENT = 100;
INSERT INTO doit_increment (col_2, col_3) VALUES ('시작 값 변경', 0);

SET @@AUTO_INCREMENT_INCREMENT =5;
INSERT INTO doit_increment (col_2, col_3) VALUES ('5씩 증가', 1);
INSERT INTO doit_increment (col_2, col_3) VALUES ('5씩 증가', 2);

AUTO_INCREMENT = 100으로 지정해서 100부터 시작하도록 값 설정

@@AUTO_INCREMENT_INCREMENT = 5로 증가값을 설정

하지만 결과값을 보면 처음 데이터는 1이 증가하고 그 이후 5씩 증가함

 

 

조회 결과를 다른 테이블에 입력하기

입력하려는 테이블과 조회한 열의 데이터 유형이 동일해야한다

create table doit_insert_select_from (
col_1 int,
col_2 varchar(50)
);
create table doit_insert_select_to (
col_1 int,
col_2 varchar(50)
);

INSERT INTO doit_insert_select_from VALUES (1, 'Do');
INSERT INTO doit_insert_select_from VALUES (2, 'It');
INSERT INTO doit_insert_select_from VALUES (3, 'MySQL');

INSERT INTO doit_insert_select_to
SELECT * FROM doit_insert_select_from;

SELECT * FROM doit_insert_select_to;

select_ from 테이블의 데이터를 조회해 select_to 테이블에 입력

 

create table doit_select_new as (select * from doit_insert_select_from);
select*from doit_select_new;

조회한 결과를 아예 새로운 테이블을 생성해 저장할 수도 잇음

CREATE TABLE문을 사용해 열 이름 대신 SELECT 문을 사용하여 테이블을 생성하는 쿼리를 넣어 입력하면 됨

 


외래키로 연결되어 있는 테이블 조작

 

데이터의 무결성 : 부모 테이블에 없는 데이터가 자식 테이블에 있으면 안된다

 

-- 부모 테이블과 자식 테이블 생성
CREATE TABLE doit_parent (col_1 INT PRIMARY KEY);
CREATE TABLE doit_child (col_1 INT);

ALTER TABLE doit_child
ADD FOREIGN KEY (col_1) REFERENCES doit_parent(col_1);

-- 자식 테이블에 데이터 입력 시 부모 테이블에 해당 데이터가 없는 경우
INSERT INTO doit_child VALUES (1);

부모 테이블에 없는 데이터를 자식 테이블에 입력할 시에는 Error Code : 에러가 발생한다

 

또한 외래키가 설정 되엉 ㅣㅆ는 테이블을 삭제하려면 자식 테이블 > 부모 테이블 순서대로 삭제해야한다

-- 하위 테이블 삭제 후 상위 테이블 삭제
DROP TABLE doit_child;
DROP TABLE doit_parent;

 

제약조건을  제거하여 부모 테이블을 삭제한다면 자식 테이블을 유지하면서 부모 테이블을 삭제할 수 있다

 제약 조건 확인하기 위해서는 show create table을 실행하면 된다

CREATE TABLE doit_parent (col_1 INT PRIMARY KEY);
CREATE TABLE doit_child (col_1 INT);

SHOW CREATE TABLE doit_child;

제약 조건을 제거 한 뒤, 부모 테이블을 삭제하면 오류없이 부모 테이블이 삭제된다

ALTER TABLE doit_child
DROP CONSTRAINT doit_child_ibfk_1;

DROP TABLE doit_parent;

doit_child_ibfk_1 = 외래키를 가리킨다

 

 


오늘도 SQL은 여기까지..!

참고 :  Do it! MySQL로 배우는 SQL 입문 4장~164p