DB와 관련된 함수들

1)   $db_conn = mysqli_connect("127.0.0.1", "사용자 이름", "비밀번호"," DB명");

$db_conn = mysqli_connect("127.0.0.1", "사용자 이름", "비밀번호"," DB명");


        : 특정 DB에 접근한다.

 

2)   $rs = mysqli_query($db_conn, $sql);

$rs = mysqli_query($db_conn, $sql);

        : 특정 DB에 접근해서 SQL문을 실행시킨다.


3)   $article = mysqli_fetch_assoc($rs);

$article = mysqli_fetch_assoc($rs);

       : SELECT 문의 출력값을 배열(Array)의 형태로 받아온다.

 

4)  $id = mysqli_insert_id($db_conn);

$id = mysqli_insert_id($db_conn);

       : 특정 DB에 대해 마지막으로 수행한 mysqli_query()에 해당하는 테이블의

         현재 MAX(ID)를 불러온다. 

        ( "$db_conn" 를 통해 DB를 구분하고, mysqli_query()로 테이블을 구분한다.

 

 

기타 함수들

1) (echo) gettype($variable) : 변수의 자료형을 반환한다.

// ( 중략 )
$article = mysqli_fetch_assoc($rs);

echo gettype($article);
exit;

>>> Array 

 

초기 설치 시,

 

- SQLyog 초기 설치 시, root 계정의 비밀번호는 등록되지 않은 상태이므로, 비밀번호가 없는 상태에서

  계정 접속이 가능합니다.

 

 

 

root 계정 패스워드변경

root 계정은 사용자 이름이 root인 계정이고, DB를 운용할 때 사용하는 계정이 아닌,

다른 계정의 권한 컨트롤 등을 할 때 사용합니다.

 

root 계정 패스워드 변경은 CMD로 진행할 예정.

 

1) 경로 복사 ( mysql의 bin 폴더 )

 

2) CMD에 경로 연결

 

 

3) 아래 명령어 입력. 설치 직후, 패스워드는 존재하지 않으므로 패스워드 요구 시, 엔터.

 

mysql -uroot -p

 

 

 

* Mysql인데 왜 Maria DB가 연결되는지 궁금하시면 오른쪽 링크 >> SQLyog Mysql(Maria DB)에 대해서

 

 

4) 순차적으로 입력. ( mysql DB 접속 > 비밀번호 변경 )
   맨 아래 명령어는 마지막에 비밀번호만 바꿔서 입력.

# DB명 mysql 연결.
use mysql;    


# user 테이블의 host, user, password 칼럼 출력.
select host, user, password from user;


# 형식 : set PASSWORD for '계정명'@'localhost'= PASSWORD('변경할 비밀번호');
set PASSWORD for 'root'@'localhost'= PASSWORD('1234');

 

 

 

 

권한 부여

1) SQLyog에 root 계정으로 접속.

 

2) 아래 쿼리 양식에 맞춰서 실행.

 

※ 권한 부여를 해줘야 다른 계정에서 DB의 TABLE을 CRUD 할 수 있다. 

    이미 만들어진 연결, 또는 앞으로 만들 연결이 아래처럼 "me@"로 시작하면 해당 권한이 부여된다.

 

GRANT ALL PRIVILEGES ON *.* TO me@`%` IDENTIFIED BY 'root 계정 비밀번호';

FLUSH PRIVILEGES;

 

 

글을 쓰게된 계기

- 기존에 설치한 SQLyog의 Mysql root 계정 비밀번호를 잊어버려서 재설치한 후, root 계정 비밀번호를 등록하는 과정에서 현재 사용하고 있는 것이 Mysql이 아닌, Maria DB라는 것을 알게 되었다.

그리고, 내가 사용하고 있는 것이 무엇인지 정확하게 알고 싶었다.

 

 

 

 

Mysql과 Maria DB의 역사

MySQL의 창업자 중 한 명이자 핵심 개발자였던 몬티 와이드니어스는 MySQL AB를 인수한 썬 마이크로시스템즈가 오라클에 인수되면서 개발지침 등에 대한 의견 차이가 생겼다. 그는 그의 입장을 다음과 같이 이야기했다.

아마도 InnoDB 스토리지 엔진을 제외한 MySQL에 있는 기능 대부분은 썬 마이크로시스템즈 때 있었던 기능들입니다. 오라클 인수 후 MySQL은 발전하지 않았습니다. 오라클은 ‘MySQL을 어떻게 하면 자신들의 소유로 할 수 있을까’만 고민했고, 그래서 회사를 나왔습니다.

그렇게 몬티 와이드니어스가 몇 동료들과 함께 떠나 Monty Program AB 사를 설립하고 Maria DB를 개발하게 된 것이다.

 

 

 

본론

SQLyog 설치 시, Mysql을 설치하게 된다. 하지만 Maria DB를 사용한다.

SQLyog는 Mysql을 사용하기 위해 설계된 데이터베이스 클라이언트 기능을 포함하고 있다.

 

이 환경에서 Maria DB는 Mysql을 대체할만큼 호환성이 완벽하며, Maria DB 개발사인 Monty Program AB의

주장에 따르면 속도적 측면에서 Mysql에 비해 최대 70%의 성능 향상을 보인다고 한다.

또, DB 시장을 독점하려했던 오라클의 DB와 달리, 무료다..

 

실제로, SQLyog>mysql>readme.md를 참조하면,

 

# MariaDB: drop-in replacement for MySQL

라고 쓰여있다. drop-in replacement란, 컴퓨터 공학 등에서 사용되는 용어로 어떤 부품이나 프로그램을 대체 했을 때 다른 설정 등을 바꿀 필요가 없고 성능 저하도 없으며 오히려 속도, 안정성, 용량 등의 성능이 올라가는 대체를 의미한다.

즉, 상위 호환이다.

 

 

 

 

 

 

 EMP 테이블에서 최고 연봉과 사원을 출력하면, 최고 연봉을 받는 당사자가 출력될 것이이라고 생각할 수 있는데,
 그렇지 않다.

 해당 사원을 출력하도록 조건절에서 직접 정해주어야한다.

  

 

SELECT `name` AS `사원이름`, MAX(salary) AS `최고 연봉`
FROM emp;

# 위의 경우, MAX(salary)에 해당하는 사원의 이름이 출력되지 않는다.
# 만약, 최고 연봉을 받는 사원과 해당 사원을 출력하고 싶다면 아래처럼 작성해야 한다.

SELECT `name` `사원이름`, MAX(salary) `최고 연봉`
FROM emp
WHERE salary IN (
SELECT MAX(salary) FROM emp
)

< 문제 >

SELECT H.HOUR `HOUR`, COUNT(A.DATETIME) `COUNT`
FROM (
    SELECT 0 AS HOUR    # << 여기서 HOUR는 문자가 아닌, 함수를 가리킵니다.
    UNION
    SELECT 1
    UNION
    SELECT 2
    UNION
    SELECT 3
    UNION
    SELECT 4
    UNION
    SELECT 5
    UNION
    SELECT 6
    UNION
    SELECT 7
    UNION
    SELECT 8
    UNION
    SELECT 9
    UNION
    SELECT 10
    UNION
    SELECT 11
    UNION
    SELECT 12
    UNION
    SELECT 13
    UNION
    SELECT 14
    UNION
    SELECT 15
    UNION
    SELECT 16
    UNION
    SELECT 17
    UNION
    SELECT 18
    UNION
    SELECT 19
    UNION
    SELECT 20
    UNION
    SELECT 21
    UNION
    SELECT 22
    UNION
    SELECT 23
) AS H
LEFT JOIN ANIMAL_OUTS AS A
ON H.HOUR = HOUR(A.DATETIME)
GROUP BY H.HOUR
ORDER BY H.HOUR

< 정답 및 설명 >

 

 

- FROM 절의 서브쿼리에서 HOUR 함수로 0~23까지 UNION 연결로 지정해줍니다.

 

- LEFT JOIN을 통해 서브쿼리 부분을 기준으로 잡아줍니다.

 

- 기준인 서브쿼리와 ANIMAL_OUTS 테이블의 공통 부분을 HOUR 함수로 묶어줍니다.

 

- 출력의 기준이될 각 0~23시에 해당하는 H.HOUR로 그룹화합니다.

< 문제 >

< 정답 및 설명 >

 

SELECT HOUR(DATETIME) AS `HOUR`, COUNT(DATETIME) AS `COUNT`
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
HAVING HOUR >= 9 AND HOUR <= 19      # 9시~ 19시 사이의 시간
ORDER BY HOUR;

- HOUR(DATETIME) : HOUR 함수를 통해 DATETIME 칼럼의 시간 이하에 해당하는 부분(=시분초)를 가리킬 수 있다.

 

+ Recent posts