Web

    [ Database - Intermediate ] - SQL trigger

    [ Database - Intermediate ] - SQL trigger

    SQL에서 Trigger 란 데이터에 변경이 생겼을 때에 DB에 insert, update, delete가 발생했을 떄 이것이 계기가 되어 자동적으로 실행되는 프로시저(procedure)를 의미하게 됩니다. 바로 예시를 들어서 살펴보도록 하겠습니다. 만약 사용자의 닉네임 변경 이력을 저장하는 트리거를 작성해 보고 싶다고 해 보겠습니다. 위와같은 상황이라고 할 때, USERS_LOG에 기존 닉네임을 저장해야 합니다. delimiter $$ CREATE TRIGGER log_user nickname_trigger BEFORE UPDATE ON users FOR EACH ROW BEGIN insert into users_log values(OLD.id, OLD.nickname, now()); END $$ de..

    [ Database - Intermediate ] - stored procedure

    [ Database - Intermediate ] - stored procedure

    Stored procedure 이는 사용자가 정의한 프로시저입니다. 그리고 RDBMS에 저장되고 사용되는 프로시저로서 구체적인 하나의 태스크(task)를 수행합니다. 바로 stored procedure의 예시를 한번 간단히 살펴보겠습니다. 아래는 두 정수의 곱셈 결과를 가져오는 프로시저를 작성해 본 결과입니다. delimiter $$ CREATE PROCEDURE product(IN a int, IN b int, OUT result int) BEGIN SET result = a * b; END $$ delimiter ; 이제 이를 실행해보면 call product(5, 7, @result); select @result; # 35 위와같은 결과가 나오게 됩니다. 여게에서의 특징은 IN 파라미터를 통해 인자..

    [ Database - Intermediate ] - stored function

    [ Database - Intermediate ] - stored function

    Stored function stored function이란 사용자가 정의한 함수를 말합니다. 즉 DBMS에서 저장되고 사용되는 함수라는 것이죠. 이는 SQL의 select, insert, update, delete statement에서 사용될 수 있습니다. 바로 예시로 보겠습니다. 만약 임직원의 ID를 열자리 정수로 랜덤하게 발급하고 싶다면 어떻게 해야할까요? ( iD의 맨 앞자리는 1로 고정 delimiter $$ CREATE FUNCTION id_generator() RETURNS int NO SQL BEGIN RETURN (1000000000 + float(rand() * 1000000000)); END $$ delimiter ; 바로 이렇게 하면 되는데, delimiter $$ 는 ";" 이걸 ..

    [ DataBase - Basic ] - three-valued logic, join, aggregating

    [ DataBase - Basic ] - three-valued logic, join, aggregating

    SQL에서 NULL의 의미 SQL에서 NULL은 unknown, unavailable or withheld, not applicable이라는 3가지 의미를 가지게 됩니다. 예를 들어 진짜로 모를 수도, 민감한 정보여서 숨긴걸 수도, 호환이 되지 않는 정보일 수도 있는 것이라는 겁니다. 아래의 예시를 보겠습니다. 만약 14, 15번의 birth_date가 모두 NULL인데, 생일이 같다고 판단할 수는 없을 겁니다. 그래서 실제로 NULL과 비교할 때는 "="을 사용하면 안되고 "IS NULL" 이렇게 비교해 주어야 합니다. NULL과 three-valued logic 기본적으로 위 그림림에서 birth_date = "1920-02-10" 이렇게 하게되면 NULL은 false일까요?. SQL에서 NULL과 ..