int(11) auto increment 최대 4294967295 이후에는 error

unsigned BIGINT 최대 18446744073709551615 까지 사용 가능 



-- 테이블의 상태 확인

show table status where name='T_HADOOP_LATEST_METRICS';

+-------------------------+--------+---------+------------+-------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+

| Name                    | Engine | Version | Row_format | Rows  | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time         | Update_time | Check_time | Collation       | Checksum | Create_options | Comment |

+-------------------------+--------+---------+------------+-------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+

| T_HADOOP_LATEST_METRICS | InnoDB |      10 | Compact    | 18124 |            144 |     2621440 |               0 |      7913472 |   4194304 |     4294967295 | 2017-11-06 13:57:16 | NULL        | NULL       | utf8_general_ci |     NULL |                |         |

+-------------------------+--------+---------+------------+-------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+

1 row in set (0.00 sec)



-- 시퀀스 조회 (20억 이상)

SELECT table_name,table_comment,table_schema,table_type,engine,

version,row_format,table_rows,avg_row_length,data_length,

max_data_length,index_length,AUTO_INCREMENT,create_time,table_collation,

CEILING((data_length+index_length)/1024/1024) AS total_mb,

CEILING((data_length)/1024/1024) AS data_mb,

CEILING((index_length)/1024/1024) AS index_mb

FROM information_schema.tables 

WHERE table_schema='cloumon'

and Auto_increment > 2000000000

ORDER BY Auto_increment DESC

;


+-------------------------+---------------+--------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+----------------+---------------------+-----------------+----------+---------+----------+

| table_name              | table_comment | table_schema | table_type | engine | version | row_format | table_rows | avg_row_length | data_length | max_data_length | index_length | AUTO_INCREMENT | create_time         | table_collation | total_mb | data_mb | index_mb |

+-------------------------+---------------+--------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+----------------+---------------------+-----------------+----------+---------+----------+

| T_HADOOP_LATEST_METRICS |               | cloumon      | BASE TABLE | InnoDB |      10 | Compact    |      18628 |            140 |     2621440 |               0 |      7913472 |     4294967295 | 2017-11-06 13:57:16 | utf8_general_ci |       11 |       3 |        8 |

| T_HOST_LATEST_METRICS   |               | cloumon      | BASE TABLE | InnoDB |      10 | Compact    |      17253 |             92 |     1589248 |               0 |      3178496 |     4294967295 | 2017-11-06 13:57:18 | utf8_general_ci |        5 |       2 |        4 |

| T_HBASE_LATEST_METRICS  |               | cloumon      | BASE TABLE | InnoDB |      10 | Compact    |      14489 |            182 |     2637824 |               0 |      8454144 |     4142014594 | 2017-11-06 13:57:17 | utf8_general_ci |       11 |       3 |        9 |

| T_MR_LATEST_METRICS     |               | cloumon      | BASE TABLE | InnoDB |      10 | Compact    |       3402 |            105 |      360448 |               0 |      1081344 |     2501997189 | 2017-11-06 13:57:20 | utf8_general_ci |        2 |       1 |        2 |

+-------------------------+---------------+--------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+----------------+---------------------+-----------------+----------+---------+----------+

4 rows in set (2.59 sec)



-- 시퀀스 초기화

use cloumon;

alter table T_HADOOP_LATEST_METRICS auto_increment=1;

alter table T_HOST_LATEST_METRICS auto_increment=1;

alter table T_HBASE_LATEST_METRICS auto_increment=1;

alter table T_MR_LATEST_METRICS auto_increment=1;

'MySQL' 카테고리의 다른 글

MySQL EXPLAIN ANALYZE  (0) 2019.10.02
MySQL Hash Join Optimization  (0) 2019.10.02
Specified key was too long (부제: mysql 인덱스 생성 힘드네)  (0) 2017.06.09
MySQL 설치 (5.6 or 5.7)  (0) 2017.03.09
MySQL load data  (0) 2016.10.27



[출처] http://cafe.naver.com/tonkjsp.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=362

[출처 및 참조]  http://blog.naver.com/c3mosi?Redirect=Log&logNo=60048716887

[출처 및 참조] * 오라클 정보공유 커뮤니티 oracleclub.com

                     * http://www.oracleclub.com

                     * http://www.oramaster.net

                     * 운영자 : 김정식

 

전에 SQL 쿼리 정리하면서 대략적으로 정리하였지만 여기서는 점더 집중적으로 정리하여 보겠습니다.

 

http://cafe.naver.com/tonkjsp/218

 

》오라클에서는 시퀀스

》MSSQL에서는 오라클의 시퀀스 대용으로 IDENTITY(초기값, 증가값)로 사용

   http://cafe.naver.com/tonkjsp/309

》MySQL에서는 오라클의 시퀀스 대용으로 auto_increment 를 사용합니다.

   다른 DB 서버에 비해 굉장히 좋지는 않습니다. 그래도 기능은 기능이니 한번 설명은 하고 넘어가 가겠습니다.

 

   CREATE TABLE 'tbl_name' (

       'column_name1' column_type  [column_constraint] auto_increment Primary Key,

       'column_name2' column_type 

     .....

   )

 

   위 쿼리에서 column_name1의 필드 타입이 int 라고 가정하면 이 필드에는 0부터 입력될 때마다 1씩 증가된 값이

   자동으로 활당하게 된다고 하네요 ^^

 

 [시퀀스 특징]

 

 ① 유일(UNIQUE)한 값을 생성해주는 오라클 객체다.

 ② 시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성할 수 있다.

     (MySQL은 불가능 하다, 즉 증가 값을 설정할 수 없습니다.)

 ③ 보통 PK 값을 생성하기 위해 사용됩니다.

 ④ 메모리에 Cache되었을 때 Sequence 값의 액세스 효율이 증가 합니다.

 ⑤ SEQUENCE는 테이블과는 독립적으로 저장되고 생성됩니다. 따라서 하나의 SEQUENCE를

     여러 테이블에서 쓸 수 있습니다.

     (오라클만 가지고 있는 독특한 특징 중 하나 입니다. 다른 DB 서버는 이렇게 되지 않더라고요)

 

 [시퀀스 생성]

 

  CREATE SEQUENCE seq_name

  [START WITH n]

  [INCREMENT BY n]

  [MAXVALUE n or NOMAXVALUE]

  [MINVALUE n or NOMINVALUE]

  [CYCLE or NOCYCLE]

 

   - START WITH : 시퀀스의 시작 값을 지정합니다. 

                          예) n을 1로 지정하면 1부터 순차적으로 시퀀스 번호가 증가합니다.

   - INCREMENT BY : 시퀀스의 증가 값을 말합니다.

                          예) n을 1로 하면 1씩 증가하고 2로 하면 2씩 증가 됩니다.

   - MAXVALUE : 시퀀스가 증가할 수 있는 최대값을 지정할때 사용한다.

   - NOMAXVALUE : 시퀀스의 값을 무한대로 지정할 때 사용한다.

   - MINVALUE : 시퀀스의 최소값을 지정할 때 사용한다.

   - NOMINVALUE : 기본값이 1 이며 , NOMINVALUE를 지정할 경우 최소값은 무한대가 된다.

 

  사용예)

  SQL> CREATE SEQUENCE tbl_seq

           START WITH 1

           INCREMENT BY 1

           MAXVALUE 100000;

           -- 시작 값은 1이고 1씩 증가하며, 최대값이 100000이 되는 시퀀스를 생성했다는 의미

 

  SQL> INSERT INTO tbl_name(col1,col2, col3) VALUES(tbl_seq.NEXTVAL,'JAVA','C++');

           -- tbl_name는 컬럼값을 읽할 때 일일이 다음 값을 기억하지 않아도 NEXTVAL을 사용하여 자동으로 입력할

          수 있다.  MSSQL 나 MySQL은 별도의 필드를 지정하지 않고 바로 증가 시킨다.

   

  [CURRVAL, NEXTVAL]

 

  - CURRVAL : 현재 값을 반환 한다.

 

     예) TEST 위에서 작성된 시퀀스 사용

     SELECT  tbl_seq.CURRVAL FROM DUAL;

    

     ※ SEQUENCE의 마지막 값 조회

     SELECT LAST_NUMBER FROM USER_SEQUENCES WHERE SEQUENCE_NAME='seq_name';

 

  - NEXTVAL : 현재 시퀀스값의 다음 값을 반환한다.

                     유의할 사항이 있는데 , NEXTVAL 한번 하게하면 전에 값으로 되돌리는 것이 불가능하다.

   

    예) TEST 위에서 작성된 시퀀스 사용

    SELECT tbl_seq.NEXTVAL FROM DUAL;

 

  - 사용규칙

 

     ① NEXTVAL, CURRVAL을 사용할 수 있는 경우

 

        ㉠ subquery 가 아닌 select 문

        ㉡ insert문의 select 절

        ㉢ insert문의 value  절 ← 초보 개발자에게 가장 많이 쓰이는 방식이죠 ^^

        ㉣ update문의 set 절

        

     ② NEXTVAL, CURRVAL을 사용할 수 없는 경우

      

        ㉠ view의 select

        ㉡ distinct 키워드가 있는 select 문

        ㉢ group by, having , order by절이 있는 select 문 , union all 문 사용시

           예1)

           INSERT INTO tbl_name(col1, col2)  SELECT col1, seq_name.nextval from tbl_name order by col2

           예2)

           SELECT seq_name1.nextval FROM DUAL

           UNION ALL

           SELECT seq_name2.nextval FROM DUAL

 

        ㉣ select , delete , update의 subquery

        ㉤ create table, alter table 명령의 default 값

            예)

            CREATE TABLE tbl_name(

                 col1 number default seq_name.nextval,

                 col2 varchar2(10)

            )

            ORA-00984: 열을 사용할 수 없습니다. ← 에러메시지 ...

 

     [주의] 한 세션에서 CURRVAL, NEXTVAL는 적어도 INSERT가 한번이라도 발생해야 사용가능합니다.

 

 [시퀀스의 수정 및 삭제] 

 

 ALTER SEQUENCE seq_name

 [INCREMENT BY n]

 [MAXVALUE n or NOMAXVALUE]

 [MINVALUE n or NOMINVALUE]

 

 - INCREMENT BY : 시퀀스의 증가 값에 대한 수정 값

   예) n을 1로 하면 1씩 증가로 수정되고  2을 사용하면  2씩 증가로 변경된다.

 - MAXVALUE : 시퀀스가 증가할 수 있는 최대값을 수정할 때 사용한다.

 - NOMAXVALUE : 시퀀스의 값을 무한대로 수정할 때 사용한다.

 - MINVALUE : 시퀀스의 최소값으로 수정 할 때 사용한다.

 - NOMINVALUE : 기본값이 1 이며 , NOMINVALUE를 지정할 경우 최소값은 무한대가 수정할 수 있다.

 

  [주의] START WITH는 수정할수 없다.

  저 같은 경우는 그냥 수정보다는 삭제하고 다시하는 면이 더 편할 수 있습니다. 

  → seq_board_categroy,  seq_board_management 시퀀스명

 

  drop sequence seq_board_categroy;
  drop sequence seq_board_management;

 

  create sequence seq_board_categroy   start with 1 increment by 1 nocache;
  create sequence seq_board_management start with 1 increment by 1 nocache;

  

 DROP SEQUENCE seq_name

 

 사용예)

 SQL>ALTER SEQUENCE tbl_seq

          INCREMENT BY 2

         CYCLE ;

         -- 2씩 증가하도록 수정하고 최대값을 넘으면 다시 처음부터 순환하도록 수정한 것을 의미

 

 SQL> DROP SEQUENCE tbl_seq;

        -- 시퀀스 삭제

 

오라클에서 시퀀스(sequence) 사용하는 방법을 알아보겠습니다.

오라클의 시퀀스는 MySql이나 MSSQL의 auto_incremet(자동증가)와 같은 것이라 생각하면 되겠습니다.

이것은 중복되지 않는 값을 주기 위해 사용하는데,,,

만약, 회원 1000명에게 회원번호를 부여해야 하는데 서로 중복되지 않는 값을 부여해야 할 경우,

처음 회원에게는 1번을, 그 다음회원에게는 2번을,,,, 1000번까지 각각 부여할 수 있을 겁니다.

즉, 지금까지 부여한 번호를 간직하고 있다가 다음 회원이 왔을 때 그 다음 번호를 부여하는 역할을 시퀀스라는 넘이 해줍니다.

 
 

시퀀스 테스트를 위해 임의의 테이블을 만들어 보겠습니다.

CREATE TABLE test (
            sq_id NUMBER
,            sq_name VARCHAR2(20)
);



 
이제 test라는 테이블에 시퀀스를 만들어 보겠습니다.
 

CREATE SEQUENCE sq_test
INCREMENT BY 1
START WITH 10000;



INCREMENT BY 1 : 자동 증가 칼럼의 증가치가 1이라는 뜻
START WITH 10000 : 자동 증가 칼럼이 10000부터 증가한다는 뜻


CREATE SEQUENCE 라는 문장을 사용하여 sq_test 이름의 시퀀스를 만들었습니다.

이제부터 sq_test를 사용하여 sq_id를 자동 증가 칼럼으로 사용할 수가 있습니다.

 

 
그럼, 데이터를 입력해서 확인해 보겠습니다.
 

INSERT INTO test(sq_id, sq_name) VALUES(sq_test.NEXTVAL, '이순신');


 
여기서, sq_id에 MYSQ.NEXTVAL이라는 데이터를 입력했는데, 시퀀스의 다음값을 가져오게 됩니다.
(시퀀스를 사용할 때 NEXTVAL이라는 슈도 칼럼(Pseudo-column)을 사용합니다.)

그럼, 실제로 sq_id에 값이 어떻게 들어갔는지 확인해 보겠습니다.
 

SELECT * FROM test;


SQ_ID            SQ_NAME
----------------------
10000            이순신



 
시퀀스 생성시에 START WITH 10000; 라고 했기 때문에 10000이라는 값이 들어갔습니다.

다시 한번 데이타를 입력해 보겠습니다.
 

INSERT INTO test(sq_id, sq_name) VALUES(sq_test.NEXTVAL, '홍길동');


SELECT * FROM test;


SQ_ID            SQ_NAME
----------------------
10000            이순신
10001            홍길동

 

 
10000 에서 1이 자동증가하여 10001이라는 값이 입력되었습니다.

이번엔,,, SQ_NAME이 '홍길동'인 로우를 지워보겠습니다.
 

DELETE FROM test WHERE sq_name = '홍길동';


SQ_ID            SQ_NAME
----------------------
10000            이순신

 

 
다시 새로운 데이터를 하나 넣겠습니다.
 

INSERT INTO test(sq_id, sq_name) VALUES(sq_test.NEXTVAL, '김철수');


SELECT * FROM test;


SQ_ID            SQ_NAME
----------------------
10000            이순신
10002            김철수


 

 
sq_id에 10001이 아니라 10002가 들어가 있습니다.

왜냐하면, 시퀀스는 그 특성상 일단 한번 증가하면 그 값이 절대 다시 줄어들지 않기 때문입니다.

이것은 mysql이나 mssql의 auto increment(자동증가)와도 동일합니다.
 


시퀀스를 생성할 때, 값의 범위를 지정할 수 있습니다.

CREATE SEQUENCE sq_test
INCREMENT BY 1
START WITH 100;
MINVALUE 1
MAXVALUE 1000



이렇게 시퀀스를 생성하면, 100부터 시작하고 값은 1~1000 사이의 값만 생성을 시킬 수 있습니다.


[출처] http://iurim.com/uboard.asp?id=webstudy_tip&cate_no=307&u_no=310&code=webstudy

'OraclE' 카테고리의 다른 글

ASSM에서 Freelist 관리  (0) 2008.09.25
DBA Table / View 정리  (0) 2008.09.17
Windows 32bit OS 에서 Oracle Memory Sizing  (0) 2008.08.13
BITMAPPED INDEX  (0) 2008.08.12
REVERSE KEY INDEX  (0) 2008.08.12

+ Recent posts