코드 그라데이션
Day03-3. SQL의 분류, INSERT 본문
전체적인 설명
- DML, DDL, DCL은 데이터베이스 관리 시스템(DBMS)에서 사용되는 SQL(Structured Query Language) 명령어의 종류
- 각각 데이터 조작 언어(DML, Data Manipulation Language),
- 데이터 정의 언어(DDL, Data Definition Language),
- 데이터 제어 언어(DCL, Data Control Language).
- 이들 명령어는 데이터베이스의 구조, 내용 및 접근 권한을 조작하는 데 사용된다.
DML
- 데이터를 조작(선택, 삽입, 수정, 삭제)
- 구문이 사용되는 대상은 테이블의 행.
- 그러므로 DML을 사용하기 위해서는 꼭 그 이전에 테이블이 정의되어 있어야 한다.
- SELECT, INSERT, UPDATE, DELETE
- 트랜잭션이 발생하기도 함.
- 트랜잭션은 테이블의 데이터를 변경할 때, 실제 테이블에 완전히 적용하지 않고, 임시로 적용하는 것.
- 만약 실수가 있었을 경우에 임시로 적용시킨 것을 취소할 수 있게 해준다.
DDL
- 데이터 정의 언어.
- 데이터베이스, 테이블, 뷰, 인덱스 등의 데이터베이스 개체를 생성/삭제/변경하는 것.
- 자주 사용하는 DDL은 CREATE, DROP, ALTER
- 트랜잭션을 발생시키지 않는다.
- 그래서 ROLLBACK이나 COMMIT을 적용시킬 수가 없다.
- DDL문은 실행 즉시 MySQL에 적용된다.
DCL
- 데이터 제어 언어.
- 데이터베이스에 대한 접근 권한을 제어할 때 사용.
- GRANT : 데이터베이스 개체에 대한 접근 권한을 부여할 때 사용.
- REVOKE : 데이터베이스 개체에 대해 사용자 권한을 취소함.
기본 INSERT
기본 형식
INSERT [INTO] 테이블[(열1, 열2, ...)] VALUES (값1, 값2)
테이블 이름 다음에 나오는 열은 생략이 가능.
그런데 생략할 경우, VALUES 다음에 나오는 값들의 순서 및 개수가 테이블이 정의된 열 순서 및 개수와 동일해야 함.
CREATE TABLE testTbl1 (id int, userName char(3), age int);
INSERT INTO testtbl1 VALUES (1, '홍길동', 25);
INSERT INTO testTBL1(id, userName) VALUES (2, '설현');
INSERT INTO testTBL1(userName, age, id) VALUES ('하니', 26, 3);
SELECT * FROM testtbl1;
AUTO_INCREMENT : 자동으로 증가
- 속성이 이걸로 지정되어 있으면, INSERT에서는 해당 열이 없다고 생각하고 입력하면 된다.
- AUTO_INCREMENT에서는 자동으로 1부터 증가하는 값을 입력해 준다.
- AUTO_INCREMENT로 지정할 때는 꼭 PRIMARY KEY 또는 UNIQUE 키로 지정해 줘야 한다.
- 데이터 형은 숫자 형식만 사용할 수 있다.
- AUTO_INCREMENT로 지정된 열은 INSERT문에서 NULL 값을 입력하면 자동으로 값이 입력된다.
CREATE TABLE testTBL2
(id int AUTO_INCREMENT PRIMARY KEY, userName char(3), age int);
INSERT INTO testTbl2 VALUES(NULL, '지민', 25);
INSERT INTO testTBL2 VALUES(NULL, '유나', 22);
INSERT INTO testTBL2 VALUES(NULL, '유경', 21);
SELECT * FROM testTbl2;
SELECT last_insert_id(); -- 마지막 아이디 출력
AUTO_INCREMENT 값을 100부터 입력되도록 변경하고 싶다면 다음과 같이 변경
ALTER TABLE testTBL2 auto_increment = 100;
INSERT INTO testTBL2 VALUES (NULL, '찬미', 23);
SELECT * FROM testTBL2;
증가값을 지정하려면 @@auet_increment_increment 변수를 변경시켜야 한다.
ex. 초깃값을 1000으로 하고, 증가값는 3으로 놓기
ALTER TABLE testTBL3 AUTO_INCREMENT = 1000; -- 시작 위치
SET @@auto_increment_increment=3; -- 3씩 증가
INSERT INTO testTBL3 VALUES (NULL, '나연', 20);
INSERT INTO testTBL3 VALUES (NULL, '정연', 18);
INSERT INTO testTBL3 VALUES (NULL, '모모', 29);
SELECT * FROM testTBL3;
대량의 샘플 데이터 생성 => INSERT INTO... SELECT 구문
INSERT INTO ... SELECT 구문 사용.
이는 다른 테이블의 데이터를 가져와서 대량으로 입력하는 효과를 낸다.
CREATE TABLE testTBL4 (id int, Fname varchar(40), Lname varchar(50));
INSERT INTO testTBL4
SELECT emp_no, first_name, last_name FROM employees.employees;
CREATE TABLE testTBL5 (SELECT emp_no, first_name, last_name FROM employees.employees);
-- 테이블 정의까지 생략하고 싶을 때 이렇게 씀.
728x90
'Database > Mega-MySQL' 카테고리의 다른 글
Day04-3. MySQL 내장 함수 (0) | 2023.06.20 |
---|---|
Day04-1. UPDATE, DELETE FROM (0) | 2023.06.19 |
Day03-1. SQL 기본 - SELECT, 관계연산자, DISTINCT, LIMIT (0) | 2023.06.15 |
Day02. 트리거, 백업과 복원, 사용자 권한, 데이터 추출 (1) | 2023.06.15 |
Day01. MySQL 설치와 수업 쿼리문 (0) | 2023.06.15 |
Comments