1. Relational Database Management System
: 관계형 데이터베이스 관리 시스템
=> Oracle , mysql (가장 기본적인 db 시스템), my SQL,
: 표가 있고, 각 항목 별로 데이터가 정리되어있는 2차원 형태의 데이터베이스
2. Structured Query Language : 구조화 된 질의 언어
SQL을 이용해서 RDBMS에 저장된 데이터와 통신을 하게 된다.
ex) CRUD : 데이터를 create, read, update, delete 하는 등 데이터를 계속 서버와 통신하면서 데이터베이스를 구축해 갈 수 있다.
=> 각 데이터가 들어갈 schema이 다 정해져 있다. 따라서 Schema에 해당하는 데이터만 데이터베이스에 들어갈 수
수 있다.
3. NoSQL
: sql을 사용하지 않는 비관계형 데이터베이스 모델이다.
=> 굉장한 확장성을 가지고 있다. 많은 기업들이 noSQL로 전환하는 중
ex) MongoDB : 현재 웹사이트를 만들 때 사용해볼 database이다.
+) SQLite
: 로컬의 단일 파일 한개로 운영되는 데이터베이스0 언어.
=> 예전에 했던 MYSQL recap해볼겸 다시 짜봤다.
import sqlite3
conn=sqlite3.connect("test.db")
cur=conn.cursor()
#variable that helps communicate with db
query = """
CREATE TABLE IF NOT EXISTS board(
'idx' INTEGER PRIMARY KEY AUTOINCREMENT,
'writer' VARCHAR(100),
'title' VARCHAR(250),
'contents' TEXT)
"""
cur.execute(query)
query="""INSERT INTO board('writer','title','contents') VALUES ('홍길동','제목','내용')"""
cur.execute(query)
#commit을 통해 확정을 시켜야 한다. transaction을 이용.
query="SELECT * FROM board"
cur.execute(query)
rows=cur.fetchall()
for row in rows:
print(row)
query="DELETE FROM board WHERE idx=1"
cur.execute(query)
conn.commit()
# MongoDB
https://poiemaweb.com/mongdb-basics
=> no-sql 방식으로 이루어졌으며, 각 데이터들은 binary json 형태의 document들로 이루어져 있다.
#CREATE
import pymongo
m={ "이름":"홍길동",
"나이":30,
"거주지":"서울",
"키":179,
"몸무게":80,
"프로필사진":[
"a.jpg",
"b.jpg"
]
}
m2={
"이름":"홍길동",
"나이":30,
"학교":"inha",
"몸무게":80,
"프로필사진":[
"a.jpg",
"b.jpg"
]
}
# binary 형태의 document 형태로 각 데이터들이 들어간다 (binary 형태의 json형태)
# text 모드로 보면 json 형태처럼 보이기도 한다.
conn=pymongo.MongoClient("localhost",27017)
db= conn.test
#test라는 이름의 db 생성
col=db.members
# column이 생긴다.
col.insert(m2)
#col.insert(m1)
=> 각 schema를 정해줄 필요 없이 데이터들을 문서 형태로 아무렇게나 그냥 원하는 데이터를 넣어줄 수가 있다.
: Schema가 명시되어있지 않기 때문에 따로 error가 나지 않는다.
: 한 document의 size가 16MB를 넘겨서는 안된다. (사실 엄청난 양이기 때문에 16mb를 넘는 경우는 잘 없다.)
+) MongoDB 자체가 굉장히 메모리 의존적인 프로그램이라 메모리가 클수록 성능이 좋아진다.
=> Test 라는 DB 아래에 Table 역할을 하는 collection이 삽입되어있고, 그 안에 데이터들이 존재한다
#READ
+) 조건을 따로 주고 싶다면
results= col.find({ "학교" :"inha", "나이":30})
로 해당 조건에 맞는 데이터를 찾을 수 있다. (대신, And 연산으로, 둘다 만족하는 데이터가 나온다.)
+) OR 형태로 데이터를 읽고 싶다면
results=col.find({"$or":[{"이름":"홍길동"},{"학교":"inha"}]})
#cursor 에 있는 데이터를 한줄한줄 읽어와야 된다.
# or 연산이므로, 만족하는 조건이 한가지라도 있어도 해당하는 데이터가 모두 출력된다.
for r in results:
print(r)
results=col.find({"나이": {"$gt":30}})
#30보다 나이가 많은 데이터를 찾아서 출력한다.
# $gte는 greater & equal
results=col.find({"나이": {"$gt":30}, {"$lt":100}})
# $gt: 50, $lt :100 이렇게 하면 30보다 크고 100보다 작은 데이터가 출력될 것이다.
results=col.find({"나이": {"$gt":30}, {"$lt":100}}, {"_id":False, "이름":True})
#특정 필드만 언급하고 싶다면, 이름만 나오게 된다. 아이디는 기본값이라 늘 나오니까
#아이디 나오는게 싫으면 항상 false로 만들어줘야함.
results=col.find({"나이": {"$gt":30}, {"$lt":100}}, {"_id":False, "이름":True}).skip(1).limit(3)
#1번데이터는 skip하고 그 이후로 3개만 취해서 출력함
#skip(10).limit(10)=> 게시판 페이지 넘길 때 쓴다.
results=col.find({"나이": {"$gt":30}, {"$lt":100}}, {"_id":False, "이름":True}).sort(-1).skip(1).limit(3)
#sort 1이면 내림차순, sort -1이면 오름차순.
results=col.find_one({"이름":"홍길동})
#이름인 홍길동인 데이터를 딱 하나만 단수로 가져온다.
#UPDATE
import pymongo
conn=pymongo.MongoClient("localhost",27017)
db= conn.test
#test라는 이름이 있으면 접근, 없으면 새로 db 생성(오타 주의할것)
col=db.members
# collection이 생긴다.
#잘못된 예시
#col.update=({"이름":"홍길동"},{"이름":"박길동"})
#이름을 바꾸고 싶다고 특정 필드만 언급하면, 그 필드만 update되고 나머지 필드는 싹 사라진다
#따라서 전체적인 document를 다 update시켜버리는게 된다.
#따라서 특정한 field만 바꾸고 싶다면?
col.update({"이름":"홍길동"},{"$set":{"이름":"윤길동"}},upsert=True, multi=False)
#multi 값이 True면 조건에 해당하는 모든 데이터를 update한다.
#multi 값이 false면 하나만 update한다.
#Upsert 값을 넣으면 존재하지 않는 데이터는 insert가 된다.
col.update({"이름":"가제트"},{"$set":{"이름":"윤길동"}},upsert=True, multi=False)
#따라서 "이름":"가제트"가 존재하지 않아도, upsert를 추가하면 insert가 된다.
results= col.find({"이름":"윤길동"})
for r in results:
print(r)
#Delete
col.remove({"이름":"가제트"})
#가제트라는 이름을 가진 데이터가 remove된다.
col,remove({})
#아무것도 안넣으면 전체 db가 drop된다. 조건을 넣고 조심하자.
col.delete_one({"이름":"가제트"})
#하나만 삭제함
col.delete_many({"이름":"가제트"})
#이름이 가제트인 모든 데이터를 delete
col.update({"이름":"가제트"},{"$inc":{"몸무게":10})
#몸무게를 10 증가시킬 수도 있다.
'Web > Database' 카테고리의 다른 글
논리적 데이터베이스 모델링 (0) | 2022.02.23 |
---|---|
Amazon RDS 데이터베이스 구축(MySQL) (0) | 2022.02.22 |
ERD, 어떻게 설계하는 걸까? (2) | 2022.02.21 |
MySQL 정리 (0) | 2020.01.19 |