[패스트캠퍼스python] 테이블 데이터의 수정 및 삭제

파이썬 인강 : 테이블 데이터의 수정 및 삭제

데이터베이스 다루기의 기본 명령어 CRUD를 알아야한다

  • C : Create
  • R : Retrieve 조회
  • U : Update 수정
  • D : Delete

1. 데이터베이스 사용 기본 3가지 명령어

데이터베이스를 사용할때 기본이 되는 3가지 명령어가 있다

1
2
3
4
5
6
7
8
# 1. SQLITE 불러오기
import sqlite3

# 2. DB생성(파일)
conn = sqlite3.connect('C:/Users/ratia/Documents/코딩/Fastcampus Python/Python/db/database.db')

# 3. Cursor연결
c = conn.cursor()

무엇을 하든지 위의 3가지는 기본으로 깔고 시작해야한다

2. 데이터 수정

데이터 수정 명령어에는 크게 3가지가 있다
다양한 방법으로 1번로우의 username을 kim에서 seo로 바꾸어보자

1
2
3
4
5
6
7
8
9
10
11
# 1. 데이터 수정1
c.execute("UPDATE users SET username = ? WHERE id = ?", ('seo', 1))
conn.commit()

# 2. 데이터 수정2 : 딕셔너리형태로 수정
c.execute("UPDATE users SET username = :name WHERE id = :id", {"name": 'seo', 'id': 1})
conn.commit()

# 3. 데이터 수정3 : 스트링포맷로 수정
c.execute("UPDATE users SET username = '%s' WHERE id = '%s'" % ('seo', 1))
conn.commit()

3. DB Browser for SQLite를 이용한 데이터 수정

DB Browser for SQLite를 이용해서 손쉽게 데이터를 수정할수도있다
아래 이미지에서 1번 로우의 username을 seo에서 so로 바꾸어보자

  1. 먼저 데이터보기탭에서 username을 더블클릭한 뒤 오른편 인풋창에 so로 바꿔준 후 적용을 클릭한다

  1. 까먹지말고 꼭 SQL실행탭에서 commit을 입력 후 run버튼을 누른다

  2. 아래 터미널에 질의가 성공적으로 실행되었다는 안내메세지가 나타나면 끝!

  1. 수정이 잘되었는지 확인을 위해 아래 명령어를 출력하면 수정이 잘되었음을 확인할 수 있다
1
2
3
4
5
6
7
# 1. 수정한 로우만 확인
c.execute("SELECT * FROM users WHERE id= :Id", {"Id": 1})
print('수정 잘 되었는 감?', c.fetchone())

# 2. 수정한 로우포함 전체 데이터확인
for user in c.execute('SELECT * FROM users'):
print(user)

4. 데이터 삭제

데이터 삭제에도 다양한 방법이 있다

  1. 한 줄 데이터삭제 방법
    먼저 한줄데이터를 삭제해보자
    다음 세가지는 2번째 줄 전체를 삭제하는 명령어이다
1
2
3
4
5
6
7
8
9
10
11
# 1. Row Delete1 #튜플형식
c.execute("DELETE FROM users WHERE id = ?", (2,))
conn.commit()

# 2. Row Delete2 #딕셔너리형식
c.execute("DELETE FROM users WHERE id = :id", {'id': 2})
conn.commit()

# 3. Row Delete3 #스트링포맷
c.execute("DELETE FROM users WHERE id = '%s'" % 2)
conn.commit()
  1. 테이블 전체 데이터 삭제
    이번에는 테이블 전체를 삭제해보자
    간단한 명령어지만 위험하니… 신중히 사용하자 ㅋㅋㅋㅋㅋ
1
print("users db deleted : ", conn.execute("delete from users").rowcount, "rows")

[ITWILL : JAVA]Method, 변수와 상수, 배열 Array, new키워드

ITWILL학원 : 4강 JAVA BY 윤미영강사

1. Method

괄호가 있으면 다 메서드라고 부른다
매서드는 항상 Class라는 주인이 있어야 한다.

다른 사람이 만들어 놓은 매서드를 사용할 수 있다. = 라이브러리라고 부른다

예시

  • main() : 메인매서드
  • println() : OutputStream이라는 라이브러리안에 정의되어있는 매서드
  • Scanner sc = new Scanner(System.in) sc.next(); InputStream 라이브러리에 정의되어 있는 next()매서드

2. 변수와 상수

  1. 변수
    변하는 값.
    값을 저장할 수 있는 메모리 위치.
    변수를 사용하기위해서는 항상 변수선언을 데이터타입과 함께 먼저 해줘야한다.

  2. 상수
    변하지 않는 하나의 값
    앞에 final이 붙는다

  • 예시 PI : 3.141592…
  • 사용법 : final double PI = 3.141592;

3. 배열 Array

배열이란 쉽게말해 여러개의 변수를 한꺼번에 선언하는 것이다
변수를 선언한다는 것은 메모리에 a변수가 생성이 된다는 의미이다.
배열에서는 변수갯수를 선언할 수 있다 -> int [] ar = new int[10]는 메모리에 10개의 정수 변수 생성된다는 의미이다

여기서 주의할 점은 ar1의 데이터타입은 int가 아님을 명심하자!
int[]의미는 int를 관리한느 배열타입이지 int타입이 아니다.
ar1의 데이터타입은 기본형에 포함되지않는 참조형의 데이터타입이다.

배열객체를 생성하기 위해서는 new키워드와 함께 어떤 데이터를 몇개나 저장할지에 대한 정보가 필요하다.
그렇다면 new키워드란 무엇일까?
아래 잘 설명한 블로그가 있어서 가져왔다.
참고링크 : 자바 변수들의 메모리 구조,new 키워드

배열변수선언에는 두가지 방법이 있다

3-1. 첫번째 배열선언 방법

배열생성과 배열갯수만 선언하는 방법이다
int [] ar1 = new int[3]로 배열과 배열갯수를 한꺼번에 선언. 초기화는 안됨!

1
2
3
4
5
6
7
8
9
10
11
12
13
int [] ar1;  //배열생성 : 메모리에 a변수 생성

ar1 = new int[3]; //배열갯수선언. 메모리에 3개의 정수 변수 생성. 값을 넣어주지않기때문에 초기화는 아니다

// 1번과 2번을 합쳐서 한줄로 많이 쓴다
int [] ar1 = new int[3]; // 초기화하지 않은 배열은 기본적으로 0의 값을 가진다
ar1[0] = 0;
ar1[1] = 0;
ar1[2] = 0;

for(int i=0; i<ar1.length; i++){
System.out.print(ar1[i]);
} //000

데이터형마다 기본값이 다르다
기본데이터형이 아닌 참조데이터형인 경우 기본값이 다르다

  • 기본데이터형의 기본값은 데이터형에 따라 다르다
    • int 는 0
    • double은 0
    • char는 ‘’(빈칸)
1
2
3
4
char [] chs = new char[2];
for (int i=0; i<chs.length; i++){
System.out.println(chs[i]);
} //00 - 유니코드 -> ''''(빈칸2개)
  • 참조데이터형의 기본값은 null (자바언어의 예약어이고 실제 값이 없다는 의미이다)
    • string은 null
  1. String형
1
2
3
4
String [] str = new String[3];
for (int i=0; i<str.length; i++){
System.out.print(str[i]);
} // nullnullnull
  1. 참조형
    기본적으로 같은 타입을 한 배열에 넣을 수 있다.
1
2
3
4
5
Person[] p = {new Person, new Person};

SpiderMan[] sp = {new SpiderMan, new SpiderMan};

AquaMan[] aq = {new AquaMan, new AquaMan};

타입이 다른 참조형데이터를 하나의 배열에 넣을 순 없을까?
다형성을 이용하면 가능하다.
상속관계인 경우에만 타입이 다른 참조형데이터를 하나의 배열에 묶을 수 있다.

1
2
3
4
5
6
Person[] p = {new Person. new Person}

Dobject d = new Dobject[3];
d[0] = new Line();
d[1] = new Circle();
d[2] = new Reat();

3-2. 두번째 배열선언 방법

배열생성과 초기화를 한꺼번에 선언하는 방법이다

int [] ar2 = {10, 20, 30}

여기서는 new int[5]를 하지않아도 된다 왜냐면 위의 코드 자체에 변수갯수선언이 포함되어있다
이 방법은 테스트용으로 주로 사용할뿐 실무는 new int[]형태로 사용한다

1
2
3
4
5
int [] ar2 = {10, 20, 30}; //배열생성과 초기화 한꺼번에!

for(int j=0; j<ar2.length; j++){
System.out.println(ar2[j]);
}
  1. 위의 두 방법의 차이점
    일반적으로는 new int[]형태를 더 많이 쓰인다
    왜냐하면 보통 다른 파일이나 데이터베이스의 내용을 가져오기 때문에 변수갯수가 정해져있다.
    배열을 사용하려면 항상 크기를 미리 알아야한다.
    만약 배열의 크기를 모른다면 쓸 수 있는 가장 큰 수를 적어주면되지만 대신 메모리를 많이 잡아먹는다.
    그래서 사용하는 것이 Collection(컬렉션)이다
  • Collection 컬렉션 :
    • 참조형데이터형태
    • 배열과 같은 역할을 하지만 크기를 모를때 사용
    • 정적 메모리 할당이 아닌 동적 메모리 할당이 되어서 필요한 만큼 공간을 계속 추가할수있다
    • 컬렉션참고링크

[패스트캠퍼스python] 데이터베이스 연동(SQLite)

파이썬 인강 : 데이터베이스 연동(SQLite)

1. 커서의 위치

데이터베이스는 커서의 위치가 중요하다
데이터를 불러오고 난 다음에 커서는 해당 데이터 뒤에 위치하기때문이다

1
2
3
4
5
6
7
8
# 1개 로우 선택
print('One -> \n', c.fetchone())

# 지정 로우 선택 : size위의 숫자로 로우 갯수를 선택
print('Three -> \n', c.fetchmany(size=3))

# 전체 로우 선택
print('All -> \n', c.fetchall())

위의 명령어를 활용한 예시는 아래 이미지와 같다

터미널에서 볼 수 있듯이 1개 로우 명령어 뒤라서 커서는 1번 로우를 지난 2번로우 앞에 있다
그리고 size=3인 로우를 출력하니 2,3,4번 로우가 터미널에 출력되었음을 알 수 있다

위의 상태에서 전체 로우 print(‘All -> \n’, c.fetchall()) 명령어를 입력하면 어떻게 될까?
커서는 지금 4번로우 뒤에 위치해있기때문에 마지막 로우인 5번 데이터만 출력된다

만약 위의 상태에서 print(‘All -> \n’, c.fetchall())를 한번 더 호출하면 어떻게 될까?
커서의 위치는 마지막 로우인 5번 뒤에 있다. 따라서 호출해도 [] 빈리스트만 터미널에 출력된다.

그렇다면 처음 1번 로우를 호출하고 싶을때는 어떻게 할 수 있을까?
바로 순회하면 된다

2. 순회

순회에는 3가지방법이 있다.

  1. 순회 : 변수선언 후 for in 반복문 사용
    데이터조회 명령어 c.execute(‘SELECT * FROM users’) 뒤에 실행해야 출력된다

    1
    2
    3
    rows = c.fetchall()
    for row in rows:
    print('retrieve1 >', row) # 조회 없음
  2. 순회 : 변수선언 없이 for in 반복문 바로 사용
    데이터조회 명령어 c.execute(‘SELECT * FROM users’) 뒤에 실행해야 출력된다
    간편하기때문에 제일많이 사용된다

    1
    2
    for row in c.fetchall():
    print('retrieve2 >', row) # 조회 없음
  3. 순회
    execute(“SELECT * FROM users)는 users에 있는 전체 데이터를 조회하는 명령어이다 따라서 fetchall() 명령어와 동일한 결과값을 가진다.
    데이터조회 명령어 c.execute(‘SELECT * FROM users’) 까지 포함된 명령어로 데이터조회명령어가 따로 필요없다
    코드가 길어져서 가독성이 떨어지는 지는 단점이 있다.
    “ORDER BY id desc” 명령어를 넣어주면 역순출력이 된다

    1
    2
    for row in c.execute("SELECT * FROM users ORDER BY id desc"):
    print('retrieve3 > ', row)

순회1번과 순회2번은 함께 쓰일수없기때문에
순회2번과 순회3번의 출력값을 아래 이미지와 같다

3. WHERE Retrieve

6가지 방법이 있고 핵심이므로 꼭 다 알고 있어야한다.

  1. WHERE Retrieve1
    튜플형태로 3번로우인 Lee를 출력
    fetchone()에서 3번 로우 하나만 불러왔기때문에 그 다음 명령어로 fetchall()로 전체를 불러와도 [] 빈 리스트만 출력된다

    1
    2
    3
    4
    param1 = (3,) 
    c.execute('SELECT * FROM users WHERE id=?', param1)
    print('param1', c.fetchone())
    print('param1', c.fetchall())
  2. WHERE Retrieve2
    튜플형태로 1번로우인 Kim을 출력
    %s :문자열형, %d:정수형, %f: 실수형
    fetchone()에서 1번 로우 하나만 불러왔기때문에 그 다음 명령어로 fetchall()로 전체를 불러와도 [] 빈 리스트만 출력된다

    1
    2
    3
    4
    param2 = 1
    c.execute("SELECT * FROM users WHERE id='%s'" % param2)
    print('param2', c.fetchone())
    print('param2', c.fetchall())
  3. WHERE Retrieve3
    이번엔 딕셔너리형태로 1번 로우출력
    id= 뒤에 :Id를 넣어준뒤 컴마찍고 딕셔너리형태로 {“Id”: 1} 첫번째로우를 호출하면 된다

    1
    2
    3
    c.execute("SELECT * FROM users WHERE id= :Id", {"Id": 1})
    print('param3', c.fetchone())
    print('param3', c.fetchall())
  4. WHERE Retrieve4
    리스트형태로 파라미터 2개를 받아서 1번로우와 4번로우 출력
    파라미터 여러가지를 가져오려면 IN(?,?)로 넣으면 된다
    이젠 한개가 아니니까 fetchone()은 쓸 수 없고 fetchall()로 출력하면 된다

    1
    2
    3
    param4 = (1, 4)
    c.execute('SELECT * FROM users WHERE id IN(?,?)', param4)
    print('param4', c.fetchall())
  5. WHERE Retrieve5
    위와 똑같은 결과값이지만 다르게 표현할 수 있다 물음표대신 정수값($d)을 넣어주면 된다
    간단하기때문에 많이 사용한다

    1
    2
    c.execute("SELECT * FROM users WHERE id In('%d','%d')" % (1, 4))
    print('param5', c.fetchall())
  6. WHERE Retrieve6
    딕셔너리형태로 1번과 4번로우 출력
    OR 사용

    1
    2
    c.execute("SELECT * FROM users WHERE id= :id1 OR id= :id2", {"id1": 1, "id2": 4})
    print('param6', c.fetchall())

지금까지 id를 이용했지만 username, date등을 이용해서도 출력할수있다

4. Dump 출력

데이터베이스 백업 시 중요하다
아래 명령어를 실행하면 새로운 dump.sql이라는 파일이 형성되고 그 안에 작성한 데이터테이블이 백업된다.
이를 활용하여 sql에 붙여넣으면 다른 컴퓨터나 환경에서도 데이터사용가능하다
실무에서 흔히 ‘덤프떠와’ 라고 말한다.

with문을 사용하면 자동으로 close()를 해줘서 편리하다

  • with open() as f: 를 실행했으므로 f.close()가 자동으로 되었고
  • with conn: 을 실행했으므로 conn.close()가 자동으로 되었다
1
2
3
4
5
with conn: 
with open('본인이 원하는 경로/dump.sql', 'w') as f:
for line in conn.iterdump():
f.write('%s\n' % line)
print('Dump Print Complete.')

위의 코드를 실행시키면 출력값은 아래 이미지와 같다.

[패스트캠퍼스python] 외부파일 CSV, 엑셀 읽기 및 쓰기

파이썬 인강 : 외부파일 CSV, 엑셀 읽기 및 쓰기

1. CSV 읽기, 쓰기

위의 예제를 차근차근 보자
with open(작성한 파일을 저장할장소/저장할 파일명, ‘w’(작성한다는는 의미), newline=’’) as f:

  1. newline=’’
    이 의미는 이 부분이 없으면 한 줄씩 띄어쓰기로 for문을 순회하면서 데이터가 자동저장된다
    하지만 데이터 양이 많을수록 용량도 커지고 쓸데없이 불편할 수 있다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    1,2,3

    4,5,6

    7,8,9,

    10,11,12

    13,14,15

    16,17,18
    그래서 ‘’빈칸을 넣어서 띄어쓰기를 없애는 것이다
    newline=’’을 적용하면 아래와 같이 결과값이 출력된다

  1. writerow()와 writerows()의 차이점
  • writerow()는 한줄씩 띄어쓰기하여 입력된다 -> for문을 썼기에 순회하면서 전체 내용이 출력되었다.
  • writerows() 한줄씩이 아닌 전체데이터가 입력된다.(for문 반복없이 한번에 입력)

한줄씩 순회하면서 입력 방법(writerow)와 한꺼번에 전체데이터를 입력하는 방법(writerows)은 각각의 장점이 있다
예시로 회원가입목록에서 1950년생이하는 빼고 데이터를 출력하고싶을때 if조건문으로 필터링을 걸어줘서 writerow이 유용하게 쓰인다

2. 엑셀 쓰기 읽기

엑셀을 처리하는 오픈소스 : openpyxl, xlsxwriter, xlrd, xlwt, xlutils
여러가지 방법이 있지만 pandas를 가장 많이 사용한다
그 이유는 pandas는 최다사용오픈소스인 openpyxl, 랭킹 1위인 xlrd를 내부적으로 만능으로 사용할 수 있기때문이다

pandas를 이용하기 위해서는 아래 3가지를 다운로드해줘야한다
1. pip install xlrd
2. pip install openpyxl
3. pip install pandas


파이썬 인강 : 데이터베이스 연동(SQLite)

SQLite는 기본적으로 설치가 되어있다. 따라서 따로 설치할 필요없이 바로 import하면 된다

1. 테이블 생성 및 삽입

import datetime
import sqlite3

2. 삽입 날짜 생성

많이 쓰니까 꼭 알기

1
2
now = datetime.datetime.now()
print('now', now)

보기 불편하니까 포맷을 만들면 익숙한 시간형식으로 나타낼수있다

1
2
nowDatetime = now.strftime('%Y-%m-%d %H:%M:%S')
print('nowDatetime', nowDatetime)

3. DB생성 & Autocommit 그리고 커밋

본인 DB 파일 경로로 설정해주면된다
isolation_level=None 을 넣었을 경우 자동으로 커밋 반영(Auto Commit)해준다.
설정하지 않았다면 수정 후 conn.commit() 명령어를 입력해야지만 반영된다

1
conn = sqlite3.connect('본인DB파일경로/database.db', isolation_level=None)

4. Cursor연결

1
2
c = conn.cursor()
print('Cursor Type : ', type(c))

5. 테이블 생성

데이블에서 쓰일 수 있는 Datatype에는 총 5가지가 있다

  • TEXT
  • NUMERIC
  • INTEGER
  • REAL
  • BLOB
1
2
3
c.execute(
"CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, username text, email text, phone text, website text, regdate text)")
#AUTOINCREMENT

6. 데이터 삽입

삽입에는 크게 두가지 방식이 있다

  1. 첫번째방법
    ? 를 넣는 이유는 위에서 만들었던 데이터(“nowDatetime,”)를 넣게되면 스트링형식으로 들어가기때문에 ?를 주고 뒤에 매개변수로 튜플형태로 입력한다
1
c.execute("INSERT INTO users VALUES (1 ,'Kim','Kim@naver.com', '010-0000-0000', 'Kim.com', ?)", (nowDatetime,))
  1. 두번째 방법
    ?의 갯수와 삽입할데이터의 갯수를 순서대로 일치시켜줘주면된다
1
c.execute("INSERT INTO users(id, username, email, phone, website, regdate) VALUES (?, ?, ?, ?, ?, ?)", (2, 'Park', 'Park@naver.com', '010-1111-1111', 'Park.com', nowDatetime))

7. Many 삽입(튜플, 리스트형태를 삽입가능)

가장 중요한 부분이다!
Many는 이름 그대로 대용량 데이터를 삽입하는 방법으로 튜플이나 리스트형태를 삽입가능하다

1
2
3
4
5
6
7
userList = (
(3, 'Lee', 'Lee@naver.com', '010-2222-2222', 'Lee.com', nowDatetime),
(4, 'Cho', 'Cho@naver.com', '010-3333-3333', 'Cho.com', nowDatetime),
(5, 'Yoo', 'Yoo@naver.com', '010-4444-4444', 'Yoo.com', nowDatetime)
)

c.executemany("INSERT INTO users(id, username, email, phone, website, regdate) VALUES (?, ?, ?, ?, ?, ?)", userList)

웹상에서 입력받은 데이터를 sqlite를 통해서 장고의 경우, orm을 통해서 대용량데이터를 입력할 수 있다

8.테이블 데이터 삭제

지우는 명령어는 conn.execute(“delete from users”)지만 몇개의 행을 지웠는지까지 확인할 수 있는 아래 명령어를 쓰는 것이 더 좋다

1
print("users db deleted : ", conn.execute("delete from users").rowcount, "rows")

9. 롤백

되돌리기를 뜻하며 커밋한 걸 되돌리는 것이다.

1
conn.rollback()

10. 접속 해제

DB를 다 사용했을때는 꼭 접속 해제 명령어를 입력해줘야한다.

1
conn.close()
HTML 목록 태그, 정의태그, 글자관련태그

HTML 목록 태그, 정의태그, 글자관련태그

목록 태그

HTML 목록 종류 3가지

-<ol>태그 : Ordered List 순서 있는 목록
-<ul>태그 : Unordered List 순서 없는 목록
-<li>태그 : 정의 목록

목록을 <ol>태그로 만들든 <ul>태그만들든간에 <li>태그는 항목을 나타내므로 모든 곳에 필수로 들어가야한다

1
2
3
4
5
6
7
8
9
10
11
12
<ol>
<li></li>
<li></li>
<li></li>
<li></li>
</ol>
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>

목록태그 앞의 모양 바꾸기

  • ol태그 : 1/a/A/i/I
    ol태그 전체 비교
  • ul태그 : disc/circle/square/non
    ul태크 전체 비교




정의 태그

<dl>태그<dt>태그 <dd>태그가 세트이다

<dt>태그 는 정의내리는 대상
<dd>태그 는 정의 내용

사실 잘 사용하지 않는 태그지만 기억해두면 필요할때 요긴하게 쓸 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<h2> 자신을 4가지 관점으로 정의</h2>
<dl>
<dt>E</dt>
<dd>외향적 : 에너지가 밖으로 흐르며 사람을 만나는 것을 좋아하고 사람을 만남으로써 에너지를 얻는다.<br>
반대성향으로는 I 내향적이 있다.
</dd>
<dt>N</dt>
<dd>직관적 : 숲을 보려는 경향이 있고 아이디어나 육감에 의존하며 주의 초점은 미래와 가능성이다. 따라서 미래지향적으로 새로운 시도를 하는 것을 좋아하며 가능성과 의미를 추구하고 변화와 다양성을 좋아한다<br>
반대성향으로는 S 감각형이 있다. 이는 나무를 보려는 경향으로 실재의 경험, 오감에 주의초점이 있어 현실 수용과 관례를 따르는 결향이 있다.
</dd>
<dt>F</dt>
<dd>감정형 : 주관적 판단에 의존하며 주된 관심주제는 사람, 관계이다<br>
반대성향은 T 사고형이있으며 객관적 판단에 의존하고 주된 관심주제는 사실과 진실이다.
</dd>
<dt>J</dt>
<dd>판단형 : 정리정돈과 계획성이 있다 뚜렷한 기준과 자기의사가 있으며 신속한 결론을 내리고 분명한 목적의식이 있다.<br>
반대성향으로는 P 인식형이 있고 상황에 맞추는 개방성과 목적과 방향의 변화가 상대적으로 쉽다.
</dd>
</dl>
</dl>




글자 관련 태그

1
2
3
4
5
6
7
8
small tag : <small>Make font size smaller </small>

sup tag : <sup>supppp 윗첨자</sup>(ex)300m<sup>2</sup>의 땅이 있었으면 좋겠다

sub tag : <sub>subbbb 아래첨자</sub>
(ex)내가 아는 원소기호는 H<sub>2</sub>O

mark tag : <mark>형광펜효과</mark>
DDL vs DML vs DCL

DDL vs DML vs DCL

SQL 명령어

관계형 데이터베이스 작동을 위해 사용하는 표준언어이고 모든 프로그램 및 유저가 데이터베이스의 데이터를 엑세스학 위해 사용하는 일련의 명령문이다.

Read More
데이터베이스기초활용

데이터베이스기초활용

데이터베이스 용어정리 (P63)

  1. 개체 = 엔티티(Entity) = 유무형의 객체
    테이블이라는 개체를 사용해서 DB에 데이터를 분류해서 저장해야한다.=> 데이터베이스관리자의 역할이 아닌 개발자의 역할이다
    즉 데이터 모델링과정을 잘해야 좋은 개발자이다.

Read More