본문 바로가기

DB이야기

mysql 컬럼 추가시 순서 지정 1. 컬럼 추가 ALTER TABLE table_name ADD COLUMN new_column_name VARCHAR(10) AFTER exist_column_name; => exist_column_name 후에 new_column_name을 추가 2. 첫번째 컬럼으로 추가 ALTER TABLE table_name ADD COLUMN new_column_name FIRST; 반면에 오라클은 12c 이후에 모든 컬럼 추가시 추가하과자 하는 위치 이후의 기존 column을 모두 invisible 상태로 변경후 -> new_column_name 추가 -> invisible을 visible로 모두 변경 하면 됨 더보기
Delete를 빠르게 처리하기 mysql 계열에서 대량의 데이터를 삭제시 delete from xx inner join yy 등으로 하였을 경우 데이터가 적으면 빠르게 지워지지 않는다. 이럴때. in 절을 이용하여 row를 제한 한다면 빠르게 처리가 가능하다. delete from xx where 1=1 and (pk_column_lists ) in (select pk_column_lists from yy where column_name @@값 ) subquery에 limit절을 이용하면 문법 오류가 발생하니, subquery의 테이블 view로 사용하고 view안에 limit를 이용하면 오류가 발생하지 않는다. 더보기
mysql과 오라클의 한글 저장 byte mysql은 character 기준으로 database를 euc.KR로 지정하고 테이블을 생성하면 create table test (c1 char(50)); c1 컬럼에 한글 50글자(100bytes), 영문 100(100 bytes)글자가 입력 가능하다. 오라클에서는 bytes 기준으로 mswin949로 설정 되어 있다면 create table test(c1 char(50)); c1 컬럼에 한글 25글자(50bytes), 영문 50(50 bytes)글자가 입력 가능하다. 더보기
unix의 directory 복사 cp -rp ts4 ts6 더보기
sql_id를 RAC 노드에 관계 없이 조회하기 예) SQL) @x1 1xdkdjfkdl(sql_id) x1.sql ------------------------------------------------------------------------------------------------------------------------------------------------------- SELECT t.plan_table_output FROM gv$sql v, TABLE(DBMS_XPLAN.DISPLAY_CURSOR('gv$sql_plan_statistics_all', NULL , 'ADVANCED ALLSTATS LAST', 'inst_id = '||v.inst_id||' AND sql_id = '''||v.sql_id||''' AND child_nu.. 더보기
조인으로 테이블 row 삭제하기 delete T_alias from test_table as T_alias JOIN join_table on T_alias.c1 = join_table.c1 where 1=1 and join_table.c2 > 1 and join_table.c2 < 10 ; 더보기
방화벽 오픈 여부 확인 보안에 의해 막혀 있지 않다면 아래와 같이 한다. telnet IP(xxx.xxx.xxx.xxx) PORT(1521) 이렇게 하면 화면이 바뀌거나 ']' 표시가 되면 해당 포트로 방화벽이 열려 있는것이다. 가끔, 보안에 의해 telnet이 막혀 있는곳이 있는데 이럴때는 curl -v telnet://IP(xxx.xxx.xxx.xxx):PORT(1521) 이렇게 하면 아래와 같은 메시지가 나온다. 성공시 : Connected to xxx.xxx.xxx.xxx port 1521 실패시 : Trying xxx.xxx.xxx.xxx ... 더보기
pq_replicate 오라클에서의 broadcast방식은 작은 테이블을 전체로 할당하는 방식이다. 다만, 분배와 전송이라는 두가지 오퍼레이션이 있어 실제 broadcast방식은 테이블이 커지면 성능에 영향을 주게 된다. 그래서 추가된 기능이 pq_repliacate방식이다. pq_distribute는 단순히 분배 방식만 지정만 한다. pq_replicate는 parallel 쿼리 수행시 parallel 프로세스에서 각각 전체 테이블을 조회하기 때문에 데이터 분배가 일어나지 않는다. 즉, pq_replicate 힌트가 사용된다는것은 패러렐 서브 프로세스가 전체 테이블을 읽는다고 생각하면 된다. 더보기
[mysql, oracle] 테이블 컬럼명 변경 mysql과 오라클의 컬럼명 변경 방법은 동일하다. alter table table_name rename column OLD to NEW; 더보기
mysql의 샘플 테이블 생성 오라클을 학습하기 샘플 테이블을 생성하면 employee, department등의 샘플 테이블과 테이블에 저장될 수 있는 데이터가 있다. mysql에서 데이터베이스를 만들고 샘플 테이블, 샘플 데이터를 저장하여 학습을 시작하는 경우가 있다. mysql의 샘플 데이터베이스를 생성할 수 있는 스크립트를 기록하려고 한다. 1. https://https://dev.mysql.com/doc/world-setup/en/ 2.Installation 선택 3. 4.world databse zip 선택 4. mysql -uroot -p sql> source c:/temp/world.sql; 더보기
글자가 짤린 상태로 저장 MYSQL에서 STRICT_MODE를 지정하지 않으면 자리수가 모자라거나, unsinged인데 minus값을 입력하면 0으로 저장되고 한다. 이렇경우 아래와 같이 해주시면 sql이 저장되지 않고 에러를 발생한다. 개발자가 원하는게 오류를 발생시키는것이 아닐까? [mysqld] sql_mode="NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES" 더보기
SPACE TRIM후 데이터 비교 오라클에서는 컬럼에 space를 입력한 후 다른 컬럼과 비교시 space로 값을 비교한다. mysql에서는 컬럼간 비교할때는 컬럼 길이를 큰 기준으로 하여 작은 컬럼에 space를 추가하여 비교한다. 또한 컬럼값 비교할때는 space를 trim한 후 비교하여 조심할 필요가 있다. sql_mode에서 ignore_space를 제거할지, strict_mode를 제거할지를 mysql 사용전에 결정하여야 한다. 테스트 예제 create table enc_test(c1 varchar(100), c2 varchar(100)); create table enc_test1(c1 varchar(100), c2 varchar(100)); insert into enc_test(c1, c2) values('x','a'); in.. 더보기