[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

 


[Spring Boot] 에러해결 : Invalid bound statement (not found)


 - Project.다원의 Ensemble 개발을 진행하면서 나온 문제입니다.

 

사실 어제 삼성의 언팩 행사 틀어놓고 Ensemble 개발을 진행했었는데,

블로그에 글이 안올라온 이유가 딱히 보여드릴만한게 없어서(...) 그랬습니다.. (-_-)...

에러 하나가지고 어제 오늘 잡아먹어버렸네요;; 

 

이번시간에는 해당 에러에 대한 삽질을 하며 결국 어떻게 해당 에러를 해결했는지를 적어볼까합니다.

 


 

해결을 하고보니 진짜 별 문제 아닌데 왜 이리 오래걸렸는지.. (항상 그렇죠 뭐.. 삽질 엄청하다가 해결하면 어.... 아..... 하는.. 그런거 ㅋㅋㅋ - 많은 개발자분들이 공감하지 않을까 싶네요.)

DB연동은 예~~~전에 다끝내놨는데 이제와서 Invalid bound statement (not found): ~~~ 에러가 뜨길래 뭐지? 왜 못찾지? 어디가 문제지? 하면서 열심히 찾아다녔습니다.

 

하지만 열심히 찾아봐도 뭐가 문제인지 모르겠다는 것... (결국 찾아서 해결은 했지만.)

 

원인

저의 경우 DB 연동이랑은 다 문제없이 잘 되었는데, 결국 찾은 문제는 Mapper의 xml단의 id와 interface단의 function명이 달라 생긴 문제였습니다.

당시 function명을 'getAllCode' (공통코드단에서 모든 코드를 가져오는 함수)로 해두었는데 id는 'getAllCodes'로 한 것. (ㅡ..ㅡ 지금 생각해도 s하나 못본거 때문에 삽질한걸 생각하면..)

 

 

해결

function명을 바꾸긴 귀찮아서 (이미 다른쪽에는 다 선언해서 사용중이었..) xml단의 id를 'getAllCode'로 interface와 통일해줌으로써 해결했습니다.

 


눈이 나빠져서 그런가.. (사실 안경써야하는데, 안경이 오래되어 뿌옇게 보여가지고 안쓰게되요. 아.. 안경(블루라이트 차단, 도수있는)값 너무 비쌉니다.ㅠㅠ)

그거 하나를 못 찾아서 몇 시간을 날려먹었네요.

어제 이거 해결하고 자겠다고 새벽 3시쯤 잤는데..

오늘은 시작한지 한시간(...?)걸려 해결했습니다. (하하..)

어찌되었든 끙끙거리다 해결은 되었으니, 또 다음 스탭으로의 개발로 나아갈 수 있을 것 같네요.

 

 

버전정보 (v1.0)

 - v1.0 2020.08.06 배포

 

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

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

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

 

Karzin

abbeea@naver.com




Project.다원 Ensemble_개발(1)_DB 구축 및 TABLE 생성


오늘부터 개발 시작이니 진행한 부분 들고왔습니다.

오늘은 DB구축하고 TABLE 생성 및 관리용 사용자 추가 및 권한부여 하였습니다.

아까 변경된 공통코드의 ER Diagram과 Class Diagram 게시글 올리고나자마자

샤워하고 바로 DB작업 진행하다가 어디선가 벌레가 나타나는바람에 조금 늦어졌네요 ㅠㅠ;;;;; (벌레 싫어... 한 40분 날려먹었...)

 


DB 툴을 쓸까하다가 오늘은 귀찮아서 그냥 Console로 작업했습니다.

저는 그냥 Console이 편해서........ (어줍잖은 무료 툴 쓰느니 차라리...)

특히 저는 vim계열을 아직까지도 좋아해서 ㅋㅋㅋㅋㅋㅋㅋ

1. DB 구축

show databases;

데이터베이스 명은 dawon_erp_ensemble로 만들었습니다.

 

2. TABLE 생성

show tables;

 - common_code : 공통코드

 - employee : 사원 (임시)

 - equip_status : 장비 정보

 - equipment : 장비

 - file : 파일

 - project : 프로젝트 (임시)

 

3. 관리용 사용자 추가 (Back-End단에서 연결에 필요한 계정)

select user from user;

 - dawon

 - ensemble

 두개의 테스트 계정 추가. 일단은 테스트용으로 진행하고 추후 연동시 user는 변경될수도 있습니다~

 

 


솔직히 DB 구축하는거 어려운것도 아니거니와, table 생성하는거야 이미 설계 문서가 있는 만큼 많은 시간 들일 필요없이 금방 끝냈습니다.

단지 위에서 말한거처럼 벌레가... 으아!!!! (흐름 다 끊기고 ㅠㅠㅠ)

자취생에게는 벌레가 아무리 익숙하게 보여도 익숙하지가 않네요..ㅠㅠㅠ (이젠 어디서 '딱딱' 소리만 들려도 바로 천장부터 확인하는...)

특히 밤 늦게까지 불을 켜놓고 작업을 해서 그런지 딱정벌레(?)류가 자꾸 어디서 기어들어오네요.ㅠㅠㅠㅠㅠㅠㅠ

 

어쨌든 DB는 금방 마무리 되었고, 이제는 저번에 다운로드한 IDE(Eclipse)에 Spring 환경만 구축해주면 될 것 같네요!

 -> Spring 환경 구축 -> DB연동작업 -> 개발 시작 -> (프로토타입)테스트

이제 나머지는 위 순서로 진행하면 될 것 같고, 개발은 아마 설계자료가 있는 만큼 금방 마무리 되지 않을까 싶네요.

 

작업하며 참고한 설계 문서

 - Project.다원 Ensemble_설계(3)_장비관리 ER Diagram

 

Project.다원 Ensemble_설계(3)_장비관리 ER-Diagram

Project.다원 Ensemble_설계(3)_장비관리 ER-Diagram 어제 장비관리 프로세스를 작성을 하고, 머릿속에 있는동안 얼른 정리해버리자 해서 ER-Diagram을 작성했습니다. ER-Diagram의 작성은 여느때처럼 PPT를 이�

karzin.tistory.com

 - Project.다원 Ensemble_설계(9)_장비관리 Class Diagram

 

Project.다원 Ensemble_설계(9)_장비관리-Class Diagram

Project.다원 Ensemble_설계(9)_장비관리-Class Diagram 휴.. 밥먹고나서 샤워하고 부지런히 만들기시작해서 드디어 끝났습니다! (지금시각 1시 4분) 후반부로 갈수록 졸림이 심해져서;; 겨우겨우 참고 마��

karzin.tistory.com

 - Project.다원 Ensemble_설계(10)_공통코드 ER Diagram, Class Diagram

 

Project.다원 Ensemble_설계(10)_공통코드-ER Diagram, Class Diagram

Project.다원 Ensemble_설계(10)_공통코드-ER Diagram, Class Diagram 흠.. 어제 장비관리 Class Diagram을 올리면서 생각했지만, 공통코드 부분의 ER Diagram이 어떻게 설계가 되었는지 설명한적이 없는것 같..

karzin.tistory.com

 

 

버전정보 (v1.0)

 - v1.0 2020.07.16 배포

 

 

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

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

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

 

Project.다원은 개인(karzin)이 기획, 분석, 설계, 디자인, 개발, 유지보수 등

모든 부분을 혼자 맡아 진행하는 개인 프로젝트입니다.

Project.다원 Ensemble

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] 계정 생성 및 권한 부여하기


 

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;

 

+ Recent posts