posted by 지긋이 2021. 3. 2. 14:55

Mysql에서 Oracle을 생각하고 UPDATE를 진행하다 발생한 오류이다;
You can't specify target table '테이블명' for update in FROM clause

원인은 아래와 같이 같은 테이블을 참조. 즉, Where에 같은 테이블을 참조하면 발생되는 에러이다.

UPDATE 테이블명1 BB
SET BB.PASSWORD = (select AA.password from 테이블명1 AA WHERE AA.user_id = 'rosebay'), 
      BB.UPDATED_BY = 'rosebay', BB.UPDATE_DATE = now()
WHERE BB.user_id = 'wildflower'   ;

해결방법은 subquery 절을 한번 더 감싼 후(임시테이블로 처리) UPDATE 한다.

posted by 지긋이 2020. 9. 23. 17:55

오라클과 같은듯 다른점이 많은 MySQL.
회사 주요 사이트가 MySQL로 구성이 되어있어서, 관련 정보를 기록해둔다.

1. DDL
1) 생성
2) 수정
ALTER
 TABLE 테이블명
MODIFY COLUMN 컬럼명 DECIMAL(7,2);

※ 참고 오류 : Data truncation: Out of range value for column '컬럼명' at row 1 와 같은 오류 발생시
입력된 Data가 데이터 타입 크기를 초과해서일 수 있다. 이 경우 크기를 변경해준다.
-- 기존 DECIMAL(5,2) 에서 문제 발생 => DECIMAL(7,2)

2. DML

2020. 9. 9. 14:32

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

posted by 지긋이 2020. 8. 6. 15:00

최근 오라클만 계속 사용하다 보니, 정말 기본정보이지만 MySql을 제대로 해 본 적이 없어
자주 사용하는 명령어의 기본적인 차이점과 문법에 대해 공부겸 기록한다.

1. 현재 시간
! oracle은 sysdate
1) DATE 타입의 컬럼에 현재 날짜를 입력하고 싶을 때 
NOW() 함수를 사용하는 방법
ex)  select now() as time from dual;
: 2020-08-06 14:57:06.02) 날짜가 들어갈 컬럼(BOARD_YMD)의 데이터 타입을 TIMESTAMP DEFAULT NOW()를 주고
INSERT 시 DEFAULT값을 입력하는 방법
ex)  CREATE TABLE USER(
     USER_ID    VARCHAR(20) NOT NULL,
     USER_TYPE VARCHAR(10) NOT NULL,
     CRE_DATE  TIMESTAMP DEFAULT NOW(),
     PRIMARY KEY(USER_ID)
    );
insert into user values("rosebay","1",DEFAULT);
1-1. 현재 날짜 +- 처리(1년전/현재/1년후)
1-1-1) Oracle : select sysdate -365 as A, sysdate as B, sysdate+365 as C from dual;
19/09/08 | 20/09/07 | 21/09/07
1-1-2) Mysql
select date_add(now(),interval -365 day) as A, now() as B, date_add(now(),interval 365 day) as C from dual;
select date_add(now(),interval -12 Month) as A, now() as B, date_add(now(),interval 12 Month) C from dual;
select date_add(now(),interval -1 Year) as A, now() as B, date_add(now(),interval 1 Year) C from dual;
2019-09-08 15:06:01.0 | 2020-09-07 15:06:01.0 | 2021-09-07 15:06:01.0

2. NULL 치환
1) oracle 
ex) select nvl(user_id,'1234') as id from dual;
2) mysql
ex) select infull(user_id,'1234') as id from dual;

3. 날짜 포맷 변환
1) oracle 
ex) select to_char(sysdate,'YYYY-MM-DD HH:MI:SS') as time from dual;
  => 2020-08-06 04:00:50

2) mysql
! %Y는 4자리년도(2020)이고, %y는 2자리년도(20)이다. 즉, 대소문자에 따라 다르게 표기됨.
ex)
select date_format(now(),'%Y-%m-%d %H:%i:%s') as time from dual;
  => 2020-08-06 15:59:56

4. 문자 합치기
1) oracle
select '**'||'test'||'**' as text from dual;
  => **test**
2) mysql
select concat('**','test','**') as text from dual; 
  => **test**