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
'SQL' 카테고리의 다른 글
기초 문법 - 되새김 문제 (0) | 2024.07.26 |
---|---|
기초 문법 - GROUP BY문으로 데이터 조회하기 (0) | 2024.07.20 |
기초 문법 - 와일드 카드로 조회하기 : Like[조건값] (0) | 2024.07.18 |
기초 문법 - SELECT문으로 데이터 조회하기(WHERE, ORDER) (0) | 2024.07.17 |
기초 문법 - DDL과 DML (0) | 2024.07.15 |