SeSac (2021-08 ~ 2021-12)/MySQL 14

MySQL - 유용한 내장 함수들

숫자와 관련된 함수 sum : 더하기 avg : 평균 min : 최소값 max : 최대값 mod : 나머지 count : row수 세기 stddev : var_samp sin cos tan acos asin atan atan2 exp ln log log2 log10 ceil floor round abs : 절대값 반환 power sqrt : 제곱근 계산 mod(%) rand() bin: 2진수로 바꾸기 hex: 16진수로 바꾸기 oct: 8진수로 바꾸기 conv('EF',16,10) : 16진수를 10진수로 바꾸기 형변환 select CAST('2018-12-25 11:22:22.123' AS DATETIME) select CAST(1.577 AS Signed Integer) : 항상 반올림이 된다. C..

MySQL - SQL 한방에 정리하기 Part 2 - DML, TCL

DML(CRUD) -insert -select like in between distinct count(distinct col1) order by, rand() order by col1 is null ASC, col1 ASC limit a, limit a,b group by, having case when ~else ~end on duplicate key update... : unique한 키를 가진 컬럼을 duplicate 시킨다 join inner join outer join left outer join right outer join full outer join :mysql에서는 없기때문에 left outer join과 right outer join을 union걸어서 사용한다. cross join : ..

MySQL - SQL 한방에 정리하기 Part 1 - DCL, DDL

grant all privileges on database.* for 'username'@'%'; 가급적이면 %를 주지 않고 사용자의 ip만을 주어서 접속자를 제한하는것이 좋다. create table like : 기존테이블명의 구조만 가져온다 create table AS Select * from : 기존 테이블의 구조와 데이터까지 복사하지만 인덱스는 가져오지 않는다. 냔월일 : data(3B) 년월일시분초 : datatime(8B) 년월일시분초: timestamp(4B) 사이즈도 작고 글로벌서비스하기 좋아서 요즘은 타임스탬프를 쓴다 년:year(1B) @@를 붙이면 전역변수이다. write에 관련한건 주석처리를 해두는게 안전하다. (단축키로 실행되거나 하는경우가 있기 때문에) 그래서 주석처리를 해두고 ..

MySQL 11 - Cursor를 이용한 프로시저 작성

Cursor를 사용하려면 선언을 해줘야 한다. cursor는 일종의 변수이다 (type이 커서인) Declare => Declare Continue Handler => OPEN => Fetch => CLose Declare CURSOR FOR select... Declare Continue Handler For Not Fount SET := True; OPEN : LOOP Fetch into , ...; IF THEN LEAVE END IF LOOP ; CLOSE ; FETCH 를 하면 각각 가져올 컬럼을 담을 변수가 필요하다. 프로시져에서 디클레어가 항상 상위에 와야한다. 디클레어는 디클레어끼리 모아두어야 한다 커서가 돌다가 더이상 자료가 없으면(not found), SET해준다. 커서를 열고close..

MySQL 10 - Stored Function & Procedure

Stored Function : 펑션에 값을 주면 로직에따린 결과를 리턴해주는것 CREATE FUNCTION ( ) RETURNS BEGIN RETURN END view는 v_ trigger 는 tr , function은 f_로 이름을 많이 시작한다. return은 괄호를 써서 리턴을해야한다. (우선순위를 주는것) procedure는 stored procedure라고 관례적으로 sp_를 이름에 많이 준다. DROP Procedure IF EXISTS sp_; DELIMITER $$ CREATE Procedure ([IN | OUT | INOUT] , ...) BEGIN ... ... END $$ DELIMITER ; - in : 입력받는 파라미터 (무조건 써야함) - out : 내가 내보낼 파라미터 SE..

MySQL 09 - 뷰와 트리거 (View, Trigger, UNION, @rownum)

CREATE VIEW AS SELECT ... ; : 뷰를 생성한다. UPDATE set ...; : 뷰를 업데이트한다 (sum,avg, union all, distinct, group by가 들어간 view는 수정이 안된다) select * from information_schema.views where table_schema= : 해당스키마의 모든 뷰를 보여준다 -> 여기서 is updatable이 yes여야 수정이 가능하다. 뷰를 쓰는 이유 - 보안에 좋음 : (다른유저별 다른권한을 줄수 있기 떄문) - 단순하다 : 구조를 쉽게 보여준다. - 성능이 좋다 : 컴파일된 쿼리기 때문이다 (prepared statement) - 프로그래머에게 디테일을 주기 좋다 뷰는 거의 읽기 위주로 사용한다 (쓰기는 ..

MySQL 07 - 내장함수와 트랜잭션(Transaction)

데이터베이스들은 기본적으로 가지고있는 내장함수가 있다. sum(컬럼) : 합치기 avg(컬럼) : 평균값 min(컬럼) : 최소값 max(컬럼) : 최대값 mod(컬럼,나눌수) : 나머지값 count(컬럼) : 레코드 수 stdev : 표준편차 var_samp : 분산편차 cast("바꿀 자료" as 자료형) : 형변환 convert("바꿀자료, 자료형) : 형변환 // cast와 같음 str_to_date("시간문자열", "%Y-%m-%d"); : 문자열을 시간으로 변환 concat('문자열','문자열') : 문자열을 결합시킨다. concat_ws('구분자','문자열','문자열'...) : 구분자를넣어 문자열을 결합시킨다. group_concat(컬럼) : group by일 때 컬럼에 해당하는 모든 자..

MySQL 05 - 관계(Foreign Key)와 index의 개념

데이터베이스를 그릴땐 erd(Entity Relationship Diagram)을 그려야한다. FK는 참조가되는 테이블의 PK가 된다. fk를 거는 명령어 [Constraint] foreign key (col1) references tbl2(col2) ON [DELETE | UPDATE] [RESTRICT | CASECADE | SET NULL | NO ACTION | SET DEFAULT] ); idx-name은 적어주는것이 좋다. RESTRICT : 참조하고있는 테이블이 있으면 삭제불가 (default이다) CASECADE : 삭제하고있는 테이블을 참조하고있는 테이블의 행도 같이 지움 DEFAULT : 그 컬럼의 DEFAULT값으로 변하게 해라 UPDATE : 원하는 값으로 변하게 된다. defaul..