특정 기본키가 없으면 insert를, 있으면 update를 쳐야하는 경우가 종종 존재한다. 이때마다 애플리케이션단에서 단순하게는 if문을 사용하여 처리했었는데 mysql에 이미 이런 구문이 있는걸 알게되었다. insert문에 on duplicate key update 옵션을 사용하거나 replace 문을 사용하면 된다. INSERT INTO test(col1, col2) VALUES('a', 'b') ON DUPLICATE KEY UPDATE col1 = 'a'; REPLACE test SET col1 = 'a', col2 = 'b'; 둘다 처음 보는 문법이라하더라도 기존에 SQL을 어느정도 사용했던 사람이라면 직관적으로 알 수 있을거라고 본다(혹시 모르겠으면 댓글을...). 비슷한 용도기때문에 뭘 써야..
에러내용 : is not allowed to connect to this MYSQL server로컬에서는 접속이 가능한데 다른 컴퓨터에서 접근할때 나는 에러. 권한이 없어서 발생하는 것이다. 해결법 : grant all privileges on *.* to root@'권한을 부여할 IP' identified by 'password' with grant option; 에러내용 : the last packet send successfully to the server was 0 milliseconds ago.해결법(우분투 기준) : /etc/mysql 경로에 있는 my.cnf 실행 vi my.cnf 쭉쭉 내리다보면 bind-address 라는 항목이 있다. 해당 항목이 127.0.0.1로 되어있다면 해당 항목..
preference => appearence 에서 글꼴 변경하면 된다.변경후 재시작.
인덱스 확인 방법 SELECT * FROM USER_INDEXES WHERE TABLE_NAME='/*테이블명*/ ' ; 인덱스를 확인했으니 그 키가 되는 컬럼을 알아보는방법은... SELECT * FROM USER_IND_COLUMNS WHERE TABLE_NAME='/*테이블명*/ ' ; 이라 하면 모든 인덱스의 컬럼이 다 나오고 해당 인덱스의 컬럼만 보고싶다면 SELECT * FROM USER_IND_COLUMNS WHERE INDEX_NAME='/*인덱스명*/';[출처] Oracle Table Index Column(오라클 테이블 인덱스 확인)|작성자 똥스배스
보통 테이블 만들때create table 테이블명(컬럼1 number primary key,컬럼2 number primary key);이렇게 하게되면 기본키 에러가 발생한다.기본키는 복수가 되는데 왜? 라는 의문을 가질수 있지만 '기본키를 구성하는 컬럼이 복수일 수는 있어도''기본키가 복수일 수는 없다' 라고 생각하면 이해가 쉬울 것 같다. 그럼 기본키를 구성하는 컬럼을 복수로 하기위해선 어떻게 하느냐 create table tab ( 컬럼1 number, 컬럼2 number, CONSTRAINT 기본키이름 PRIMARY KEY (컬럼1, 컬럼2) ); 이런식으로 사용하면 된다.
원래 시퀀스 만드는것보다select nvl(max(컬럼명), 0) + 1 from dual; 형식으로 증가값을 만드는걸 선호했는데오늘 그렇게 했다가 상사분께 혼났다. 이론적으로 내부에서 어떻게 차이가 있는지까지는 알려주시지않았지만 저렇게 사용하는것 보다는 시퀀스를 만들라고 하셔서.. 시퀀스 만드는법에 대해 포스팅을 하려한다. 시퀀스 생성법 CREATE SEQUENCE 시퀀스명 INCREMENT BY 증가값 START WITH 시작값 MAXVALUE n 또는 NOMAXVALUE MINVALUE n 또는 NOMINVALUE CYCLE 또는 NOCYCLE CACHE 또는 NOCACHE; START WITH 까지만 써도 생성이 된다.최대값, 최소값 까지는 뭔말인지 알겠는데 cycle 이랑 cashe는 잘 모르겠..
count로 추출할 데이터가 있어서 오전시간 내내 count 함수가지고 이짓저짓했는데데이터가 있는 컬럼의 개수는 잘 가져오는데 데이터가 없는 경우 0이나 null 도 아니고 아예 데이터를 안가져오길래 그걸 어떻게해야하는지 고민하다가 알게된 쿼리.잘 기억해놔야겠다. select req_no , count(*) , count(decode(prg_cd, '40000',1 )) finish , count(decode(prg_cd, '50000',1 )) cancel from mtn_req_lst group by req_no;
되게 간단한건데 오늘 새롭게 알게되서 정리한다.난 여태 한 테이블에 기본키가 2개 이상의 컬럼으로 이루어져있으면그게 각각의 키로 인식해서 두 컬럼 모두 개별적으로 중복이 되면 안되는줄알았다.그래서 두테이블간에 관계를 맺을때 식별자와 비식별자관계가 무슨 차이인지 잘 몰랐는데2개 이상의 컬럼을 개별적으로 보는게 아니라 모두 합쳤을때 중복이 되면 안되는거였다. 즉, A컬럼과 B컬럼이 기본키로 잡혀있다고 가정할때 내가 여태 잘못알고있던 방식은 A는 A끼리 중복이 되면 안되고 B는 B끼리 중복이 되면 안되는줄알았는데 그게 아니고 [A = 1 B = 1], [A = 1, B = 2] 와 같이 두 컬럼 모두 중복이 아니라면 이 데이터는 무결성 원칙을 지키는 것이다. A컬럼과 B컬럼이 같이 기본키일때 B컬럼만 기본키일..
- Total
- Today
- Yesterday
- db
- DesignPattern
- OOP
- generics
- code
- toby
- programming
- javascript
- JavaScript Core
- EffectiveJava
- Jackson
- go-core
- Git
- Kotlin
- TEST
- Design Pattern
- 정규표현식
- Spring
- servlet
- java8
- MySQL
- frontend개발환경
- clean code
- JPA
- mariadb
- backend개발환경
- java
- spring cloud
- frontcode
- http
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |