반응형

 

 

MySQL 기본 명령어를 사용해 테이블을 만들다 마주친 int(11) int(4) 등의 형태가 요상해서

찾아본 내용을 정리해봄

 

 

 

[MySQL] 데이터베이스 테이블 생성, 조회, 데이터 추가 명령어

생활코딩에서 복습한 기념으로 기본적인 데이터베이스 명령어인 테이블 생성, 조회 등을 기록해보려함 Windows에서 MySQL을 사용하기 위해서는 여기로 들어가 다운로드 하면된다 https://dev.mysql.com/d

studyingpingu.tistory.com

 

 

사실 이러한 형태는 zerofill 이라는 타입을 추가로 정의해주지 않는다면

int(4)나 int(11)이나 같은 형태로 출력이되고

 

데이터베이스에 저장될때도

두 개의 표현 모두, 원래 int 자료형의 범위 (-2,147,483,648 to 2,147,483,647) 만큼

동일한 크기로 저장된다고 한다

 

int(4)로 저장한다고 int(11)보다 적은 사이즈가 디비에 저장되는게 아니라서

공간을 효율적으로 줄이는것도 아니라고함

 

대신에 저장된 숫자의 공백칸 만큼을 0으로 표현해주는 차이라고 한다

int(4) 이지만 한자리 숫자가 저장된다면,

4칸을 보여주기 위해 앞의 3칸을 0으로 채운 0004를 출력한다는 것

 

 

아래는 그 예제

 

 

 

추가로 달린 댓글에서 보면 이러한 제로필 방식은 사용하지 않는걸 강하게 추천하고 있다

이 댓글이 받은 좋아요 수가 높은걸 보면

그냥 개념만 알아두고 사용은 피하는게 좋을것같다

 

대충 몇개의 숫자가 보여질지 선택하는건 DB단에서 하는게 아니라

UI 단에서 해주는 부분이므로 이걸 데이터베이스에서 건드리는 순간

문제가 생길수있는 확률이 올라간다고 하니

 

개념만 이해하는 식으로 넘어가자

 

 

 

 

참고 : https://stackoverflow.com/questions/5256469/what-is-the-benefit-of-zerofill-in-mysql

 

What is the benefit of zerofill in MySQL?

I just want to know what is the benefit/usage of defining ZEROFILL for INT DataType in MySQL? `id` INT UNSIGNED ZEROFILL NOT NULL

stackoverflow.com

 

 

반응형
반응형

 

 

생활코딩에서 복습한 기념으로

기본적인 데이터베이스 명령어인 테이블 생성, 조회 등을 기록해보려함

 

Windows에서 MySQL을 사용하기 위해서는 여기로 들어가 다운로드 하면된다

https://dev.mysql.com/downloads/mysql/

 

MySQL :: Download MySQL Community Server

Select Operating System: Select Operating System… Microsoft Windows Debian Linux Ubuntu Linux SUSE Linux Enterprise Server Red Hat Enterprise Linux / Oracle Linux Fedora Linux - Generic Oracle Solaris macOS Source Code Select OS Version: All Windows (x86

dev.mysql.com

 

 

데이터베이스 생성, 조회, 사용 데이터베이스 지정 명령어

CREATE DATABASE 데이터베이스명;

SHOW DATABASES;

USE 데이터베이스명;

 

예제

//opentutorials 라는 데이터베이스 테이블 생성
mysql> create database opentutorials;
Query OK, 1 row affected (0.01 sec)


//데이터베이스들 모두 조회
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| bob                |
| information_schema |
| mysql              |
| opentutorials      |
| performance_schema |
| sakila             |
+--------------------+
6 rows in set (0.00 sec)

//사용할 데이터베이스 선택 - opentutorials 라는 디비 사용
mysql> use opentutorials;
Database changed

위의 명령어들을 적절히 사용해서 DB 테이블을 추가하고, 선택하여 사용할수있다

 

 

DB 테이블 추가 명령어

CREATE TABLE 테이블명 (컬럼1 자료형, 컬럼2 자료형, ... , 컬럼N 자료형, PRIMARY KEY(PK 지정할 컬럼) );

 

예제

//DB 테이블 생성
//topic이라는 테이블 생성

mysql> create table topic(
    -> id int(11) not null auto_increment,
    -> title varchar(100) not null,
    -> description text null,
    -> created datetime not null,
    -> author varchar(30) null,
    -> profile varchar(100) null,
    -> primary key(id));
    
Query OK, 0 rows affected, 1 warning (0.10 sec)

topic이라는 이름의 테이블을 생성하고 id를 primary key로 지정해준다

primary key 지정을 해주지않으면 오류가 발생하니 마지막에 잊지말고 지정해주자

 

-> id int(11) not null auto_increment

-> 컬럼 명, 자료형, 데이터 null (=비어있다) 가능 유무, 자동으로 1씩 증가

 

int(11)은 11자리까지만 보여준다고 생활코딩에서 그런것같음

 

조금 헷갈려서 int(4) 와 int() 등의 차이가 뭔가 했더니

디비에 저장되는 범위는 int 원래의 자료형의 범위로 모두 동일하며

보여지는 자릿수의 차이인가 여튼 그렇다함

(추후 자세히 찾아보기)

 

not null은 비어있는 값이면 안된다는 것, 반대로 null 이면 공백 데이터 허용

 

id의 값을 삽입할때마다 추가로 기입하지 않아도 자동으로 증가되게끔 해주는 auto_increment 속성을 추가해주었다

 

위와 동일한 방식으로 id를 제외한 다른 title, description 등의 칼럼에 데이터를 넣어줌

 

 

varchar1~255bytes까지 저장이 가능하고 text는 65,535 characters까지 저장이 가능하다고 하여

 

제목, 작성자, 프로필을 저장할 title, author, profile은 varchar 자료형을 사용하였고

내용이 길어질 수 있으니 description은 text 자료형을 사용했다

 

created에 사용한 datetime은 날짜를 표시할때 사용하면 된다

 

 

등록된 테이블 조회, 특정 테이블 상세 조회

SHOW TABLES;

DESC 테이블명;

 

예제

//DB 테이블 조회
mysql> show tables;
+-------------------------+
| Tables_in_opentutorials |
+-------------------------+
| topic                   |
+-------------------------+
1 row in set (0.01 sec)

//테이블 상세 내용 확인 - 이때 세미콜론을 붙여줘야 쿼리문이 작성완료된것으로
//세미콜론을 깜빡하고 엔터를 쳐도 다음줄에서 다시 쳐주면 된다
mysql> desc topic
    -> ;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int          | NO   | PRI | NULL    | auto_increment |
| title       | varchar(100) | NO   |     | NULL    |                |
| description | text         | YES  |     | NULL    |                |
| created     | datetime     | NO   |     | NULL    |                |
| author      | varchar(30)  | YES  |     | NULL    |                |
| profile     | varchar(100) | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
6 rows in set (0.01 sec)

데이터베이스를 조회할때와 마찬가지로

show tables; 를 사용하면 등록된 테이블들을 한번에 조회할 수 있다

 

이때, 테이블마다의 컬럼(column)이 모두 다르고, 데이터(row)가 다르므로

테이블마다의 내용을 자세하게 보고싶을때는 desc+ 테이블 명; 을 입력해주면

 

테이블마다의 상세 내용(attribute)을 확인할수있다

 

 

테이블에 데이터 추가, 테이블에 추가된 모든 데이터 조회

INSERT INTO 테이블명 (칼럼명1, 칼럼명2, ... , 칼럼명N)
VALUES(데이터1, 데이터2, ... , 데이터N);

SELECT * FROM 테이블명;

 

 

예제

// topic 테이블에 데이터 추가하기
mysql> insert into topic (title, description, created, author,profile)
    -> values ('mysql', 'mysql is ... ' , now(), 'yunny', 'developer');
Query OK, 1 row affected (0.02 sec)

//저장한 데이터 불러오기
mysql> select * from topic ;
+----+-------+---------------+---------------------+--------+-----------+
| id | title | description   | created             | author | profile   |
+----+-------+---------------+---------------------+--------+-----------+
|  1 | mysql | mysql is ...  | 2021-10-20 17:46:57 | yunny  | developer |
+----+-------+---------------+---------------------+--------+-----------+

 

몇개 더 추가해본 예제

 

mysql> select * from topic
    -> ;
+----+------------+-------------------+---------------------+--------+---------------------------+
| id | title      | description       | created             | author | profile                   |
+----+------------+-------------------+---------------------+--------+---------------------------+
|  1 | mysql      | mysql is ...      | 2021-10-20 17:46:57 | yunny  | developer                 |
|  2 | oracle     | oracle is ...     | 2021-10-20 17:48:38 | yunny  | developer                 |
|  3 | sql server | sql server is...  | 2021-10-20 17:49:57 | duru   | database administrator    |
|  4 | postgresql | postgre sql is... | 2021-10-20 17:50:38 | taeho  | dataschientist, developer |
|  5 | mongodb    | mongodb is ...    | 2021-10-20 17:51:04 | egoing | developer                 |
+----+------------+-------------------+---------------------+--------+---------------------------+
5 rows in set (0.00 sec)

select * 은 ALL의 모두를 뜻하여 topic 테이블의 모든 데이터를 가져온다는 뜻이다

 

 

 

 

참고 : 

 

https://opentutorials.org/course/3161/19537

 

MySQL 테이블의 생성 - 생활코딩

MySQL 테이블의 생성 2018-02-12 01:09:40

opentutorials.org

 

 

※틀린부분, 오타가 있다면 알려주세요

반응형
반응형

 

 

Warning | 1681 | Integer display width is deprecated and will be removed in a future release.

 

예제를 따라서 SQL문을 작성하다가 마주친 워닝 문구

 

mysql warnings

아마 범위 지정때문에 경고를 받은듯하다

 

어떤 경고인지 자세하게 보면 좋을것같아 찾아본 MySQL warning 확인하는 명령어

 

mysql> show warnings
    -> ;
+---------+------+------------------------------------------------------------------------------+
| Level   | Code | Message                                                                      |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1681 | Integer display width is deprecated and will be removed in a future release. |
| Warning | 1681 | Integer display width is deprecated and will be removed in a future release. |
| Warning | 1681 | Integer display width is deprecated and will be removed in a future release. |
| Warning | 1681 | Integer display width is deprecated and will be removed in a future release. |
+---------+------+------------------------------------------------------------------------------+
4 rows in set (0.00 sec)

show warnings; 를 입력해주면 받은 경고에 대한 상세 메세지를 확인할수있다

 

워닝 코드는 1681이며

워닝 메세지는 Integer display width is deprecated and will be removed in a future release. 였다

 

 

 

이제 이 경고가 왜 뜨는지, 또 피할수있는 방법이 있는지 검색을 시도해봤음

 

친절한 스택오버플로우는

이러한 워닝은 데이터를 저장하거나 표출하는데 아무런 문제가 없으며

 

그렇더라도 이러한 문구를 피하고싶다면, 기존 컬럼 타입을

INT(11) 등의 형태에서 INT로 수정하라고 해결방법까지 안내해준다

 

 

 

 

참고 : 

https://dev.mysql.com/doc/refman/8.0/en/numeric-type-attributes.html

 

MySQL :: MySQL 8.0 Reference Manual :: 11.1.6 Numeric Type Attributes

11.1.6 Numeric Type Attributes MySQL supports an extension for optionally specifying the display width of integer data types in parentheses following the base keyword for the type. For example, INT(4) specifies an INT with a display width of four digits.

dev.mysql.com

 

반응형

+ Recent posts