[MySQL] Day2

ITselfhiam
|2023. 9. 19. 16:16

전날 클라이언트 실행을 하였고 2일차에서 프로그램을 재기동 해당 테이블을 사용을 할려고 하면 use명령어를 사용하여 활성화를 해야한다.

1. word테이블 안에 데이터 확인

select * from word;

 

※ table안에 data 수정하기 

방법 1 : update 테이블명 set 필드명1 = 값1, 필드명2 = 값2 ... ;

방법 2 : update 테이블명 set 필드명1 = 값1, 필드명2 = 값2 ... where 조건절;

여기서 문제 모든 값을 2로 바꿀려고 하면 update word set lev = 2; 라고 선언을 하면 되는데, 오류가 발생한다 왜 그럴까?

정답 : update word set lev = 2 Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column.  To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.

한마디로 데이터의 안전을 위해 safe모드를 mysql workbench에서 걸어둔것이다.

해제 방법 : set sql_safe_updates = 0; # 일시적인 safe모드 해제 

workbench자체에서 푸는방법

MySQLWorkbench preferences에서 setting -> SQL Editor-> safeupdates 체크해제 

이건 영구적으로 해제를 하는것 프로그램 재기동이 필요함. mac기준으로 작성되었습니다.

 

2. table 안에 있는 point 값에 50을 더해주기

3. 아이디가 orange인 회원에 대해 우편번호는 12345, 주소1은 '서울시 서초구' , 주소2은 양재동, 주소3은 XX아파트 201동으로 업데이트할것

 

※ 데이터 삭제하기

delete from 테이블명; 

delete from 테이블명 where 조건절;

 

필자처럼 이렇게 나누어서 사용을 해도 되지만, 오타 및 줄바꿈으로 인하여 오류가 발생하지 않도록 한줄로 작성하는것을 권고함.

 

※  SQL 연산자
    1. 산술 연산자 : 덧셈, 뺄셈, 곱셈, 나눗셈 = +, -, *, /, mod(나머지 연산자), div(몫)
    2. 비교 연산자 : =(같다), <, >, >=, <=, <>(다르다)
    3. 대입 연산자 : =
    4. 논리 연산자 : and, or, not, xor
    5. 기타 연산자
    5-1. is : 양쪽의 피연산자가 모두 같으면 true, 아니면 false
    between A and B : 특정 값이 A보다는 크거나 같고 B보다는 작거나 같으면 true, 아니면 false
             in : 매개변수로 전달된 리스트에 값이 존재하면 true, 아니면 false
             like : 패턴으로 문자열을 검색하여 값이 존재하면 true, 아니면 false

 

별명주기


select 100 + 50 as 덧셈 연산; # 에러발생 따옴표를 사용하는이유는 띄어쓰기가 있을 수 있기 때문.

select 100 + 50 as 덧셈 연산 Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '연산' at line 1 0.00033 sec

결국 as(alias)를 사용을 할때 띄어쓰기가 포함되어 있으면 ''(작은따옴표)를 사용하고, 띄어쓰기 없이 간단하게 사용을 할것이면

그냥 as 원하는 값을 입력하면 된다.

 

null과 ''

 

조건절

select 필드명1, 필드명2, ... from 테이블명 where 조건절;

 

정렬

select 필드명1, 필드명2, ... from 테이블명 [where 조건절] order by 정렬할 필드명 [asc, desc];

limit : 몇개의 데이터를 가져온다.
    select 필드명1, 필드명2, ... from 테이블명 limit 가져올 로우의 갯수;
    select 필드명1, 필드명2, ... from 테이블명 limit 시작로우, 가져올 로우의 갯수;
    select 필드명1, 필드명2, ... from 테이블명 order by 정렬할 필드명 [asc, desc] limit 가져올 로우의 갯수;

그룹
    select 그룹을 맺을 컬럼 또는 집계함수 from 테이블명 group by 그룹을 맺을 필드명;
    select 그룹을 맺을 컬럼 또는 집계함수 from 테이블명 group by 그룹을 맺을 필드명 having 조건절;
    having은 그룹에 대한 조건을 줌.

 

프로필 테이블 생성하기

조인(join) : 관계성을 가지는 데이터들끼리 
    select 필드명1, 필드명2, ... from 테이블1 [inner, left, right] join 테이블2 on 테이블1.연결할필드 = 테이블2.연결할필드

데이터 정규화
    - 데이터 베이스를 설계할 때 중복을 최소화하는 것
    - 조직화되어 있지 않은 테이블과 관계들을 조직화된 테이블과 관계들로 나누는 것
    
    데이터 정규화가 필요한 경우
    - 데이터를 갱신(수정), 삽입, 삭제, 테이블을 수정할 때.. 원하지 않게 데이터가 삭제되거나 가공되는 일이 발생할 수 있음 -> '이상현상'
    - '이상현상'이 발생할 가능성이 있다면 정규화가 반드시 필요.

정규화의 종류
    1. 1NF(제 1정규화)
 - 테이블 안에 모든 값들은 단일 값이여야 한다.
     - 더 이상 쪼개질 수 없는 단위로 저장
    2. 2NF(제 2정규화)
     - 1NF를 만족하면서, 완전 함수 종속성을 가진 관계들로만 테이블 생성
     - 종속성들 중 종속 관계에 있는 열들끼리 테이블을 구분해 주는 것
     - 기본키에 속하지 않은 속성 모두가 기본키에 완전 함수 종속인 정규형
 - 함수의 종속성 : x값에 따라 y값이 결정되는 경우
3. 3NF(제 3정규화)
 - 2NF를 만족하면서, 키본키에 대해 이행적 함수 종속이 되지 않는 것을 의미
4. 비정규화
 - 정규형에 일치하게 되어 있는 테이블을 정규형을 지키지 않는 테이블로 변경
     - 테이블을 조회하는 용도로 사용하거나, 너무 데이터가 많이 나뉘어 성능이 저하된다면 비정규화를 하여 테이블을 다루는 것이 더 효율적일 수 있음
     - 어떤 작업을 수행하는지, 어떤 데이터를 사용하는지에 따라 적절한 정규화를 하는 것이 좋음

'Study > MySQL' 카테고리의 다른 글

[MySQL] MySQL 각종 명령어, 백업방법  (0) 2024.01.08
[MySQL] Day3  (0) 2023.09.20
[MySQL] Day1  (0) 2023.09.18
MAC mysql 설치방법  (0) 2023.09.18