DB

[MySQL] 기본적인 MySQL 사용법, (Table생성, INSERT), 기본키/외래키

웹개발자(진) 2024. 3. 30. 20:31
반응형
잡담

누구에게 설명 가르치고 할 정도의 수준이 아니라 그날 공부한 내용을 정리하는 곳이다 보니까 이상하게 느껴질 수도 있고 틀린 내용일 수 도있습니다. 틀렸다면 틀린 부분에 대해서 댓글 달아 주셔도 됩니다. 또, 내용이 뒤죽박죽일 수 도 있다는 점 참고 하셔야 됩니다. 및에 나오는 내용은 기본적인 내용들이고 심화적인 내용들은 제가 성장하면 다룰지도? 모르겠습니다.


 

MySQL Connect

MySQL설치를 완료했다면 Workbench가 설치 되어있을 겁니다. Workbench란 말 그대로 작업대를 의미하며 MySQL을 좀 더 편리하게 이용할 수 있게 해주는 프로그램이라고 생각하면 됩니다. 아직 MySQL을 설치하지 않았다면 아래에 있는 게시글을 확인하셔서 설치하시면 되겠습니다.

2024.03.28 - [DB데이터베이스] - [MySQL] MySQL 다운로드 및 설치

 

[MySQL] MySQL 다운로드 및 설치

잡담 AI 나 빅데이터 등에 관심이 많아지면서 데이터베이스의 중요도는 더 올라갔다고 합니다. 그래서 학원에서도 DB 관련해서 여려가지 수업을 진행하는데 최근에 ORACLE 하고 MySQL을 수업했어요.

gustjr7532.tistory.com

 

Workbench를 실행하게 되면 아래와 같은 창을 확인하실 수 있습니다. 앞서 만들었던 localhost:3306 서버가 있는데 해당 부분을 클릭하게 되면

설치할 때 꼭 기억하라고 말씀드렸던 Password입력 창이 활성화됩니다. Password를 입력하고 Password를 기억하고 싶을 때는 아래에 Save password in vault를 체크하신 후 OK버튼을 누르면 됩니다.

Password를 정상적으로 입력하게 되면 아래와 같은 창으로 넘어가고 앞으로 저희가 사용하게 될 Workbench를 확인할 수 있습니다.


 

데이터베이스 관리 시스템 (DBMS)

Query문을 작성하기에 앞서 데이터베이스 관리 시스템 (DBMS)에서 데이터 조작과 관련된 작업에 대한 기본적인 지식이 필요합니다. 다른 게시글에서도 다뤄지겠지만 다시 한번 설명을 하자면 세 가지 범주로 나눌 수 있습니다.

  1. 데이터 정의 언어 (DDL)
  2. 데이터 조작 언어 (DML)
  3. 데이터 제어 언어 (DCL)

데이터 정의 언어 (DDL)

  • 데이터베이스의 구조를 정의하거나 수정하는 데 사용됩니다.
  • 주요 명령어에는 CREATE, ALTER, DROP 등이 포함됩니다.
  • DDL을 사용하여 데이터베이스 개체를 생성하고, 수정하고, 삭제할 수 있습니다.
  • DDL 명령은 테이블, 인덱스, 뷰, 프로시저 등을 관리하는 데 사용됩니다.

데이터 조작 언어 (DML)

  • 데이터를 쿼리 하거나 조작하는 데 사용됩니다.
  • 주요 명령어에는 SELECT, INSERT, UPDATE, DELETE 등이 포함됩니다.
  • DML을 사용하여 데이터를 삽입, 조회, 수정, 삭제할 수 있습니다.
  • DML은 데이터베이스 내의 실제 데이터를 다룹니다.

데이터 제어 언어 (DCL)

  • 데이터베이스에 대한 액세스를 제어하고 보안을 관리하는 데 사용됩니다.
  • 주요 명령어에는 GRANT, REVOKE 등이 포함됩니다.
  • DCL을 사용하여 사용자에게 권한을 부여하거나 박탈할 수 있습니다.
  • DCL은 데이터베이스의 보안과 무결성을 유지합니다.

요약하면, DDL은 데이터베이스의 구조를 정의하고 수정하는 데 사용되며, DML은 데이터를 쿼리하고 조작하는 데 사용되며, DCL은 데이터베이스의 액세스와 보안을 제어하는 데 사용됩니다.


 

DB생성(CREATE)

MySQL에서 데이터베이스를 생성하는 방법은 다음과 같습니다. 일반적으로 MySQL 쿼리를 사용하여 데이터베이스를 생성할 수 있습니다.

CREATE DATABASE database_name;

 

여기서 database_name은 새 데이터베이스의 이름을 나타냅니다. 이 명령은 MySQL 서버에 데이터베이스를 만듭니다. 아래는 데이터베이스를 생성하는 다른 예제입니다.

/* root 계정으로 JIN 데이터베이스 생성, 계정 YOUNG 생성 */

DROP DATABASE IF EXISTS JIN; /*JIN이라는 데이터 베이스가 존재하면 삭제해라*/
DROP USER IF EXISTS young@localhost; /*내 데이터베이스 서버에 young이라는 계정이 있으면 삭제*/

CREATE DATABASE JIN;/*JIN 데이터베이스 생성*/
CREATE USER young@localhost identified WITH mysql_native_password by 'young'; /*young 서버 및 young 패스워드 설정*/
GRANT ALL privileges ON JIN.* to young@localhost with grant option; /*모든 권한을 준다*/
commit; /*커밋*/

위의 Query문을 입력한 후 Ctrl + Enter 혹은 아래 사진의 빨간 동그라미에 있는 번개모양을 클릭하면 excute 됩니다.

실행이 완료되면 아래의 Output 창을 통해서 Query가 적용됐는지, 오류는 없는지, 있다면 어떤 내용인지 확인할 수 있습니다.

창 왼쪽아래에 Schemas를 클릭 후 Navigator에 Refresh를 누르면 아까 만든 JIN이라는 DB가 생성된 것을 확인할 수 있다.

 


 

또 다른 방법으로는 Navigator 창을 이용하는 것입니다. Navigator 창에서 우클릭을 통해 생성가능합니다.

 

Create schema... 클릭 후 이름설정 및 간단한 세팅 후 Apply를 진행하면 간단하게 만들 수 있습니다.


 

DB삭제(DROP)

MySQL에서 데이터베이스를 삭제하는 방법은 다음과 같습니다. 주의해야 할 점은 데이터베이스를 삭제하면 해당 데이터베이스에 저장된 모든 데이터가 영구적으로 삭제된다는 것입니다.

DROP DATABASE database_name;

여기서 database_name은 삭제하려는 데이터베이스의 이름을 나타냅니다. 예시의 경우면 JIN이 되겠습니다. 또 다른 방법으로는 Navigator 창에서 DROP 시켜 주는 방법입니다.

DROP 시키길 원하는 DB에 우클릭을 통해 Drop Schema... 를 해주시면 삭제되는 것을 확인할 수 있습니다.


 

TABLE 생성

MySQL에서 테이블을 생성하는 방법은 다음과 같습니다. 테이블 생성에는 테이블의 구조를 정의하는 열(Column)들과 해당 열들의 데이터 유형(Data Type)을 지정해야 합니다.

CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    column3 datatype,
    ...
);

여기서 table_name은 새로 생성하려는 테이블의 이름을 나타냅니다. column1, column2, column3 등은 테이블의 열(Column)을 나타내며, 각각의 열에 대한 데이터 타입은 datatype으로 지정됩니다. 필요한 만큼의 열과 해당 데이터 유형을 정의할 수 있습니다.

예를 들어, 'users'라는 테이블을 생성하고 싶다면, 다음과 같이 쿼리를 실행합니다.

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50),
    email VARCHAR(100),
    password VARCHAR(100)
);

이 예제에서는 'users' 테이블을 생성하고, 각 사용자의 ID, 사용자명(username), 이메일(email), 비밀번호(password)를 저장할 수 있는 열들을 정의했습니다. id 열은 자동으로 증가하고 주요 키(primary key)로 설정되었습니다.

테이블을 생성할 때 추가적인 제약사항(Constraints)과 옵션을 지정할 수도 있습니다. 이는 데이터베이스 설계의 요구사항에 따라 달라질 수 있습니다.

또 다른 예제를 들어보겠습니다.

use JIN; /*아래 쿼리문은 JIN 데이터베이스에서 하겠다.*/
create table Book(
bookID integer primary key,
bookName varchar(40),
publisher varchar(40),
price integer);

create table Customer(
custID integer primary key,
name varchar(40),
address varchar(40),
phone varchar(20));

create table Orders(
orderID integer primary key,
custID integer,
bookID integer,
saleprice integer,
orderDate date,
FOREIGN KEY (custID) REFERENCES Customer(custID),
FOREIGN KEY (bookID) REFERENCES Book(bookID)
);
/*Cutomer 테이블에 있는 custID을 참조해서 외래키로 사용*/
/*Book 테이블에 있는 bookID을 참조해서 외래키로 사용*/
/*Order(주문)테이블의 custID를 통해서 Customer(구매자)의 정보를 불러올 수 있다.*/

해당 Query문을 실행시키면 TABLE이 생성되었다는 것을 확인할 수 있습니다.

여기서 use JIN을 왜 Query문에 작성했는지?  해당 Query문을 통해서 JIN이라는 DB에서 TABLE을 생성할 것이라는 것을 미리 적용해 줄 수 있습니다. TABLE을 작성하다 보면 원하지 않는 위치에 생성될 수 있으니 해당 습관을 들여놓는 것도 좋을 것 같습니다.

위에 예제를 보면 primary key , foreign key 가 있는데 해당 내용은 중요함으로 한번 짚고 넘어가도록 하겠습니다.

 


 

기본키(primary key)와 외래키(foreign key)

기본키(Primary Key)와 외래키(Foreign Key)는 데이터베이스에서 중요한 개념입니다. 이들은 테이블 간의 관계를 설정하고 데이터 무결성을 유지하는 데 사용됩니다.

  1. 기본키(Primary Key): 기본키는 각 레코드를 고유하게 식별하기 위해 사용됩니다. 테이블 내의 특정 열(또는 열의 조합)을 기본키로 지정하여 해당 열의 값이 항상 고유하고 널 값을 허용하지 않도록 설정합니다. 기본키는 NULL 값을 가질 수 없으며, 각 테이블당 하나의 기본키만 가질 수 있습니다.

예를 들어, 사용자 정보를 저장하는 'users' 테이블에서 'id' 열을 기본키로 사용할 수 있습니다.

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50),
    email VARCHAR(100)
);

  1. 외래키(Foreign Key): 외래키는 다른 테이블의 기본키를 참조하는 열입니다. 이를 통해 테이블 간의 관계를 설정할 수 있습니다. 외래키는 데이터 무결성을 유지하는 데 사용됩니다. 즉, 부모 테이블의 기본키 값이 자식 테이블의 외래키 값으로 존재해야 합니다.

예를 들어, 'orders' 테이블에서 'user_id' 열이 'users' 테이블의 'id' 열을 참조하는 외래키일 수 있습니다.

CREATE TABLE orders (
    order_id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT,
    order_date DATE,
    FOREIGN KEY (user_id) REFERENCES users(id)
);

위의 예제에서 'user_id' 열은 'users' 테이블의 'id' 열을 참조하는 외래키로 설정되었습니다. 이를 통해 'orders' 테이블의 각 주문은 특정 사용자를 참조하게 됩니다.

이처럼 기본키와 외래키를 적절히 사용하여 데이터베이스의 구조를 설계하면 데이터의 일관성과 무결성을 보다 쉽게 유지할 수 있습니다.

 


INSERT

INSERT 문은 MySQL 데이터베이스에 새로운 레코드를 삽입하는 데 사용됩니다. 다음은 INSERT 문의 기본 구문입니다.

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

여기서:

  • table_name은 레코드를 추가할 테이블의 이름입니다.
  • column1, column2, column3 등은 삽입될 레코드의 각 열(Column)을 나타냅니다.
  • VALUES 키워드를 사용하여 각 열에 대한 값을 지정합니다. 이 값들은 새로운 레코드의 열에 삽입됩니다.

앞에서 만들었던 TABLE에 필요한 값들을 INSERT 해보도록 하겠습니다.

INSERT INTO Book VALUES(1, '축구의 역사', '굿스포츠', 7000);
INSERT INTO Book VALUES(2, '축구아는 여자', '나무수', 13000);
INSERT INTO Book VALUES(3, '축구의 이해', '대한미디어', 22000);
INSERT INTO Book VALUES(4, '골프 바이블', '대한미디어', 35000);
INSERT INTO Book VALUES(5, '피겨 교본', '굿스포츠', 8000);
INSERT INTO Book VALUES(6, '역도 단계별기술', '굿스포츠', 6000);
INSERT INTO Book VALUES(7, '야구의 추억', '이상미디어', 20000);
INSERT INTO Book VALUES(8, '야구를 부탁해', '이상미디어', 13000);
INSERT INTO Book VALUES(9, '올림픽 이야기', '삼성당', 7500);
INSERT INTO Book VALUES(10, 'Olympic Champions', 'Pearson', 13000);

INSERT INTO Customer VALUES (1, '박지성', '영국 맨체스타', '000-5000-0001');
INSERT INTO Customer VALUES (2, '김연아', '대한민국 서울', '000-6000-0001');  
INSERT INTO Customer VALUES (3, '장미란', '대한민국 강원도', '000-7000-0001');
INSERT INTO Customer VALUES (4, '추신수', '미국 클리블랜드', '000-8000-0001');
INSERT INTO Customer VALUES (5, '박세리', '대한민국 대전',  NULL);

INSERT INTO Orders VALUES (1, 1, 1, 6000, STR_TO_DATE('2014-07-01','%Y-%m-%d')); /*STR_TO_DATE함수를 통해서 DATE 타입을 해당 형식으로 바꿔서 저장한다.*/
INSERT INTO Orders VALUES (2, 1, 3, 21000, STR_TO_DATE('2014-07-03','%Y-%m-%d'));
INSERT INTO Orders VALUES (3, 2, 5, 8000, STR_TO_DATE('2014-07-03','%Y-%m-%d')); 
INSERT INTO Orders VALUES (4, 3, 6, 6000, STR_TO_DATE('2014-07-04','%Y-%m-%d')); 
INSERT INTO Orders VALUES (5, 4, 7, 20000, STR_TO_DATE('2014-07-05','%Y-%m-%d'));
INSERT INTO Orders VALUES (6, 1, 2, 12000, STR_TO_DATE('2014-07-07','%Y-%m-%d'));
INSERT INTO Orders VALUES (7, 4, 8, 13000, STR_TO_DATE( '2014-07-07','%Y-%m-%d'));
INSERT INTO Orders VALUES (8, 3, 10, 12000, STR_TO_DATE('2014-07-08','%Y-%m-%d')); 
INSERT INTO Orders VALUES (9, 2, 10, 7000, STR_TO_DATE('2014-07-09','%Y-%m-%d')); 
INSERT INTO Orders VALUES (10, 3, 8, 13000, STR_TO_DATE('2014-07-10','%Y-%m-%d'));

값들이 들어갔는지 확인하는 방법은 다음과 같습니다. 해당 TABLE에 우클릭 후 가장 위에 Select Rows -Limit 1000을 클릭하게 되면 

TABLE에 데이터들이 INSERT 되어있는 것을 확인할 수 있습니다. 다른 방법으로는 SELECT문을 사용할 수 있는데요

SELECT * FROM jin.book;

SELECT * FROM은 데이터베이스에서 모든 열을 선택하여 반환하는 SQL 문입니다. 이를 사용하면 특정 테이블의 모든 데이터를 가져올 수 있습니다.


 

글을 마치며

기본적인 MySQL 사용법 및 간단한 DB 생성, TABLE 생성, 데이터 삽입 등을 배워 보았습니다. 사실 현실은 이렇게 간단하게 만들지 않기는 하지만 기본을 배운다는 마음으로 공부하고 있습니다. 실무에 가서 어떤 DB를 만나게 될지 모르지만 열심히 배워서 당황하지 않도록 하는 게 목표입니다. 다음에는 SELECT문에 대해 작성해 보는 시간을 가지도록 하겠습니다. 감사합니다.

반응형