[mySQL] DDL , DML 데이터 조작, 정의 언어

merci·2022년 12월 2일
0

mySQl 기초

목록 보기
7/11

MySQL 에 입문을 하면서
이미 실존하는 데이터베이스에 조건을 줘 데이터를 출력하는 방법들을 먼저 배웠다.

이번에는 데이터를 관리하고 생성 삭제하는 기본적인 문법에 대해서 정리를 한다.



DDL (Data Definition Language)

데이터를 정의 하는 언어

CREATE

CREATE 를 이용하면 데이터베이스와 테이블을 생성할 수 있다.

CREATE TABLE NEW_TABLE (
  NO INT,
  NAME VARCHAR(10),
  BIRTH DATE
);
  • 구조는 CREATE TABLE <테이블 이름> ( 컬럼이름1 데이터타입, 컬럼이름2 데이터타입.....); 이다
    DESC new_table; 으로 구조를 확인해보면 아래와 같다.

AS 복제

  • 데이터 생성을 이용해서 데이터를 백업할 수 있다. ( 중요 )
    DEPT2 테이블의 구조와 데이터를 DEPT3 테이블을 생성하면서 복제한다.
    기존 테이블을 이용할때는 AS 를 이용한다.
  CREATE TABLE DEPT3 
  AS 
  SELECT * FROM DEPT2;


  • 원하는 컬럼만 복제할 수 있다.
  CREATE TABLE DEPT4 
  AS 
  SELECT DCODE,DNAME FROM DEPT2; 


  • 복제시 조건을 거짓으로 줘서 테이블의 구조만 복제할 수 있다.
  CREATE TABLE DEPT5 
  AS 
  SELECT * FROM DEPT2 WHERE 1=2;


  • 조건으로 특정 로우의 데이터만 복제할 수 있다.
  CREATE TABLE DEPT6 
  AS 
  SELECT DCODE,DNAME 
  FROM DEPT2 
  WHERE DCODE IN (1000,1001,1002);



ALTER

  • ALTER 를 이용하면 테이블 구조를 수정할 수 있다.
    ADD 는 컬럼을 추가
  ALTER TABLE DEPT6
 	 ADD(LOCATION VARCHAR(10));


  • 제약 조건까지 변경할 경우
  ALTER TABLE [테이블명] MODIFY COLUMN [칼럼명] [칼럼타입] [칼럼조건];
  • 데이터에 DEFAULT 값을 특정값으로 지정해서 구조를 수정할 수 있다.
  ALTER TABLE DEPT6
 	 ADD(LOCATION2 VARCHAR(10) DEFAULT 'SEOUL');


RENAME

  • 컬럼의 이름을 수정할 수 있다.
    RENAME COLUMN <컬럼> TO <변경할 이름>
  ALTER TABLE DEPT6					 
 	 RENAME COLUMN LOCATION2 TO LOC;


  • RENAME 만 이용하여 테이블의 이름을 수정할 수 있다.
    기존의 DEPT6 테이블은 DEPT7 테이블로 변경되었으므로 조회되지 않는다.
  RENAME TABLE DEPT6 TO DEPT7; 




MODIFY

  • MODIFY COLUMN 을 이용해서 컬럼의 데이터 타입을 변경할 수 있다.
 ALTER TABLE DEPT7
	 MODIFY COLUMN LOC VARCHAR(20); -- ( COLUMN을 명시 하지 않아도 됨 )



DROP

  • DROP 을 이용하면 테이블 구조에서 컬럼을 삭제할 수 있다.
  ALTER TABLE DEPT7
	  DROP COLUMN LOC; 


  • 해당 테이블을 완전히 삭제한다. 복구 불가능
  DROP TABLE DEPT7; 


TRUNCATE

  • 테이블의 구조는 유지하고 데이터만 삭제한다. 복구 불가능
   TRUNCATE TABLE DEPT7;





DML (Data Manipulation Language)

데이터를 조작하는 언어

INSERT

데이터를 추가한다

  • 구조는 INSERT INTO <테이블> (컬럼이름...) VALUES (데이터값...) ;
    입력하는 컬럼명의 수와 데이터의 수는 같아야한다.
  INSERT INTO DEPT2(DCODE, DNAME) VALUES (9000, 'TEMP1');


테이블의 구조를 보면 DCODE가 PRI KEY를 가지고 있으므로 중복되는 데이터는 허용하지 않는다.


  • 마지막 줄을 보면 컬럼을 언급하지 않고 데이터만 나열했다.
    이 경우는 컬럼의 순서대로 나열된 데이터가 입력된다.
    컬럼 언급을 하지 않을경우 데이터의 수는 반드시 컬럼의 수와 맞춰야 한다
  INSERT INTO DEPT2(DCODE, DNAME, PDEPT) VALUES (9001, 'TEMP2', 1006);  # 성공
  
  INSERT INTO DEPT2(DCODE, DNAME, PDEPT, AREA) 
  VALUES(9002, 'TEMP3', 1006 ,'TEMP AREA');    # 성공
  
  INSERT INTO DEPT2 VALUES (9003, 'TEMP3', 1006 ,'TEMP AREA');  # 성공
  
  -- INSERT INTO DEPT2 VALUES(9004, 'TEMP4', 1006); 	# 에러 ! 데이터의 수가 맞지 않다.
  -- INSERT INTO DEPT2(DCODE, DNAME) VALUES(9000);		# 에러 ! 데이터 수가 맞지 않다.




  • 데이터 입력시 데이터 타입에 맞춰야 한다
  CREATE TABLE T_MINUS (
    NO1 INT,
    NO2 DECIMAL(3),
    NO3 DECIMAL(3,2)
  );	# 테이블 생성
  
  INSERT INTO T_MINUS VALUES (1, 1, 1);
  INSERT INTO T_MINUS VALUES (1.1, 1.1, 1.1);
  INSERT INTO T_MINUS VALUES (-1.1, -1.1, -1.1);
  INSERT INTO T_MINUS VALUES (2.222, 2.222, 2.222);  # 소수점 두자리까지 출력가능 이후는 잘린다
 -- INSERT INTO T_MINUS VALUES (33.3, 33.3, 33.3);	# DECIMAL (3,2) 이므로 십의 자리는 들어갈 수 없다
  INSERT INTO T_MINUS VALUES (555, 555, 5);
 -- INSERT INTO T_MINUS VALUES (6666, 6666, 6);		# DECIMAL (3)은 백의 자리까지 받을 수 있다.
  INSERT INTO T_MINUS VALUES (6666, 666, 6);





UPDATE

UPDATE 이미 있는 데이터를 갱신할때 사용하는데 데이터를 덮어쓰므로 주의해야한다

  • DCODE = 1000 조건인 PDEPT 데이터가 7777로 업데이트
    구조는 UPDATE <테이블> SET <컬럼> = 변경할 값 ...
   UPDATE DEPT3 SET PDEPT = '7777'
   WHERE DCODE = 1000;


  • POSITION 이 'assistant professor' 인 BONUS 가 모두 200으로 업데이트
   UPDATE PROFESSOR SET BONUS = 200
   WHERE POSITION = 'assistant professor';






DELETE

DELETE 는 데이터를 레코드 단위로 삭제한다.
트랜잭션 로그를 남기므로 복구를 할 수 있다.

  • 9000번대를 DELETE 하면 해당 로우의 데이터가 삭제된다
    DELETE FROM <테이블> WHERE 조건
 SELECT * FROM DEPT2 ;   	 # 위에서 추가한 로우가 있다
    
 DELETE FROM DEPT2 			 # 테이블에서 해당조건인 데이터 모두 삭제
	 WHERE DCODE BETWEEN 9000 AND 9999;  



  • WHERE 조건이 없으면 테이블의 데이터가 모두 날아가니 주의해야한다.
    미리 백업을 해두었을 경우 DELETE로 삭제한 데이터를 복구할 수 있다.
 DELETE FROM DEPT4;





profile
작은것부터

0개의 댓글