Notice
Recent Posts
Recent Comments
Link
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

행복한 개구리

DataBase 수업내용 21.07.13. Database 기초 본문

Database/수업내용

DataBase 수업내용 21.07.13. Database 기초

HappyFrog 2021. 7. 13. 12:00

스키마를 만들어주자.

  • UFT8, UFT8 bin 설정을 해주어야 한글까지 나온다고 한다.

만약 스키마가 보이지 않는다면

왼쪽에 위치한 해당탭 하단을 확인해보자.

 

  • 그리고 테이블을 생성해주자.
  • 항목들의 이름과 항목들의 데이터 타입, 그리고 해당 항목의 옵션들을 설정해주자.
  • CURRENT_TIMESTAMP는 해당칸에 NOW()함수를 입력함으로써 적용 가능하다.
  • *주의 이후에 products테이블의 categories의 Unique설정은 해제했다.

 

그리고 테이블간의 연동을 위해 Foreign Key설정을 해주자.

  • Foreign Key의 이름을 정해준 뒤 어느 테이블을 참조할 것인지를 선택한다. 그 후에 참조할 항목까지 선택해주면 끝난다.
  • 만약 할당이 안된다 싶으면 아래사진을 참고하자.

 

  • Charset/Collation들이 모두 utf8 / utf8_bin으로 설정이 되어있나 확인하자.
  • 그리고 항목의 데이터타입이 연결할 항목과 완벽히 일치하는지 확인해주어야 한다.(VARCHAR같은 경우엔 글자 수까지 맞아야한다.)

이어서 EER Diagram을 사용해보자.

  • 툴바의 Database항목을 선택하여 Reverse Engineer를 선택하자.

  • 그리고 자신이 설정해둔 값에 맞게 기입한 뒤 넘어가자.

  • 다이어그램으로 만들어 보고싶은 스키마를 선택하자.
  • 그리고 이후로 나온 창들은 옵션 설정없이 모두 진행시켰다.

  • 완료하면 위와 같은 구조도가 다이어그램으로 형성되어 나온다.

 

이어서 CRUD를 해보자

CRUD는 CREATE, READ, UPDATE, DELETE의 약자이다.

 

USE exam11;	//자신이 사용할 스키마 이름

DESC members;	//사용할 테이블 이름

#CREATE	//데이터 생성
INSERT INTO members VALUES ("adb@gmail.com", "1234");

#READ	//데이터 읽기
SELECT * FROM members;

#UPDATE	//데이터 새로고침
UPDATE members SET email = "semo@gmail.com" WHERE email = "adb@gmail.com";

#DELETE	//데이터 지우기
DELETE FROM members WHERE email = "semo@gmail.com";

  • INSERT했을 때 READ하면 해당값을 불러온다.
  • 여기서 UPDATE로 이미 있는 이메일을 바꾸고 읽어보면 adb@gmail.com 이 semo@gmail.com으로 바뀌어있다.
  • 여기서 DELETE를 시킨다면 하나만 존재하던 데이터가 사라졌기 때문에 비어있는 상태로 출력된다.

 

이제 상품ID를 UUID로 변환하여 할당해주는 작업을 할 것이다.

 

  • * UUID란?
  • 왼쪽 설명과 같이 고유식별자라고 하는 것인데, 쉽게 말해 우리가 쓰는 아이디를 복잡한 문자열로 바꾸어서 새롭게 ID를 할당해주는 것을 말한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

delimiter //
create procedure test()
	begin
		select uuid();
	end//
delimiter ;

call test();
  • UUID를 생성하기위해서는 Procedure가 필요하다고 한다.
  • 따라서 해당 Procedure를 만드는 코드를 작성하자.
  • //는 $$등으로 바꾸어주어도 된다.
  • 시작과 끝을 명확히 표시하는 역할이라고한다.
DELIMITER //
CREATE PROCEDURE insert_product(category INT, name VARCHAR(45), price INT, amount INT)
	BEGIN
		DECLARE uuid VARCHAR(255);
		SET uuid = UUID();
		INSERT INTO products VALUES (uuid, category, name, price, amount);
	END//
DELIMITER ;

call insert_product(100, "게토레이", 1500, 5);

SELECT * FROM products;

  • 해당 코드를 이어 작성한다면 위와같이 uuid가 할당된 데이터가 생성되는 것을 볼 수 있다.
SELECT UUID()
AS UUID_VALUE;
DESC products;
INSERT INTO products VALUES(UUID(), 100, "팝콘", 5980, 5);

  • 해당 코드로 작성한다면 위에서 Procedure를 사용하여 만드는 것과 같은 결과가 나온다.
  • UUID_VALUE를 UUID()라는 함수에 할당하고 이 함수값을 값처럼 직접 할당한 모습이다.

그리고 이를 활용해 CRUD를 해보자.

 

UPDATE products SET price = 1800 where id = "5276bdf4-e3a7-11eb-a84c-b42e9996398e";

DELETE FROM products where id = "5276bdf4-e3a7-11eb-a84c-b42e9996398e";
  • 해당 id를 가진 데이터의 가격이 바뀌고 사라지는 것을 관찰할 수 있다.

 

* 참고로 UUID는 생성할 때마다 다른 ID가 생성된다.

 

이 후 UUID를 가진 테이블들을 갖고 CRUD를 해보자.

DESC purchases;
SELECT * FROM members;
INSERT INTO members VALUES("abc@gmail.com", "1234");
INSERT INTO purchases (id, member_email, product_id)
VALUES (1, 'abc@gmail.com', 'e9398f69-e3aa-11eb-a84c-b42e9996398e');

SELECT * FROM purchases;

UPDATE purchases SET date = now()
WHERE member_email = "abc@gmail.com";

DELETE FROM purchases WHERE member_email = "abc@gmail.com";

mysql field doesn't have a default value

  • 처음에 실행하니 다음과 같은 에러가 났다. 왜 기본값이 없다고 에러가 날까 해서 검색을 해보니,
  • id가 NN(Not Null)인데 id를 할당하지 않은채로 나머지값만 할당해줘서 나는 에러였다.
  • 따라서 purchases에서 id값도 함께 할당함으로써 해결했다.
  • 또는 id를 AI(Auto Increment)를 해주면 해결된다고 한다. => 자동으로 증가하는 수를 할당해주기 때문에.