[ORACLE] 자동 증가 컬럼(Sequence) 사용하기

Database 2008.05.07 11:32 Posted by 애플자라

Unique Key를 생성하는 방법은 DBMS마다 차이가 있다.
MS-SQL은 IDENTITY를, MySQL은 auto_increment와 같이 쉽게 사용할 수 있는 방법이 있는데 오라클에서는 Sequence를 사용하여 다음과 같이 유사하게 구현할 수 있다


1. 자동증가컬럼을 사용하고자 하는 MYTABLE테이블을 생성한다.


       CREATE TABLE MYTABLE
               (ID NUMBER, NAME VARCHAR2(20));


2. CREATE SEQUENCE 라는 문장을 사용하여 SEQ_ID라는 이름의 시퀀스를 만든다.


       CREATE SEQUENCE SEQ_ID INCREMENT BY 1 START WITH 10000;

      -- INCREMENT BY 1 : 증가값은 1
      -- START WITH 10000 :  10000부터 증가


3.  테이블에 데이터 입력시에는 NEXTVAL이라는 슈도 칼럼(Pseudo-column)을 이용하여 시퀸스를 사용한다.


       INSERT INTO MYTABLE VALUES( SEQ_ID.NEXTVAL, '홍길동');

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

----------------------------------------------------------------------------------------------------------


* Sequence 구문


CREATE SEQUENCE sequence_name
       [START WITH n]
       [INCREMENT BY n]
       [MAXVALUE n | NOMAXVALUE]
       [MINVALUE n | NOMINVALUE]
       [CYCLE | NOCYCLE]


* START WITH
시퀀스의 시작 값을 지정합니다. n을 1로 지정하면 1부터 순차적으로 시퀀스번호가 증가 합니다.


* INCREMENT BY
시퀀스의 증가 값을 말합니다. n을 2로 하면 2씩 증가합니다.
START WITH를 1로 하고 INCREMENT BY를 2으로 하면 1, 3, 5,7,..
이렇게 시퀀스  번호가 증가하게 됩니다.


* MAXVALUE n | NOMAXVALUE
MAXVALUE는 시퀀스가 증가할수 있는 최대값을 말합니다.
NOMAXVALUE는 시퀀스의 값을 무한대로 지정합니다.


* MINVALUE n  | NOMINVALUE
MINVALUE는 시퀀스의 최소값을 지정 합니다.
기본값은 1이며, NOMINVALUE를 지정할 경우 최소값은 무한대가 됩니다


[사용규칙]


* NEXTVAL, CURRVAL을 사용할 수 있는 경우
   - subquery가 아닌 select문
   - insert문의 select절
   - insert문의 value절
   - update문의 set절


* NEXTVAL, CURRVAL을 사용할 수 없는 경우
   - view의 select절
   - distinct 키워드가 있는 select문
   - group by, having, order by절이 있는 select문
   - select, delete, update의 subquery
   - create table, alter table 명령의 default값


[수정과 삭제]


ALTER SEQUENCE sequence_name
       [INCREMENT BY n]
       [MAXVALUE n | NOMAXVALUE]
       [MINVALUE n | NOMINVALUE]
       [CYCLE | NOCYCLE]


START WITH는 수정할수 없습니다.
START WITH 절이 없다는 점을 빼고는 CREATE SEQUENCE와 같습니다.


DROP SEQUENCE sequence_name


자료참고 : http://www.oracleclub.com/

댓글을 달아 주세요

INSERT INTO mysql.user(User, Host, Password, ssl_cipher, x509_issuer,
x509_subject
) VALUES('username', '%', Password('password'), '', '', '');

댓글을 달아 주세요

[MYSQL] Charset Encoding

분류없음 2008.04.23 16:30 Posted by 애플자라
jdbc:mysql://localhost:3306/EMS51?characterEncoding=euckr

댓글을 달아 주세요

[MYSQL] 엔진구동방법

Database 2007.12.06 12:18 Posted by 애플자라

sudo bin/safe_mysqld --user=mysql -p 3306 -c euckr &

/mail/mysql/bin/mysqladmin shutdown - uroot -p

TAG MySQL, 엔진

댓글을 달아 주세요

[mysql]euckr에서 uft8로 변경 방법

Database 2007.08.30 00:10 Posted by 애플자라
* euckr에서 uft8로 변경 방법

mysql>SET character_set_client = utf8;
mysql>SET character_set_results = utf8;
mysql>SET character_set_connection = utf8;
mysql>ALTER DATABASE ems50 DEFAULT CHARACTER SET utf8;
commit;

반대로 * uft8에서 euckr로 변경 방법

SET character_set_client = euckr;
SET character_set_results = euckr;
SET character_set_connection = euckr;
ALTER DATABASE EMS51 DEFAULT CHARACTER SET euckr;
commit;


status로 확인

'Database' 카테고리의 다른 글

[ORACLE] 다른 계정으로 SQLPLUS 실행 시  (0) 2007.10.29
[DB] TRUNCATE  (0) 2007.08.30
[mysql]euckr에서 uft8로 변경 방법  (0) 2007.08.30
mysql실행  (0) 2007.08.30
[ORACLE] 캐릭터셋변경(10쥐로 테스트)  (2) 2007.08.30
[ORACLE]오라클 설치후 초기설정  (0) 2007.08.30

댓글을 달아 주세요

mysql실행

Database 2007.08.30 00:10 Posted by 애플자라
mysqld_safe --user=mysql &


root로 mysql실행을 하면 보안상 문제가 있다고 한다
mysql계정으로 실행

'Database' 카테고리의 다른 글

[DB] TRUNCATE  (0) 2007.08.30
[mysql]euckr에서 uft8로 변경 방법  (0) 2007.08.30
mysql실행  (0) 2007.08.30
[ORACLE] 캐릭터셋변경(10쥐로 테스트)  (2) 2007.08.30
[ORACLE]오라클 설치후 초기설정  (0) 2007.08.30
select top 10 ..ORACLE, MSSQL  (1) 2007.08.30
TAG MySQL

댓글을 달아 주세요

select top 10 ..ORACLE, MSSQL

Database 2007.08.30 00:09 Posted by 애플자라
TOP 10개만 가져오는 쿼리문

[ORACLE]

SELECT *
  FROM [TABLE]
  WHERE ROWNUM <= 10


[MSSQL]

 SELECT TOP 10 *
  FROM [TABLE]


[MYSQL]

 SELECT *
  FROM [TABLE]
LIMIT 0, 3
TAG DB, mssql, MySQL, Oracle

댓글을 달아 주세요

  1. solspapa 2009.07.15 16:52  댓글주소  수정/삭제  댓글쓰기

    화면이 이쁘네요..
    맘에 드네요.

    아.. 그리고 검색한 내용 잘 보고 갑니다.

mysql 백업/복구

Linux 2007.08.29 23:29 Posted by 애플자라
1. 전체 DB 백업
mysqldump -u유저명 -p암호 -A > alldb.sql

2. DB 백업
mysqldump -u유저명 -p암호 디비명 > alldb.sql

3. DB 복구
mysql -uroot -p암호 디비명 < alldb.sql
mysql -uroot -p암호 -f -A < alldb.sql (무조건 강제로 밀어넣기)

'Linux' 카테고리의 다른 글

로컬 서버의 열려있는 포트찾기  (0) 2007.08.29
서버사양 알아보기  (0) 2007.08.29
mysql 백업/복구  (0) 2007.08.29
mysql 비번 바꾸기  (0) 2007.08.29
mysql 암호 잃어버렸을때..  (0) 2007.08.29
alter table (테이블의 속성을 수정)  (0) 2007.08.29

댓글을 달아 주세요

mysql 암호 잃어버렸을때..

Linux 2007.08.29 23:28 Posted by 애플자라

1>암호 초기화
# killall mysqld (데몬을 모조리 죽입니다)

# cd /usr/local/mysql (sql이 깔린 곳으로 갑니다)
-의외로 이거 모르시는 분이 많은데 sql 명령을 넣으려면
sql이 깔린 디렉토리로 가야합니다.

# ./bin/safe_mysqld --skip-grant &

요기까지가 초기화입니다.


2>새 암호 넣기
# ./bin/mysql (sql 실행)

mysql>use mysql

mysql>update user set password=password('새암호') where user='root';
(root 암호 변경하는 겁니다. '새암호' 자리에 새암호를 넣으세요
예>update user set password=password('123') where user='root';

mysql> FLUSH PRIVILEGES
mysql> exit (나가서)

# ./bin/mysql -uroot -p123 으로 들어와지면 성공입니다.

끝!



(재시작해야하나요? 근데..?^^;)
./bin/mysqladmin -uroot -p123 reload <-요건 재시작

----------------------------------------------------------------

환경 Mysql 5.7.15 -> mysqld_safe명이 바뀜

#killall mysqld

#mysqld_safe --skip-grant-tables --user=mysql &

#mysql -u root -p mysql
비밀번호 물을 때 그냥 엔터.
접속 후,

>UPDATE mysql.user SET authentication_string = PASSWORD('새로운비밀번호')
WHERE User = 'root' AND Host = 'localhost';

>flush privilegse;

>quit;

'Linux' 카테고리의 다른 글

mysql 백업/복구  (0) 2007.08.29
mysql 비번 바꾸기  (0) 2007.08.29
mysql 암호 잃어버렸을때..  (0) 2007.08.29
alter table (테이블의 속성을 수정)  (0) 2007.08.29
레드햇 부팅시 mysql 자동시작(apache포함)  (0) 2007.08.29
NTFS (파티션 지우기) delpart  (0) 2007.08.29

댓글을 달아 주세요

MYSQL DB생성 & 사용자계정생성 / 삭제

Linux 2007.08.29 23:26 Posted by 애플자라

데이터베이스 생성
SQL > create database DB_이름 ;

사용자계정생성과 DB권한넘기는것을 GRANT 문으로 한방에 하겠습니다..

SQL > GRANT ALL PRIVILEGES ON 디비네임.* TO 사용자아이디@localhost IDENTIFIED by '비밀번호';
SQL > GRANT ALL PRIVILEGES ON 디비네임.* TO 사용자아이디@% IDENTIFIED by '비밀번호';
다음과 같은 형태로 해주시면 됩니다 .

privileges 리로딩

SQL > flush privileges;

-------------------------------------------------------

[5.7 이전 버젼]
update mysql.user set password=password('새로운패스워드') where user='root';
FLUSH PRIVILEGES;

[5.7 이후 버젼]
update user set authentication_string=password('새로운패스워드') where user='root';
FLUSH PRIVILEGES;

(5.7 이후 버젼에는 password 필드가 존재하지 않는다.)
설정 후 MySQL 접속 후 명령을 실행하게 되면 다음과 같은 장애가 발생한다.

mysql> SELECT 1;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

위와 같은 오류가 발생하는 경우 다음과 같은 명령어를 실행한다.

mysql> SET PASSWORD = PASSWORD('새로운패스워드');
Query OK, 0 rows affected (0.01 sec)

mysql> SELECT 1;
+---+
| 1 |
+---+
| 1 |

TAG Linux, MySQL

댓글을 달아 주세요