syurhia 님의 블로그

MySQL(MariaDB)문법 요약 및 PHP연동 본문

IT/PHP

MySQL(MariaDB)문법 요약 및 PHP연동

syurhia 2026. 5. 12. 19:31

MySQL에서 필요한 명령어들과 간략한 문법 설명이다.

자세한 내용은 SQL공부를 따로 할 때 다뤄보도록 하겠다.

참고로, 명령어 칠 때 세미콜론을 써줘야 한다.

 


데이터베이스 생성하기

create database DB명;

 

 

사용자 계정 생성하기

CREATE USER '사용자이름'@'접속범위' IDENTIFIED BY '비밀번호';

 

접속 범위는 localhost 또는 %중에 선택한다. (아니면 특정 IP를 적어줘도 된다.)

localhost는 서버 내부에서만 접속 가능하다는 뜻이다. 외부에서 DB에 접근이 불가능하다. (웹 서버와 DB가 같은 서버에 있을때 사용)

%는 외부에서도 이 계정으로 접속이 가능하다는 뜻이다. (특정 IP를 적으면 그 IP만 접속 가능하다.)

 

데이터베이스 권한 부여

GRANT 권한종류 ON 데이터베이스명. 테이블명 TO '사용자이름'@'접속범위';

 

권한 종류에는 다음 문장들이 들어갈 수 있다. 'ALL PRIVILEGES'(모든 권한), 'SELECT'(조회), 'INSERT'(삽입), 'UPDATE'(갱신), 'DELETE'(삭제)

테이블명에 *을 입력하면, 데이터베이스 내의 모든 테이블에 권한을 갖는다.

 

계정 권한 확인

SHOW GRANTS FOR '아이디'@'범위';

범위에는 localhost나 %를 쓴다.

 

권한 빼앗기

REVOKE 권한종류 ON 데이터베이스명.테이블명 FROM '아이디'@'접속범위';

 

계정 삭제

DROP USER '아이디'@'접속범위';

참고로 아이디가 중복되어도 접속범위가 다르면 다른 아이디로 인식된다. 

로그인할때 각자 상황에 맞는 아이디로 자동으로 접속된다고 한다.(해본적은 없다.)


데이터베이스 선택

이거를 해야 데이터베이스 안에 있는 테이블들을 상대로 명령어를 작성할 수 있다.

use 데이터베이스명;

 

테이블 생성

아래와 같이 한다. 필드명은 변수명정도로 생각해두자.

create table 테이블명(
	필드명1 자료형 [옵션],
    ...
)

옵션에는 primary key(고유값 지정), auto primary key등이 들어간다. 

자료형은 varchar(바이트수), int등..

 

테이블 목록 참조

데이터베이스 내부의 테이블들 목록 참조가 가능하다.

show tables;

 

특정 테이블의 구조 참조

특정 테이블이 어떠한 필드와 자료형인지 확인 가능하다.

desc 테이블명;

 

테이블 삭제

drop table 테이블명;

 

테이블에 데이터 삽입

두 가지 방법을 썼는데, 두 번째꺼는 모든 필드에 값을 넣을때이다.

특정 필드에만 값 작성할 예정이라면 첫 번째거를 써야한다.

insert into 테이블명 (필드명1, 필드명2, ...) values (필드값1, 필드값2, ...)

insert into 테이블명 values (필드값1, 필드값2, ...)

 

테이블 데이터 조회

조건식은 생략가능하다. 원하는 필드명만 출력할 경우 첫 번째 명령어를. 모든 필드를 출력하려면 *을 쓴다.

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

select * from 테이블명 where 조건식;

 

테이블 데이터 갱신

내가 수정하고 싶은 필드만 수정 가능함.

update 테이블명 set 필드명=필드값, 필드명=필드값,... where 조건식;

update score set kor=90 where num=1;

 

테이블 데이터 삭제

delete from 테이블명 where 조건식;

 

PHP에서 MySQL에 쿼리를 요청 보내기 위해서는 일단 MySQL에 로그인을 하는 코드가 필요하다.

아래의 코드처럼 PDO라는 클래스를 이용해서 객체를 생성한다. 이 때, 객체를 조종할 변수가 필요하니까 $DB객체명을 통해 조종한다.

$DB객체명 = new PDO("mysql:host=서버주소;dbname=사용할DB명","사용자ID","비밀번호");

그리고, 쿼리를 실행하는 건 아래와 같다. $db객체명->query나 $db객체명->exec도 있지만 SQL Injection을 일으키고 싶지 않다면 prepare를 쓰도록 하자. 

$num = 3;
$query = $DB객체명->prepare("select * from score where num=:num");
$query->bindValue(":num",$num,PDO::PARAM_INT);
$query->execute();

$row = $query->fetch(인자)

prepare는 쿼리의 뼈대를 고정시켜놓고, 입력받은 값은 쿼리가 아닌 문자열로만 처리하는 함수이다.

$num에 무슨 값이 들어오던 무조건 문자열로만 처리되어 SQL injection에서는 안전하다.

참고로 변하는 값부분은 :num과 같이 표현한다. 

 

bindValue는 값을 묶어주는 함수이다. ':num'에다가 $num의 값을 넣어준다.

값을 묶어준 후에는 execute로 실행한다.

 

실행 한 뒤에는 무언가 반환값이 도착해있는데 그거를 fetch함수를 통해 꺼낼 수 있다.

fetch함수에는 PDO::FETCH_ASSOC, PDO::FETCH_NUM이 들어갈 수 있는데 PDO::FETCH_ASSOC을 넣으면 연관배열로 반환되고 PDO::FETCH_NUM을 넣으면 숫자 인덱스인 배열이 반환된다.

 

'IT > PHP' 카테고리의 다른 글

PHP문법 간단 요약  (0) 2026.05.12
GET과 POST의 이해  (0) 2026.05.07
PHP환경 구축  (0) 2026.04.28