코드 그라데이션

Day03-3. SQL의 분류, INSERT 본문

Database/Mega-MySQL

Day03-3. SQL의 분류, INSERT

완벽한 장면 2023. 6. 18. 12:51

전체적인 설명

  • 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
Comments