Database/MySQL,MariaDB
-
오래전 토이프로젝트로 시작한 소스를 리팩토링하면서 암호화 기능을 추가해봤습니다. 소스는 여기에서 확인하실 수 있습니다. 무료로 사용이 가능한 MariaDB에서는 단/양방향의 암호화 기능을 제공합니다. 본문에서 사용된 암호화는 단방향으로 사용자 패스워드를 암호화할 때 사용되었습니다. 단방향 암호화 일반적으로 암호화는 평문을 암호문으로 바꿔주는 것을 말합니다. 단방향 암호화는 평문을 암호문으로 바꾸는 것만 가능한 암호화 기법입니다. 단방향 암호화는 해시 함수를 이용합니다. 해시 함수는 임의의 평문 데이터를 고정된 길이의 데이터로 반환해줍니다. 또 동일한 값이 입력되면 동일한 출력값을 보장합니다. (이 부분에 대한 위험성은 이 블로그에서 확인할 수 있었습니다) 해시 함수에는 대표적으로 MD5와 SHA가 있는데..
[MySQL,MariaDB]암호화, 복호화 2021. 7. 30. -
관계형 테이블은 행과 열로 이루어져 있습니다. 이번 글은 테이블의 행과 열의 위치를 바꾸는 피벗에 대한 포스팅입니다. 예제는 MariaDB(MySQL 가능)로 실습하였습니다. 오라클 11g부터는 피벗 기능을 자체적으로 제공하는데 거기에 대해서는 이후에 따로 포스팅할 예정입니다. 여기 피벗을 이용하려는 테이블 두 개가 있습니다. PM_CALENDAR 테이블에는 2021년도까지의 날짜 데이터가 입력되어 있습니다. DATE : DATE 타입의 날짜 데이터 DATECHAR : VARCHAR 타입의 날짜 데이터 PM_COMMUTE 테이블은 사람들의 출, 퇴근 기록이 담겨있습니다. 여기서 사용할 필드는 USERCD, WORKDAY, TODATE, FROMDATE 입니다. USERCD : 사람들의 고유번호 WORKD..
[MySQL,MariaDB]피벗(Pivot) 사용하기 2020. 5. 11. -
Oracle을 오래 써왔던 탓에 MariaDB로 뭘 하려고 하다보니까 문법의 차이나... 함수나... 적응이 쉽지는 않네요 ㅠㅠ 오늘은 MariaDB(+MySQL)에서 Outer join시 조건을 주는 법에 대한 포스팅을 준비했습니다. MariaDB 역시 Outer Join에 대한 개념은 Oracle과 다르지 않습니다. 다만 개인적으로 자주 사용하던 (+) 연산자가 되지 않아서 불편하긴 하네요.. 문제가 되는 쿼리 로그입니다. (참고로 PM_CALENDAR 라는 테이블에는 날짜 데이터들이 들어있고, PM_COMMUTE 라는 테이블에는 유저마다 날짜에 해당하는 출,퇴근 시간이 찍힌 데이터가 들어있습니다) 원하는 결과는 B테이블(PM_COMMUTE)에 대한 Null 처리였는데 어째서인지 Inner Join과..
[MySQL,MariaDB]Outer Join 조건 주기 2020. 4. 30. -
SQL 오류 (1093): Table 'PM_COMMUTE' is specified twice, both as a target for 'UPDATE' and as a separate source for data MariaDB(또는 MySQL)를 사용하다가 1093 에러와 마주친다면 서브쿼리 사용이 문제일 것입니다. 아래는 에러가 발생한 쿼리 로그입니다. UPDATE PM_COMMUTE SET FROMDATE = '2020.04.29 13:42:43' WHERE WORKDAY = ( SELECT MAX(WORKDAY) WORKDAY FROM PM_COMMUTE WHERE USERCD = 'admin' AND FIXYN = 'N' ) MariaDB는 Oracle과 달리 UPDATE 또는 DELETE 시에 서..
[MySQL,MariaDB]SQL 오류 (1093) 2020. 4. 29. -
현재 시간을 입력할 때 오라클에서는 SYSDATE를 입력하면 되지만 MySQL에서는 안됩니다. MySQL에서 현재 시간을 입력하는 방법은 두 가지가 있습니다. 1) 날짜가 들어갈 컬럼(BOARD_YMD)의 데이터 타입을 TIMESTAMP DEFAULT NOW()를 주고 INSERT 시 DEFAULT값을 입력하는 방법 CREATE TABLE BOARD( BOARD_NO INT NOT NULL AUTO_INCREMENT, BOARD_TYPE VARCHAR(20) NOT NULL, BOARD_TITLE VARCHAR(30), BOARD_CONTENT TEXT, BOARD_CNT INT DEFAULT 0, BOARD_USER VARCHAR(20) NOT NULL, BOARD_YMD TIMESTAMP DEFAUL..
[MySQL]현재 시간 입력 2018. 9. 12.