ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQLite 11. UPDATE, DELETE
    SQL/Sqlite 2022. 1. 1. 14:04
    반응형

    UPDATE

    WHERE이 빠지면 모든 행이 업데이트된다. 

    업데이트 전

    UPDATE weights 
    SET weight=weight+5

    모든 선수의 체중을 5 증가시켰다. 

    업데이트 후

     

    UPDATE SET WHERE

    WHERE를 사용하자. 

    UPDATE players2 
    SET team='CWS', position=NULL
    WHERE id=1;
    SELECT * FROM players2

    id=1인 선수의 팀을 바꾸고 포지션을 지웠다. 

    NULL 을 사용하지 못하게 설정되어 있다면,
    문자열은 '', 정수형은 -1 또는 0 등을 미리 정해 사용하면 된다. 

     

    ROW 삭제: DELETE

    WHERE이 빠지면 모든 행이 삭제된다. 주의

    DELETE 
    FROM players2 
    WHERE id > 10

    테이블 자체를 지우는 것은 DROP TABLE 이다. 

     

    외래 키(Foreign Key)

    외래 키는 참조 무결성을 보장한다.
    참조 무결성이란 참조 관계가 빠진 데이터가 없다는 뜻이다. 

    선수 - 몸무게 테이블의 관계에서
    선수가 지워진다면 그 선수의 몸무게는 의미가 없는 데이터가 된다. 

    참조 무결하기 위해서는 
    선수가 지워질 때 몸무게도 같이 지워지게 하거나, 
    몸무게가 있다면 선수를 못 지우게 하는 등의 작업이 필요하다. 
    외래키 설정을 하면 이런 작업을 DBMS가 알아서 처리해 준다. 

    지울 때는 외래키 설정이 어떻게 되어 있는지도 확인해야 한다. 

    weights 테이블은 이런 구문으로 생성되어 있다. 

    CREATE TABLE "weights" (
    	"id"	INTEGER,
    	"date"	TEXT,
    	"weight"	INTEGER,
    	FOREIGN KEY("id") REFERENCES "players"("id") ON DELETE CASCADE
    )

    CASCADE는 종속이란 뜻이다. 
    players가 지워지면, 같은 id의 weight가 같이 지워진다. 

    DB Browser에서는 테이블 수정에서 화면을 늘리면 외래키를 설정할 수 있는 컬럼을 볼 수 있다. 
    더블 클릭하면 메뉴가 나옴. 

     

    실제 외래키 관계의 데이터를 하나 지워보자. 

    지우기 전의 weights 테이블

    player 테이블에서 id 120을 지워보겠다. 
    id 120은 2회의 체중 측정기록이 있다. 

    DELETE 
    FROM players 
    WHERE id=120;
    SELECT * FROM weights;

    2행이 삭제되고 1032개의 행을 반환한다. 

     

     

    반응형
Designed by Tistory.