[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


[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

 


[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;

 

 


[Ubuntu] Maria DB 설치하기


저는 개인적으로 DB 서버를 구축시엔 오픈소스와 여러 이유로 항상 Maria DB를 선택하곤 합니다.

오늘은 제가 좋아하는 Maria DB 설치방법을 알아겠습니다.

 

 - update하기 (필요시)

sudo apt update

 

 - Maria DB Server 설치하기

sudo apt install mariadb-server

 > 디스크 공간 사용 여부 (Y/n)이 나오면 y를 누르고 엔터를 하면 설치가 시작됩니다.

 > 설치가 완료되면 Maria DB의 보안에 대해서 설정할 수 있습니다.

sudo mysql_secure_installation

 > 루트 계정의 암호 설정 등 자신이 원하는 옵션을 취향에 따라 선택해주면 됩니다.

 > 1. Change the root password?_루트패스워드를 바꿀것인지? (개인적으론 y권장)

  -> 이후 루트패스워드 변경

 > 2. Remove anonymous users?_익명사용자를 지울것인지? 

 > 3. Disallow root login remotely?_외부 접속시(원격으로 접속시) root 로그인 가능 여부를 막을것인지? (개인적으론 y권장)

 > 4. Remove test database and access to it?_test 데이터베이스와 접속권한을 지울것인지?

 > 5. Reload privilege tables now?_권한 변경시 reload 할것인지?

 -- 잘 읽어보시고 보안설정하시면 될 것 같고, 잘 모르겠다 싶으면 모두 y를 권장합니다.

 --- 선택여부는 개인의 판단입니다. *보안을 위한 권장일 뿐이지, 강요는 아닙니다.

 

 

 - 설치 완료가 되었는지 root로의 로그인

sudo mysql -u root -p

 > 패스워드는 위에서 설정한 루트 암호를 넣어주시면 됩니다.

 ** sudo권한이 아닌 상태(mysql -u root -p의 경우) 에서 로그인을 하려다보면 "ERROR 1698 (28000) : Access denied for user 'root'@'localhost'"에러가 나므로, sudo권한을 꼭 넣어주셔야합니다.

 > 로그인 후 계정 생성은 Database 카테고리로..

+ Recent posts