[MariaDB, MySQL] 에러해결 : Multiple primary key defined


2개의 컬럼을 기본키로 설정하려 드니 에러가 나오더군요.

 

ERROR 1068 (42000): Multiple primary key defined


원인

저의 경우 filed1은 이미 primary key로 지정이 되어있었고, filed2를 추가로 primary key로 지정하려 했는데 위 에러가 뜨더라구요.

확인을 해보니 field2의 not null설정이 안되어 있어 일어나는 문제였습니다. (null가능 상태)

 

 

해결

위 에러가 나온다면 우선 설정하고 싶은 primary key의 값이 null이 가능한지 아닌지를 확인하시고,

null이 불가능한 상태에서도 변경이 이루어지지 않는다면, 기존에 설정된 primary key를 제거 후 다시 설정해주세요.

 

예) table에 field1, field2, field3가 있으며, field1이 primary key로 잡혀있을 때 field1과 field2를 묶어 primary ket로 설정하고 싶을 때

 

 - field2의 Null 허용 상태가 NO인지 YES인지 체크를 합니다.

desc [table name];

 -- 만약 filed2의 Null 허용 상태가 YES라면 NO로 변경해줍니다.

alter table [table name] modify [field name] [field type] not null;

 - table의 설정된 primary key를 제거해줍니다.

alter table [table name] drop primary key

- field1과 field2를 primary key로 지정합니다.

alter table [table name] add primary key([field1], [field2]);

생각보다 별거 아닌거가지고 에러를 많이 만나네요 ㅠㅠ

 

버전정보 (v1.0)

 - v1.0 2020.08.15 배포

 

* 저작권에 위반될 수 있는 컨텐츠(이미지, 동영상 등)나 게시글은 삭제되거나 수정될 수 있습니다.

* 문제의 여지가 될 수 있는 컨텐츠의 경우 댓글 달아 주시면 빠른 시일 내에 조치하도록 하겠습니다.

* Karzin은 항상 공부중입니다. 설명이 틀리거나 잘못된 부분이 있다면 의견내주시는대로 수정하도록 하겠습니다.

 

Karzin

abbeea@naver.com

 


[Mybatis, MariaDB, MySQL] 에러해결 : Table ~~~ doesn't exist


오.. 앞서 Mapper 관련 에러 게시글 작성 끝내고 바로 또 진행하면서 생긴 에러..!

Table ~~~ doesn't exist

테이블이 왜 없지 하고 봤더니... (이것도 결국 진짜 별거 아니었다고 하죠..)

 


저는 DB도 워낙 여러개를 다루다보니.. (Oracle, Tibero, Mysql, MariaDB는 기본이고 MongoDB, SQLite 등등..)

매번 헷갈립니다 ㅋㅋㅋㅋ (언어도 ㅋㅋㅋㅋㅋ)

이게 저거였는지 저게 이거였는지.. (혼용으로 인한 폐허)

덕분에 별거 아닌 문제를 많이 보게되는데, 이번에도 비슷한 별거아닌 문제네요 ㅋ;;

 

원인

종종 사용하는 Oracle에서는 대소문자를 딱히 구분하지 않아도 테이블의 검색이 가능했으나(어쩌면 옵션의 설정으로 바꿨을지도 모르구요),

아마 MariaDB도 옵션에서 설정을 해줄수 있는걸로 아는데, 제가 설치한 MariaDB에서는 대소문자를 구분하여 table 명을 검색합니다.

덕분에 없다고 나온거구요.

보통 Table ~~~ doesn't exist 에러가 나오면 테이블이 없다고 봐야하는데, 저는 분명히 만들었는데도 없다고 에러를 뿜어내면.. 뭐.. 원인은 대소문자 구분이죠. ㅎ..

 

해결

앞으로는 대소문자 구분해주는걸로 해결을 봤습니다.

옵션 변경을 해줄까 고민했는데, 나중에 대소문자 구분해서 쓰게 될 경우가 생길 것 같아서 패스했습니다.

 


음.. 에러를 만나 해결하는 건 즐겁지만, 

왜 이렇게 별거 아닌거에서 걸리는지...ㅋㅋㅋㅋㅋㅋ;;

 

버전정보 (v1.0)

 - v1.0 2020.08.06 배포

 

* 저작권에 위반될 수 있는 컨텐츠(이미지, 동영상 등)나 게시글은 삭제되거나 수정될 수 있습니다.

* 문제의 여지가 될 수 있는 컨텐츠의 경우 댓글 달아 주시면 빠른 시일 내에 조치하도록 하겠습니다.

* Karzin은 항상 공부중입니다. 설명이 틀리거나 잘못된 부분이 있다면 의견내주시는대로 수정하도록 하겠습니다.

 

Karzin

abbeea@naver.com


[Database] 데이터 모델이란?


오늘은 데이터 모델에 대해서 알아보는 시간을 가지고자 합니다.

 

데이터 모델 (Data Model)

A set of Symbols == 모든 Symbol들의 집합

 - 모든 심볼드의 집합으로 컴퓨터에 데이터를 저장하는 방식을 정의해 놓은 개념 모형

 - 대표적으로 계층형, 네트워크형, 관계형, 객체지향형 등

 

데이터 모델의 종류

 

데이터 모델링 (Data Modeling)

All Process == 모든 프로세스

 - 현실세계에서 스토리지로 저장하기 위한 모든 프로세스

 - 현실 -> Data Modeling -> DB

 

데이터 모델링

 

 - Conceptinal Modeling (개념적 데이터 모델링)

    -> 추상화 수준이 높고 업무중심적

    -> 포괄적인 수준의 모델링 진행

    -> EA 수립시 많이 이용 (E-R Modeling)

 

 - Logical Modeling (논리적 데이터 모델링)

    -> 시스템으로 구축하고자하는 업무에 대해 Key, 속성, 관계 등 정확히 표현

    -> 재사용성이 높음

    -> Relational (관계형)

 

 - Physical Modeling (물리적 데이터 모델링)

    -> 실제로 데이터 베이스에 이식할 수 있도록 성능, 저장 등 물리적인 성격을 고려하여 설계

    -> File, MetaDataFile, PhysicalDataFile

 

** 그림에 사용된 글자체는 네이버 나눔글꼴의 나눔스퀘어 Bold입니다.

 

버전정보 (v1.0)

 - v1.0 2020.06.19 배포

 

* 저작권에 위반될 수 있는 컨텐츠(이미지, 동영상 등)나 게시글은 삭제되거나 수정될 수 있습니다.

* 문제의 여지가 될 수 있는 컨텐츠의 경우 댓글 달아 주시면 빠른 시일 내에 조치하도록 하겠습니다.

 

Karzin

abbeea@naver.com


[MySql, MariaDB] 

Spring Boot 연동시 타임존 에러 해결


 

개인적인 프로젝트를 진행하며 보인 에러입니다.

 

더보기

The server time zone value 'KST' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

 

DB 서버단에서 특별한 설정(타임존 세팅 등)을 하지 않아서 발생하는 문제이지만, 귀찮으므로 서버는 건들지 않는 선택을 하도록 하겠습니다.

 

 -해결방법 (DB서버를 건들지 않는 방법)

  > database url 맨 마지막에 ?serverTimezone=Asia/Seoul를 추가해주시면 됩니다.

  > 협정세계표준시(UTC)의 경우 ?serverTimezone=UTC를 추가해주시면 됩니다.

 


[Mysql, MariaDB] 계정 생성 및 권한 부여하기


 

Mysql 및 MariaDB에서 계정을 생성하고 권한을 부여하는 방법입니다.

 

 - root 권한으로 로그인

sudo mysql -u root -p

 > root 패스워드를 입력 후 로그인합니다.

 

 

 - 계정생성하기

 > 로컬 및 원격으로 접속이 가능한 계정 생성

create user 'USERNAME'@'%' identified by 'PASSWORD';

  -> username 부분에는 계정의 이름을, password 부분에는 계정의 암호를 입력합니다.

 

 > 로컬로만 접속이 가능한 계정 생성

create user 'USERNAME'@'localhost' identified by 'PASSWORD';

 

 

 - 생성한 계정에 권한을 부여할 DB 만들기

create database DBNAME default character set UTF8;

 > DBNAME 부분에 생성할 DB 명칭을 입력해주세요.

 > default charater를 utf8로 설정합니다.

 

 

 - 생성된 DB 확인

show databases;

 

 

 - 계정에 DB 권한 부여

grant all privileges on DBNAME.* to 'USERNAME'@'%';

 > 변경된 권한 적용

flush privileges;

 

 

 

 - 계정생성이 완료되면 생성된 계정으로 로그인이 가능

mysql -u USERNAME -p

 > 설정한 패스워드 입력 후 로그인

 > 권한 부여된 DB 확인

show databases;

 

 

DBLink 란??

 - 타 DB에 접속하기 위한 Link라고 보시면 됩니다.

 - 예를 들자면, A라는 데이터베이스와 B라는 데이터베이스가 있을 때, A에서 B에 있는 Table을 확인하고 싶을 때 사용하는 방법이라고 생각하시면 될 것 같습니다.

 - A -> B.table

 

DBLink 생성

 - 1. (Oracle의 경우) tbsnames.ora 설정 필요 //Oracle의 경우 데이터베이스 링크 생성 시 선언해도 됩니다. (2번으로)

DBLinkName = 
 (DESCRIPTION =
  (ADDRESS_LIST = 
   (ADDRESS = (PROTOCOL = TCP) (HOST = 192.168.1.1) (PORT = 1234) ) 
  )
  (CONNECT_DATA = 
   (SERVICE_NAME = ORACLE) 
  )
 )

 - 1. (Tibero의 경우) tbdsn.tbr 설정 필요

DBLinkName = 
(
 (INSTANCE = (HOST=192.168.1.1)
  (PORT=1234)
  (DB_NAME=TIBERO)
 )
)

 

 - 2. 데이터베이스 링크 생성

create database link [DBLinkUseName] connect to [USER_ID]
identified by [USER_PASSWORD] using [DBLinkName];

 -> [ ]안에 들어갈 내용은 1. 사용할 DBLink의 명칭 2. 연결할 DB에 생성되어있는 접속할 유저의 아이디 3. 유저의 비밀번호 4. 위 ora 및 tbr 파일에서 선언한 네임(맨 위에 있는 명칭 DBLinkName = )을 적어주면 됩니다. (여기에서는  DBLinkName)

 

  - 2.1. Oracle에서 ora 설정을 하지 않고 데이터베이스 링크 생성 방법

Create database link [DBLinkName] connect to [USER_ID]
Identified by [USER_PASSWORD] using '(DESCRIPTION =
 (ADDRESS_LIST = 
  (ADDRESS = (PROTOCOL = TCP) (HOST = 192.168.1.1) (PORT = 1234) )
  )
 (CONNECT_DATA = 
  (SERVICE_NAME = ORACLE) 
 )
)'

 

 - 3. 테스트

select * from dual@DBLinkUseName

 

 

DBLink 삭제

DROP DATABASE LINK DBLinkUseName;

 

DBLink를 쓸 일이 없었으면 하지만.. 생각보다 자주쓰는것 같습니다.

+ Recent posts